playful 0.1.0.alpha.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +7 -0
  2. data/.gemtest +0 -0
  3. data/.gitignore +19 -0
  4. data/.rspec +1 -0
  5. data/.travis.yml +5 -0
  6. data/Gemfile +6 -0
  7. data/History.rdoc +3 -0
  8. data/LICENSE.rdoc +22 -0
  9. data/README.rdoc +194 -0
  10. data/Rakefile +20 -0
  11. data/features/control_point.feature +13 -0
  12. data/features/device.feature +22 -0
  13. data/features/device_discovery.feature +9 -0
  14. data/features/step_definitions/control_point_steps.rb +19 -0
  15. data/features/step_definitions/device_discovery_steps.rb +40 -0
  16. data/features/step_definitions/device_steps.rb +28 -0
  17. data/features/support/common.rb +9 -0
  18. data/features/support/env.rb +17 -0
  19. data/features/support/fake_upnp_device_collection.rb +108 -0
  20. data/features/support/world_extensions.rb +15 -0
  21. data/lib/core_ext/hash_patch.rb +5 -0
  22. data/lib/core_ext/socket_patch.rb +16 -0
  23. data/lib/core_ext/to_upnp_s.rb +65 -0
  24. data/lib/playful.rb +5 -0
  25. data/lib/playful/control_point.rb +175 -0
  26. data/lib/playful/control_point/base.rb +74 -0
  27. data/lib/playful/control_point/device.rb +511 -0
  28. data/lib/playful/control_point/error.rb +13 -0
  29. data/lib/playful/control_point/service.rb +404 -0
  30. data/lib/playful/device.rb +28 -0
  31. data/lib/playful/logger.rb +8 -0
  32. data/lib/playful/ssdp.rb +195 -0
  33. data/lib/playful/ssdp/broadcast_searcher.rb +114 -0
  34. data/lib/playful/ssdp/error.rb +6 -0
  35. data/lib/playful/ssdp/listener.rb +38 -0
  36. data/lib/playful/ssdp/multicast_connection.rb +112 -0
  37. data/lib/playful/ssdp/network_constants.rb +17 -0
  38. data/lib/playful/ssdp/notifier.rb +41 -0
  39. data/lib/playful/ssdp/searcher.rb +87 -0
  40. data/lib/playful/version.rb +3 -0
  41. data/lib/rack/upnp_control_point.rb +70 -0
  42. data/playful.gemspec +38 -0
  43. data/spec/spec_helper.rb +16 -0
  44. data/spec/support/search_responses.rb +134 -0
  45. data/spec/unit/core_ext/to_upnp_s_spec.rb +105 -0
  46. data/spec/unit/playful/control_point/device_spec.rb +7 -0
  47. data/spec/unit/playful/control_point_spec.rb +45 -0
  48. data/spec/unit/playful/ssdp/listener_spec.rb +29 -0
  49. data/spec/unit/playful/ssdp/multicast_connection_spec.rb +157 -0
  50. data/spec/unit/playful/ssdp/notifier_spec.rb +76 -0
  51. data/spec/unit/playful/ssdp/searcher_spec.rb +110 -0
  52. data/spec/unit/playful/ssdp_spec.rb +214 -0
  53. data/tasks/control_point.html +30 -0
  54. data/tasks/control_point.thor +43 -0
  55. data/tasks/search.thor +128 -0
  56. data/tasks/test_js/FABridge.js +1425 -0
  57. data/tasks/test_js/WebSocketMain.swf +807 -0
  58. data/tasks/test_js/swfobject.js +825 -0
  59. data/tasks/test_js/web_socket.js +1133 -0
  60. data/test/test_ssdp.rb +298 -0
  61. data/test/test_ssdp_notification.rb +74 -0
  62. data/test/test_ssdp_response.rb +31 -0
  63. data/test/test_ssdp_search.rb +23 -0
  64. metadata +339 -0
@@ -0,0 +1,1133 @@
1
+
2
+
3
+
4
+ <!DOCTYPE html>
5
+ <html>
6
+ <head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# githubog: http://ogp.me/ns/fb/githubog#">
7
+ <meta charset='utf-8'>
8
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
9
+ <title>em-websocket/examples/js/web_socket.js at master · igrigorik/em-websocket · GitHub</title>
10
+ <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub" />
11
+ <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub" />
12
+ <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
13
+
14
+
15
+
16
+
17
+ <meta content="authenticity_token" name="csrf-param" />
18
+ <meta content="1Uh5NqCqep+5LEn/0U33Dz1L3Swxv+Czxj8mPvkVdtc=" name="csrf-token" />
19
+
20
+ <link href="https://a248.e.akamai.net/assets.github.com/stylesheets/bundles/github-bbf16587e4cb227e94d4838b0b62e06ad84f2419.css" media="screen" rel="stylesheet" type="text/css" />
21
+ <link href="https://a248.e.akamai.net/assets.github.com/stylesheets/bundles/github2-27fd7716e0bafa52297f37784a2d549774dc1969.css" media="screen" rel="stylesheet" type="text/css" />
22
+
23
+
24
+
25
+
26
+ <script src="https://a248.e.akamai.net/assets.github.com/javascripts/bundles/frameworks-a450c7f907bdc1ee6b362ab1ecca811c761fd259.js" type="text/javascript"></script>
27
+
28
+ <script defer="defer" src="https://a248.e.akamai.net/assets.github.com/javascripts/bundles/github-962475eecb5a745150445b68592ced09de5cd872.js" type="text/javascript"></script>
29
+
30
+
31
+
32
+ <link rel='permalink' href='/igrigorik/em-websocket/blob/b9d439cd3494db3225587ccf7cb060f4b37a9f13/examples/js/web_socket.js'>
33
+ <meta property="og:title" content="em-websocket"/>
34
+ <meta property="og:type" content="githubog:gitrepository"/>
35
+ <meta property="og:url" content="https://github.com/igrigorik/em-websocket"/>
36
+ <meta property="og:image" content="https://a248.e.akamai.net/assets.github.com/images/gravatars/gravatar-140.png?1329275898"/>
37
+ <meta property="og:site_name" content="GitHub"/>
38
+ <meta property="og:description" content="EventMachine based WebSocket server. Contribute to em-websocket development by creating an account on GitHub."/>
39
+
40
+ <meta name="description" content="EventMachine based WebSocket server. Contribute to em-websocket development by creating an account on GitHub." />
41
+
42
+ <link href="https://github.com/igrigorik/em-websocket/commits/master.atom" rel="alternate" title="Recent Commits to em-websocket:master" type="application/atom+xml" />
43
+
44
+ </head>
45
+
46
+
47
+ <body class="logged_out page-blob vis-public env-production " data-blob-contribs-enabled="yes">
48
+ <div id="wrapper">
49
+
50
+
51
+
52
+
53
+
54
+ <div id="header" class="true clearfix">
55
+ <div class="container clearfix">
56
+ <a class="site-logo" href="https://github.com/">
57
+ <!--[if IE]>
58
+ <img alt="GitHub" class="github-logo" src="https://a248.e.akamai.net/assets.github.com/images/modules/header/logov7.png?1323882736" />
59
+ <img alt="GitHub" class="github-logo-hover" src="https://a248.e.akamai.net/assets.github.com/images/modules/header/logov7-hover.png?1324325373" />
60
+ <![endif]-->
61
+ <img alt="GitHub" class="github-logo-4x" height="30" src="https://a248.e.akamai.net/assets.github.com/images/modules/header/logov7@4x.png?1337118067" />
62
+ <img alt="GitHub" class="github-logo-4x-hover" height="30" src="https://a248.e.akamai.net/assets.github.com/images/modules/header/logov7@4x-hover.png?1337118067" />
63
+ </a>
64
+
65
+
66
+ <!--
67
+ make sure to use fully qualified URLs here since this nav
68
+ is used on error pages on other domains
69
+ -->
70
+ <ul class="top-nav logged_out">
71
+ <li class="pricing"><a href="https://github.com/plans">Signup and Pricing</a></li>
72
+ <li class="explore"><a href="https://github.com/explore">Explore GitHub</a></li>
73
+ <li class="features"><a href="https://github.com/features">Features</a></li>
74
+ <li class="blog"><a href="https://github.com/blog">Blog</a></li>
75
+ <li class="login"><a href="https://github.com/login?return_to=%2Figrigorik%2Fem-websocket%2Fblob%2Fmaster%2Fexamples%2Fjs%2Fweb_socket.js">Login</a></li>
76
+ </ul>
77
+
78
+
79
+
80
+
81
+ </div>
82
+ </div>
83
+
84
+
85
+
86
+ <div class="site hfeed" itemscope itemtype="http://schema.org/WebPage">
87
+ <div class="container hentry">
88
+ <div class="pagehead repohead instapaper_ignore readability-menu">
89
+ <div class="title-actions-bar">
90
+
91
+
92
+
93
+
94
+ <ul class="pagehead-actions">
95
+
96
+
97
+
98
+
99
+ <li>
100
+ <span class="watch-button"><a href="/login?return_to=%2Figrigorik%2Fem-websocket" class="minibutton btn-watch js-toggler-target entice tooltipped leftwards" title="You must be logged in to use this feature" rel="nofollow">Watch</a><a class="social-count js-social-count" href="/igrigorik/em-websocket/watchers">755</a></span>
101
+ </li>
102
+ <li>
103
+ <a href="/login?return_to=%2Figrigorik%2Fem-websocket" class="minibutton btn-fork js-toggler-target fork-button entice tooltipped leftwards" title="You must be logged in to use this feature" rel="nofollow">Fork</a><a href="/igrigorik/em-websocket/network" class="social-count">73</a>
104
+ </li>
105
+
106
+ </ul>
107
+
108
+ <h1 itemscope itemtype="http://data-vocabulary.org/Breadcrumb" class="entry-title public">
109
+ <span class="repo-label"><span>public</span></span>
110
+ <span class="mega-icon mega-icon-public-repo"></span>
111
+ <span class="author vcard">
112
+ <a href="/igrigorik" class="url fn" itemprop="url" rel="author"> <span itemprop="title">igrigorik</span>
113
+ </a></span> /
114
+ <strong><a href="/igrigorik/em-websocket" class="js-current-repository">em-websocket</a></strong>
115
+ </h1>
116
+ </div>
117
+
118
+
119
+
120
+ <ul class="tabs">
121
+ <li><a href="/igrigorik/em-websocket" class="selected" highlight="repo_sourcerepo_downloadsrepo_commitsrepo_tagsrepo_branches">Code</a></li>
122
+ <li><a href="/igrigorik/em-websocket/network" highlight="repo_network">Network</a>
123
+ <li><a href="/igrigorik/em-websocket/pulls" highlight="repo_pulls">Pull Requests <span class='counter'>2</span></a></li>
124
+
125
+ <li><a href="/igrigorik/em-websocket/issues" highlight="repo_issues">Issues <span class='counter'>14</span></a></li>
126
+
127
+ <li><a href="/igrigorik/em-websocket/wiki" highlight="repo_wiki">Wiki</a></li>
128
+
129
+ <li><a href="/igrigorik/em-websocket/graphs" highlight="repo_graphsrepo_contributors">Graphs</a></li>
130
+
131
+ </ul>
132
+
133
+ <div class="frame frame-center tree-finder" style="display:none"
134
+ data-tree-list-url="/igrigorik/em-websocket/tree-list/b9d439cd3494db3225587ccf7cb060f4b37a9f13"
135
+ data-blob-url-prefix="/igrigorik/em-websocket/blob/b9d439cd3494db3225587ccf7cb060f4b37a9f13"
136
+ >
137
+
138
+ <div class="breadcrumb">
139
+ <span class="bold"><a href="/igrigorik/em-websocket">em-websocket</a></span> /
140
+ <input class="tree-finder-input js-navigation-enable" type="text" name="query" autocomplete="off" spellcheck="false">
141
+ </div>
142
+
143
+ <div class="octotip">
144
+ <p>
145
+ <a href="/igrigorik/em-websocket/dismiss-tree-finder-help" class="dismiss js-dismiss-tree-list-help" title="Hide this notice forever" rel="nofollow">Dismiss</a>
146
+ <span class="bold">Octotip:</span> You've activated the <em>file finder</em>
147
+ by pressing <span class="kbd">t</span> Start typing to filter the
148
+ file list. Use <span class="kbd badmono">↑</span> and
149
+ <span class="kbd badmono">↓</span> to navigate,
150
+ <span class="kbd">enter</span> to view files.
151
+ </p>
152
+ </div>
153
+
154
+ <table class="tree-browser" cellpadding="0" cellspacing="0">
155
+ <tr class="js-header"><th>&nbsp;</th><th>name</th></tr>
156
+ <tr class="js-no-results no-results" style="display: none">
157
+ <th colspan="2">No matching files</th>
158
+ </tr>
159
+ <tbody class="js-results-list js-navigation-container">
160
+ </tbody>
161
+ </table>
162
+ </div>
163
+
164
+ <div id="jump-to-line" style="display:none">
165
+ <h2>Jump to Line</h2>
166
+ <form accept-charset="UTF-8">
167
+ <input class="textfield" type="text">
168
+ <div class="full-button">
169
+ <button type="submit" class="classy">
170
+ Go
171
+ </button>
172
+ </div>
173
+ </form>
174
+ </div>
175
+
176
+
177
+ <div class="subnav-bar">
178
+
179
+ <ul class="actions subnav">
180
+ <li><a href="/igrigorik/em-websocket/tags" class="" highlight="repo_tags">Tags <span class="counter">10</span></a></li>
181
+ <li><a href="/igrigorik/em-websocket/downloads" class="blank downloads-blank" highlight="repo_downloads">Downloads <span class="counter">0</span></a></li>
182
+
183
+ </ul>
184
+
185
+ <ul class="scope">
186
+ <li class="switcher">
187
+
188
+ <div class="context-menu-container js-menu-container js-context-menu">
189
+ <a href="#"
190
+ class="minibutton bigger switcher js-menu-target js-commitish-button btn-branch repo-tree"
191
+ data-hotkey="w"
192
+ data-master-branch="master"
193
+ data-ref="master">
194
+ <span><i>branch:</i> master</span>
195
+ </a>
196
+
197
+ <div class="context-pane commitish-context js-menu-content">
198
+ <a href="javascript:;" class="close js-menu-close"><span class="mini-icon mini-icon-remove-close"></span></a>
199
+ <div class="context-title">Switch Branches/Tags</div>
200
+ <div class="context-body pane-selector commitish-selector js-navigation-container">
201
+ <div class="filterbar">
202
+ <input type="text" id="context-commitish-filter-field" class="js-navigation-enable" placeholder="Filter branches/tags" data-filterable />
203
+
204
+ <ul class="tabs">
205
+ <li><a href="#" data-filter="branches" class="selected">Branches</a></li>
206
+ <li><a href="#" data-filter="tags">Tags</a></li>
207
+ </ul>
208
+ </div>
209
+
210
+ <div class="js-filter-tab js-filter-branches" data-filterable-for="context-commitish-filter-field" data-filterable-type=substring>
211
+ <div class="no-results js-not-filterable">Nothing to show</div>
212
+ <div class="commitish-item branch-commitish selector-item js-navigation-item js-navigation-target">
213
+ <h4>
214
+ <a href="/igrigorik/em-websocket/blob/master/examples/js/web_socket.js" class="js-navigation-open" data-name="master" rel="nofollow">master</a>
215
+ </h4>
216
+ </div>
217
+ </div>
218
+
219
+ <div class="js-filter-tab js-filter-tags" style="display:none" data-filterable-for="context-commitish-filter-field" data-filterable-type=substring>
220
+ <div class="no-results js-not-filterable">Nothing to show</div>
221
+ <div class="commitish-item tag-commitish selector-item js-navigation-item js-navigation-target">
222
+ <h4>
223
+ <a href="/igrigorik/em-websocket/blob/v0.3.6/examples/js/web_socket.js" class="js-navigation-open" data-name="v0.3.6" rel="nofollow">v0.3.6</a>
224
+ </h4>
225
+ </div>
226
+ <div class="commitish-item tag-commitish selector-item js-navigation-item js-navigation-target">
227
+ <h4>
228
+ <a href="/igrigorik/em-websocket/blob/v0.3.5/examples/js/web_socket.js" class="js-navigation-open" data-name="v0.3.5" rel="nofollow">v0.3.5</a>
229
+ </h4>
230
+ </div>
231
+ <div class="commitish-item tag-commitish selector-item js-navigation-item js-navigation-target">
232
+ <h4>
233
+ <a href="/igrigorik/em-websocket/blob/v0.3.4/examples/js/web_socket.js" class="js-navigation-open" data-name="v0.3.4" rel="nofollow">v0.3.4</a>
234
+ </h4>
235
+ </div>
236
+ <div class="commitish-item tag-commitish selector-item js-navigation-item js-navigation-target">
237
+ <h4>
238
+ <a href="/igrigorik/em-websocket/blob/v0.3.3/examples/js/web_socket.js" class="js-navigation-open" data-name="v0.3.3" rel="nofollow">v0.3.3</a>
239
+ </h4>
240
+ </div>
241
+ <div class="commitish-item tag-commitish selector-item js-navigation-item js-navigation-target">
242
+ <h4>
243
+ <a href="/igrigorik/em-websocket/blob/v0.3.2/examples/js/web_socket.js" class="js-navigation-open" data-name="v0.3.2" rel="nofollow">v0.3.2</a>
244
+ </h4>
245
+ </div>
246
+ <div class="commitish-item tag-commitish selector-item js-navigation-item js-navigation-target">
247
+ <h4>
248
+ <a href="/igrigorik/em-websocket/blob/v0.3.1/examples/js/web_socket.js" class="js-navigation-open" data-name="v0.3.1" rel="nofollow">v0.3.1</a>
249
+ </h4>
250
+ </div>
251
+ <div class="commitish-item tag-commitish selector-item js-navigation-item js-navigation-target">
252
+ <h4>
253
+ <a href="/igrigorik/em-websocket/blob/v0.3.0/examples/js/web_socket.js" class="js-navigation-open" data-name="v0.3.0" rel="nofollow">v0.3.0</a>
254
+ </h4>
255
+ </div>
256
+ <div class="commitish-item tag-commitish selector-item js-navigation-item js-navigation-target">
257
+ <h4>
258
+ <a href="/igrigorik/em-websocket/blob/v0.2.1/examples/js/web_socket.js" class="js-navigation-open" data-name="v0.2.1" rel="nofollow">v0.2.1</a>
259
+ </h4>
260
+ </div>
261
+ <div class="commitish-item tag-commitish selector-item js-navigation-item js-navigation-target">
262
+ <h4>
263
+ <a href="/igrigorik/em-websocket/blob/v0.2.0/examples/js/web_socket.js" class="js-navigation-open" data-name="v0.2.0" rel="nofollow">v0.2.0</a>
264
+ </h4>
265
+ </div>
266
+ <div class="commitish-item tag-commitish selector-item js-navigation-item js-navigation-target">
267
+ <h4>
268
+ <a href="/igrigorik/em-websocket/blob/v0.1.4/examples/js/web_socket.js" class="js-navigation-open" data-name="v0.1.4" rel="nofollow">v0.1.4</a>
269
+ </h4>
270
+ </div>
271
+ </div>
272
+ </div>
273
+ </div><!-- /.commitish-context-context -->
274
+ </div>
275
+
276
+ </li>
277
+ </ul>
278
+
279
+ <ul class="subnav with-scope">
280
+
281
+ <li><a href="/igrigorik/em-websocket" class="selected" highlight="repo_source">Files</a></li>
282
+ <li><a href="/igrigorik/em-websocket/commits/master" highlight="repo_commits">Commits</a></li>
283
+ <li><a href="/igrigorik/em-websocket/branches" class="" highlight="repo_branches" rel="nofollow">Branches <span class="counter">1</span></a></li>
284
+ </ul>
285
+
286
+ </div>
287
+
288
+
289
+
290
+
291
+
292
+
293
+
294
+
295
+ </div><!-- /.repohead -->
296
+
297
+
298
+
299
+
300
+
301
+
302
+
303
+ <!-- block_view_fragment_key: views10/v8/blob:v21:94c5c31ec6eb97b7d5078e3729f93ac2 -->
304
+ <div id="slider">
305
+
306
+ <div class="breadcrumb" data-path="examples/js/web_socket.js/">
307
+ <b itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="/igrigorik/em-websocket/tree/b9d439cd3494db3225587ccf7cb060f4b37a9f13" class="js-rewrite-sha" itemprop="url"><span itemprop="title">em-websocket</span></a></b> / <span itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="/igrigorik/em-websocket/tree/b9d439cd3494db3225587ccf7cb060f4b37a9f13/examples" class="js-rewrite-sha" itemscope="url"><span itemprop="title">examples</span></a></span> / <span itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="/igrigorik/em-websocket/tree/b9d439cd3494db3225587ccf7cb060f4b37a9f13/examples/js" class="js-rewrite-sha" itemscope="url"><span itemprop="title">js</span></a></span> / <strong class="final-path">web_socket.js</strong> <span class="js-clippy mini-icon mini-icon-clippy " data-clipboard-text="examples/js/web_socket.js" data-copied-hint="copied!" data-copy-hint="copy to clipboard"></span>
308
+ </div>
309
+
310
+
311
+ <div class="commit file-history-tease" data-path="examples/js/web_socket.js/">
312
+ <img class="main-avatar" height="24" src="https://secure.gravatar.com/avatar/aeecf4f1c835bc7d53021bac0a8a7da9?s=140&amp;d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png" width="24" />
313
+ <span class="author">Bernard Potocki</span>
314
+ <time class="js-relative-date" datetime="2010-04-17T10:55:19-07:00" title="2010-04-17 10:55:19">April 17, 2010</time>
315
+ <div class="commit-title">
316
+ <a href="/igrigorik/em-websocket/commit/12e69e7b2793a134ae81a81dc0f3d035bb6a3393" class="message">Example of use in browser not supporting WebSocket using web-socket-js.</a>
317
+ </div>
318
+
319
+ <div class="participation">
320
+ <p class="quickstat"><a href="#blob_contributors_box" rel="facebox"><strong>0</strong> contributors</a></p>
321
+
322
+ </div>
323
+ <div id="blob_contributors_box" style="display:none">
324
+ <h2>Users on GitHub who have contributed to this file</h2>
325
+ <ul class="facebox-user-list">
326
+ </ul>
327
+ </div>
328
+ </div>
329
+
330
+ <div class="frames">
331
+ <div class="frame frame-center" data-path="examples/js/web_socket.js/" data-permalink-url="/igrigorik/em-websocket/blob/b9d439cd3494db3225587ccf7cb060f4b37a9f13/examples/js/web_socket.js" data-title="em-websocket/examples/js/web_socket.js at master · igrigorik/em-websocket · GitHub" data-type="blob">
332
+
333
+ <div id="files" class="bubble">
334
+ <div class="file">
335
+ <div class="meta">
336
+ <div class="info">
337
+ <span class="icon"><b class="mini-icon mini-icon-text-file"></b></span>
338
+ <span class="mode" title="File Mode">100755</span>
339
+ <span>313 lines (278 sloc)</span>
340
+ <span>9.057 kb</span>
341
+ </div>
342
+ <ul class="button-group actions">
343
+ <li>
344
+ <a class="grouped-button file-edit-link minibutton bigger lighter js-rewrite-sha" href="/igrigorik/em-websocket/edit/b9d439cd3494db3225587ccf7cb060f4b37a9f13/examples/js/web_socket.js" data-method="post" rel="nofollow" data-hotkey="e">Edit this file</a>
345
+ </li>
346
+
347
+ <li>
348
+ <a href="/igrigorik/em-websocket/raw/master/examples/js/web_socket.js" class="minibutton btn-raw grouped-button bigger lighter" id="raw-url"><span class="icon"></span>Raw</a>
349
+ </li>
350
+ <li>
351
+ <a href="/igrigorik/em-websocket/blame/master/examples/js/web_socket.js" class="minibutton btn-blame grouped-button bigger lighter"><span class="icon"></span>Blame</a>
352
+ </li>
353
+ <li>
354
+ <a href="/igrigorik/em-websocket/commits/master/examples/js/web_socket.js" class="minibutton btn-history grouped-button bigger lighter" rel="nofollow"><span class="icon"></span>History</a>
355
+ </li>
356
+ </ul>
357
+ </div>
358
+ <div class="data type-javascript">
359
+ <table cellpadding="0" cellspacing="0" class="lines">
360
+ <tr>
361
+ <td>
362
+ <pre class="line_numbers"><span id="L1" rel="#L1">1</span>
363
+ <span id="L2" rel="#L2">2</span>
364
+ <span id="L3" rel="#L3">3</span>
365
+ <span id="L4" rel="#L4">4</span>
366
+ <span id="L5" rel="#L5">5</span>
367
+ <span id="L6" rel="#L6">6</span>
368
+ <span id="L7" rel="#L7">7</span>
369
+ <span id="L8" rel="#L8">8</span>
370
+ <span id="L9" rel="#L9">9</span>
371
+ <span id="L10" rel="#L10">10</span>
372
+ <span id="L11" rel="#L11">11</span>
373
+ <span id="L12" rel="#L12">12</span>
374
+ <span id="L13" rel="#L13">13</span>
375
+ <span id="L14" rel="#L14">14</span>
376
+ <span id="L15" rel="#L15">15</span>
377
+ <span id="L16" rel="#L16">16</span>
378
+ <span id="L17" rel="#L17">17</span>
379
+ <span id="L18" rel="#L18">18</span>
380
+ <span id="L19" rel="#L19">19</span>
381
+ <span id="L20" rel="#L20">20</span>
382
+ <span id="L21" rel="#L21">21</span>
383
+ <span id="L22" rel="#L22">22</span>
384
+ <span id="L23" rel="#L23">23</span>
385
+ <span id="L24" rel="#L24">24</span>
386
+ <span id="L25" rel="#L25">25</span>
387
+ <span id="L26" rel="#L26">26</span>
388
+ <span id="L27" rel="#L27">27</span>
389
+ <span id="L28" rel="#L28">28</span>
390
+ <span id="L29" rel="#L29">29</span>
391
+ <span id="L30" rel="#L30">30</span>
392
+ <span id="L31" rel="#L31">31</span>
393
+ <span id="L32" rel="#L32">32</span>
394
+ <span id="L33" rel="#L33">33</span>
395
+ <span id="L34" rel="#L34">34</span>
396
+ <span id="L35" rel="#L35">35</span>
397
+ <span id="L36" rel="#L36">36</span>
398
+ <span id="L37" rel="#L37">37</span>
399
+ <span id="L38" rel="#L38">38</span>
400
+ <span id="L39" rel="#L39">39</span>
401
+ <span id="L40" rel="#L40">40</span>
402
+ <span id="L41" rel="#L41">41</span>
403
+ <span id="L42" rel="#L42">42</span>
404
+ <span id="L43" rel="#L43">43</span>
405
+ <span id="L44" rel="#L44">44</span>
406
+ <span id="L45" rel="#L45">45</span>
407
+ <span id="L46" rel="#L46">46</span>
408
+ <span id="L47" rel="#L47">47</span>
409
+ <span id="L48" rel="#L48">48</span>
410
+ <span id="L49" rel="#L49">49</span>
411
+ <span id="L50" rel="#L50">50</span>
412
+ <span id="L51" rel="#L51">51</span>
413
+ <span id="L52" rel="#L52">52</span>
414
+ <span id="L53" rel="#L53">53</span>
415
+ <span id="L54" rel="#L54">54</span>
416
+ <span id="L55" rel="#L55">55</span>
417
+ <span id="L56" rel="#L56">56</span>
418
+ <span id="L57" rel="#L57">57</span>
419
+ <span id="L58" rel="#L58">58</span>
420
+ <span id="L59" rel="#L59">59</span>
421
+ <span id="L60" rel="#L60">60</span>
422
+ <span id="L61" rel="#L61">61</span>
423
+ <span id="L62" rel="#L62">62</span>
424
+ <span id="L63" rel="#L63">63</span>
425
+ <span id="L64" rel="#L64">64</span>
426
+ <span id="L65" rel="#L65">65</span>
427
+ <span id="L66" rel="#L66">66</span>
428
+ <span id="L67" rel="#L67">67</span>
429
+ <span id="L68" rel="#L68">68</span>
430
+ <span id="L69" rel="#L69">69</span>
431
+ <span id="L70" rel="#L70">70</span>
432
+ <span id="L71" rel="#L71">71</span>
433
+ <span id="L72" rel="#L72">72</span>
434
+ <span id="L73" rel="#L73">73</span>
435
+ <span id="L74" rel="#L74">74</span>
436
+ <span id="L75" rel="#L75">75</span>
437
+ <span id="L76" rel="#L76">76</span>
438
+ <span id="L77" rel="#L77">77</span>
439
+ <span id="L78" rel="#L78">78</span>
440
+ <span id="L79" rel="#L79">79</span>
441
+ <span id="L80" rel="#L80">80</span>
442
+ <span id="L81" rel="#L81">81</span>
443
+ <span id="L82" rel="#L82">82</span>
444
+ <span id="L83" rel="#L83">83</span>
445
+ <span id="L84" rel="#L84">84</span>
446
+ <span id="L85" rel="#L85">85</span>
447
+ <span id="L86" rel="#L86">86</span>
448
+ <span id="L87" rel="#L87">87</span>
449
+ <span id="L88" rel="#L88">88</span>
450
+ <span id="L89" rel="#L89">89</span>
451
+ <span id="L90" rel="#L90">90</span>
452
+ <span id="L91" rel="#L91">91</span>
453
+ <span id="L92" rel="#L92">92</span>
454
+ <span id="L93" rel="#L93">93</span>
455
+ <span id="L94" rel="#L94">94</span>
456
+ <span id="L95" rel="#L95">95</span>
457
+ <span id="L96" rel="#L96">96</span>
458
+ <span id="L97" rel="#L97">97</span>
459
+ <span id="L98" rel="#L98">98</span>
460
+ <span id="L99" rel="#L99">99</span>
461
+ <span id="L100" rel="#L100">100</span>
462
+ <span id="L101" rel="#L101">101</span>
463
+ <span id="L102" rel="#L102">102</span>
464
+ <span id="L103" rel="#L103">103</span>
465
+ <span id="L104" rel="#L104">104</span>
466
+ <span id="L105" rel="#L105">105</span>
467
+ <span id="L106" rel="#L106">106</span>
468
+ <span id="L107" rel="#L107">107</span>
469
+ <span id="L108" rel="#L108">108</span>
470
+ <span id="L109" rel="#L109">109</span>
471
+ <span id="L110" rel="#L110">110</span>
472
+ <span id="L111" rel="#L111">111</span>
473
+ <span id="L112" rel="#L112">112</span>
474
+ <span id="L113" rel="#L113">113</span>
475
+ <span id="L114" rel="#L114">114</span>
476
+ <span id="L115" rel="#L115">115</span>
477
+ <span id="L116" rel="#L116">116</span>
478
+ <span id="L117" rel="#L117">117</span>
479
+ <span id="L118" rel="#L118">118</span>
480
+ <span id="L119" rel="#L119">119</span>
481
+ <span id="L120" rel="#L120">120</span>
482
+ <span id="L121" rel="#L121">121</span>
483
+ <span id="L122" rel="#L122">122</span>
484
+ <span id="L123" rel="#L123">123</span>
485
+ <span id="L124" rel="#L124">124</span>
486
+ <span id="L125" rel="#L125">125</span>
487
+ <span id="L126" rel="#L126">126</span>
488
+ <span id="L127" rel="#L127">127</span>
489
+ <span id="L128" rel="#L128">128</span>
490
+ <span id="L129" rel="#L129">129</span>
491
+ <span id="L130" rel="#L130">130</span>
492
+ <span id="L131" rel="#L131">131</span>
493
+ <span id="L132" rel="#L132">132</span>
494
+ <span id="L133" rel="#L133">133</span>
495
+ <span id="L134" rel="#L134">134</span>
496
+ <span id="L135" rel="#L135">135</span>
497
+ <span id="L136" rel="#L136">136</span>
498
+ <span id="L137" rel="#L137">137</span>
499
+ <span id="L138" rel="#L138">138</span>
500
+ <span id="L139" rel="#L139">139</span>
501
+ <span id="L140" rel="#L140">140</span>
502
+ <span id="L141" rel="#L141">141</span>
503
+ <span id="L142" rel="#L142">142</span>
504
+ <span id="L143" rel="#L143">143</span>
505
+ <span id="L144" rel="#L144">144</span>
506
+ <span id="L145" rel="#L145">145</span>
507
+ <span id="L146" rel="#L146">146</span>
508
+ <span id="L147" rel="#L147">147</span>
509
+ <span id="L148" rel="#L148">148</span>
510
+ <span id="L149" rel="#L149">149</span>
511
+ <span id="L150" rel="#L150">150</span>
512
+ <span id="L151" rel="#L151">151</span>
513
+ <span id="L152" rel="#L152">152</span>
514
+ <span id="L153" rel="#L153">153</span>
515
+ <span id="L154" rel="#L154">154</span>
516
+ <span id="L155" rel="#L155">155</span>
517
+ <span id="L156" rel="#L156">156</span>
518
+ <span id="L157" rel="#L157">157</span>
519
+ <span id="L158" rel="#L158">158</span>
520
+ <span id="L159" rel="#L159">159</span>
521
+ <span id="L160" rel="#L160">160</span>
522
+ <span id="L161" rel="#L161">161</span>
523
+ <span id="L162" rel="#L162">162</span>
524
+ <span id="L163" rel="#L163">163</span>
525
+ <span id="L164" rel="#L164">164</span>
526
+ <span id="L165" rel="#L165">165</span>
527
+ <span id="L166" rel="#L166">166</span>
528
+ <span id="L167" rel="#L167">167</span>
529
+ <span id="L168" rel="#L168">168</span>
530
+ <span id="L169" rel="#L169">169</span>
531
+ <span id="L170" rel="#L170">170</span>
532
+ <span id="L171" rel="#L171">171</span>
533
+ <span id="L172" rel="#L172">172</span>
534
+ <span id="L173" rel="#L173">173</span>
535
+ <span id="L174" rel="#L174">174</span>
536
+ <span id="L175" rel="#L175">175</span>
537
+ <span id="L176" rel="#L176">176</span>
538
+ <span id="L177" rel="#L177">177</span>
539
+ <span id="L178" rel="#L178">178</span>
540
+ <span id="L179" rel="#L179">179</span>
541
+ <span id="L180" rel="#L180">180</span>
542
+ <span id="L181" rel="#L181">181</span>
543
+ <span id="L182" rel="#L182">182</span>
544
+ <span id="L183" rel="#L183">183</span>
545
+ <span id="L184" rel="#L184">184</span>
546
+ <span id="L185" rel="#L185">185</span>
547
+ <span id="L186" rel="#L186">186</span>
548
+ <span id="L187" rel="#L187">187</span>
549
+ <span id="L188" rel="#L188">188</span>
550
+ <span id="L189" rel="#L189">189</span>
551
+ <span id="L190" rel="#L190">190</span>
552
+ <span id="L191" rel="#L191">191</span>
553
+ <span id="L192" rel="#L192">192</span>
554
+ <span id="L193" rel="#L193">193</span>
555
+ <span id="L194" rel="#L194">194</span>
556
+ <span id="L195" rel="#L195">195</span>
557
+ <span id="L196" rel="#L196">196</span>
558
+ <span id="L197" rel="#L197">197</span>
559
+ <span id="L198" rel="#L198">198</span>
560
+ <span id="L199" rel="#L199">199</span>
561
+ <span id="L200" rel="#L200">200</span>
562
+ <span id="L201" rel="#L201">201</span>
563
+ <span id="L202" rel="#L202">202</span>
564
+ <span id="L203" rel="#L203">203</span>
565
+ <span id="L204" rel="#L204">204</span>
566
+ <span id="L205" rel="#L205">205</span>
567
+ <span id="L206" rel="#L206">206</span>
568
+ <span id="L207" rel="#L207">207</span>
569
+ <span id="L208" rel="#L208">208</span>
570
+ <span id="L209" rel="#L209">209</span>
571
+ <span id="L210" rel="#L210">210</span>
572
+ <span id="L211" rel="#L211">211</span>
573
+ <span id="L212" rel="#L212">212</span>
574
+ <span id="L213" rel="#L213">213</span>
575
+ <span id="L214" rel="#L214">214</span>
576
+ <span id="L215" rel="#L215">215</span>
577
+ <span id="L216" rel="#L216">216</span>
578
+ <span id="L217" rel="#L217">217</span>
579
+ <span id="L218" rel="#L218">218</span>
580
+ <span id="L219" rel="#L219">219</span>
581
+ <span id="L220" rel="#L220">220</span>
582
+ <span id="L221" rel="#L221">221</span>
583
+ <span id="L222" rel="#L222">222</span>
584
+ <span id="L223" rel="#L223">223</span>
585
+ <span id="L224" rel="#L224">224</span>
586
+ <span id="L225" rel="#L225">225</span>
587
+ <span id="L226" rel="#L226">226</span>
588
+ <span id="L227" rel="#L227">227</span>
589
+ <span id="L228" rel="#L228">228</span>
590
+ <span id="L229" rel="#L229">229</span>
591
+ <span id="L230" rel="#L230">230</span>
592
+ <span id="L231" rel="#L231">231</span>
593
+ <span id="L232" rel="#L232">232</span>
594
+ <span id="L233" rel="#L233">233</span>
595
+ <span id="L234" rel="#L234">234</span>
596
+ <span id="L235" rel="#L235">235</span>
597
+ <span id="L236" rel="#L236">236</span>
598
+ <span id="L237" rel="#L237">237</span>
599
+ <span id="L238" rel="#L238">238</span>
600
+ <span id="L239" rel="#L239">239</span>
601
+ <span id="L240" rel="#L240">240</span>
602
+ <span id="L241" rel="#L241">241</span>
603
+ <span id="L242" rel="#L242">242</span>
604
+ <span id="L243" rel="#L243">243</span>
605
+ <span id="L244" rel="#L244">244</span>
606
+ <span id="L245" rel="#L245">245</span>
607
+ <span id="L246" rel="#L246">246</span>
608
+ <span id="L247" rel="#L247">247</span>
609
+ <span id="L248" rel="#L248">248</span>
610
+ <span id="L249" rel="#L249">249</span>
611
+ <span id="L250" rel="#L250">250</span>
612
+ <span id="L251" rel="#L251">251</span>
613
+ <span id="L252" rel="#L252">252</span>
614
+ <span id="L253" rel="#L253">253</span>
615
+ <span id="L254" rel="#L254">254</span>
616
+ <span id="L255" rel="#L255">255</span>
617
+ <span id="L256" rel="#L256">256</span>
618
+ <span id="L257" rel="#L257">257</span>
619
+ <span id="L258" rel="#L258">258</span>
620
+ <span id="L259" rel="#L259">259</span>
621
+ <span id="L260" rel="#L260">260</span>
622
+ <span id="L261" rel="#L261">261</span>
623
+ <span id="L262" rel="#L262">262</span>
624
+ <span id="L263" rel="#L263">263</span>
625
+ <span id="L264" rel="#L264">264</span>
626
+ <span id="L265" rel="#L265">265</span>
627
+ <span id="L266" rel="#L266">266</span>
628
+ <span id="L267" rel="#L267">267</span>
629
+ <span id="L268" rel="#L268">268</span>
630
+ <span id="L269" rel="#L269">269</span>
631
+ <span id="L270" rel="#L270">270</span>
632
+ <span id="L271" rel="#L271">271</span>
633
+ <span id="L272" rel="#L272">272</span>
634
+ <span id="L273" rel="#L273">273</span>
635
+ <span id="L274" rel="#L274">274</span>
636
+ <span id="L275" rel="#L275">275</span>
637
+ <span id="L276" rel="#L276">276</span>
638
+ <span id="L277" rel="#L277">277</span>
639
+ <span id="L278" rel="#L278">278</span>
640
+ <span id="L279" rel="#L279">279</span>
641
+ <span id="L280" rel="#L280">280</span>
642
+ <span id="L281" rel="#L281">281</span>
643
+ <span id="L282" rel="#L282">282</span>
644
+ <span id="L283" rel="#L283">283</span>
645
+ <span id="L284" rel="#L284">284</span>
646
+ <span id="L285" rel="#L285">285</span>
647
+ <span id="L286" rel="#L286">286</span>
648
+ <span id="L287" rel="#L287">287</span>
649
+ <span id="L288" rel="#L288">288</span>
650
+ <span id="L289" rel="#L289">289</span>
651
+ <span id="L290" rel="#L290">290</span>
652
+ <span id="L291" rel="#L291">291</span>
653
+ <span id="L292" rel="#L292">292</span>
654
+ <span id="L293" rel="#L293">293</span>
655
+ <span id="L294" rel="#L294">294</span>
656
+ <span id="L295" rel="#L295">295</span>
657
+ <span id="L296" rel="#L296">296</span>
658
+ <span id="L297" rel="#L297">297</span>
659
+ <span id="L298" rel="#L298">298</span>
660
+ <span id="L299" rel="#L299">299</span>
661
+ <span id="L300" rel="#L300">300</span>
662
+ <span id="L301" rel="#L301">301</span>
663
+ <span id="L302" rel="#L302">302</span>
664
+ <span id="L303" rel="#L303">303</span>
665
+ <span id="L304" rel="#L304">304</span>
666
+ <span id="L305" rel="#L305">305</span>
667
+ <span id="L306" rel="#L306">306</span>
668
+ <span id="L307" rel="#L307">307</span>
669
+ <span id="L308" rel="#L308">308</span>
670
+ <span id="L309" rel="#L309">309</span>
671
+ <span id="L310" rel="#L310">310</span>
672
+ <span id="L311" rel="#L311">311</span>
673
+ <span id="L312" rel="#L312">312</span>
674
+ </pre>
675
+ </td>
676
+ <td width="100%">
677
+ <div class="highlight"><pre><div class='line' id='LC1'><span class="c1">// Copyright: Hiroshi Ichikawa &lt;http://gimite.net/en/&gt;</span></div><div class='line' id='LC2'><span class="c1">// Lincense: New BSD Lincense</span></div><div class='line' id='LC3'><span class="c1">// Reference: http://dev.w3.org/html5/websockets/</span></div><div class='line' id='LC4'><span class="c1">// Reference: http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol</span></div><div class='line' id='LC5'><br/></div><div class='line' id='LC6'><span class="p">(</span><span class="kd">function</span><span class="p">()</span> <span class="p">{</span></div><div class='line' id='LC7'>&nbsp;&nbsp;</div><div class='line' id='LC8'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="nb">window</span><span class="p">.</span><span class="nx">WebSocket</span><span class="p">)</span> <span class="k">return</span><span class="p">;</span></div><div class='line' id='LC9'><br/></div><div class='line' id='LC10'>&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">console</span> <span class="o">=</span> <span class="nb">window</span><span class="p">.</span><span class="nx">console</span><span class="p">;</span></div><div class='line' id='LC11'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">console</span><span class="p">)</span> <span class="nx">console</span> <span class="o">=</span> <span class="p">{</span><span class="nx">log</span><span class="o">:</span> <span class="kd">function</span><span class="p">(){</span> <span class="p">},</span> <span class="nx">error</span><span class="o">:</span> <span class="kd">function</span><span class="p">(){</span> <span class="p">}};</span></div><div class='line' id='LC12'><br/></div><div class='line' id='LC13'>&nbsp;&nbsp;<span class="kd">function</span> <span class="nx">hasFlash</span><span class="p">()</span> <span class="p">{</span></div><div class='line' id='LC14'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="s1">&#39;navigator&#39;</span> <span class="k">in</span> <span class="nb">window</span> <span class="o">&amp;&amp;</span> <span class="s1">&#39;plugins&#39;</span> <span class="k">in</span> <span class="nx">navigator</span> <span class="o">&amp;&amp;</span> <span class="nx">navigator</span><span class="p">.</span><span class="nx">plugins</span><span class="p">[</span><span class="s1">&#39;Shockwave Flash&#39;</span><span class="p">])</span> <span class="p">{</span></div><div class='line' id='LC15'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="o">!!</span><span class="nx">navigator</span><span class="p">.</span><span class="nx">plugins</span><span class="p">[</span><span class="s1">&#39;Shockwave Flash&#39;</span><span class="p">].</span><span class="nx">description</span><span class="p">;</span></div><div class='line' id='LC16'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC17'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="s1">&#39;ActiveXObject&#39;</span> <span class="k">in</span> <span class="nb">window</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC18'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">try</span> <span class="p">{</span></div><div class='line' id='LC19'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="o">!!</span><span class="k">new</span> <span class="nx">ActiveXObject</span><span class="p">(</span><span class="s1">&#39;ShockwaveFlash.ShockwaveFlash&#39;</span><span class="p">).</span><span class="nx">GetVariable</span><span class="p">(</span><span class="s1">&#39;$version&#39;</span><span class="p">);</span></div><div class='line' id='LC20'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="nx">e</span><span class="p">)</span> <span class="p">{}</span></div><div class='line' id='LC21'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC22'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="kc">false</span><span class="p">;</span></div><div class='line' id='LC23'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC24'>&nbsp;&nbsp;</div><div class='line' id='LC25'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">hasFlash</span><span class="p">())</span> <span class="p">{</span></div><div class='line' id='LC26'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">console</span><span class="p">.</span><span class="nx">error</span><span class="p">(</span><span class="s2">&quot;Flash Player is not installed.&quot;</span><span class="p">);</span></div><div class='line' id='LC27'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span><span class="p">;</span></div><div class='line' id='LC28'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC29'><br/></div><div class='line' id='LC30'>&nbsp;&nbsp;<span class="nx">WebSocket</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">url</span><span class="p">,</span> <span class="nx">protocol</span><span class="p">,</span> <span class="nx">proxyHost</span><span class="p">,</span> <span class="nx">proxyPort</span><span class="p">,</span> <span class="nx">headers</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC31'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">self</span> <span class="o">=</span> <span class="k">this</span><span class="p">;</span></div><div class='line' id='LC32'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">self</span><span class="p">.</span><span class="nx">readyState</span> <span class="o">=</span> <span class="nx">WebSocket</span><span class="p">.</span><span class="nx">CONNECTING</span><span class="p">;</span></div><div class='line' id='LC33'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">self</span><span class="p">.</span><span class="nx">bufferedAmount</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span></div><div class='line' id='LC34'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">WebSocket</span><span class="p">.</span><span class="nx">__addTask</span><span class="p">(</span><span class="kd">function</span><span class="p">()</span> <span class="p">{</span></div><div class='line' id='LC35'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">self</span><span class="p">.</span><span class="nx">__flash</span> <span class="o">=</span></div><div class='line' id='LC36'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">WebSocket</span><span class="p">.</span><span class="nx">__flash</span><span class="p">.</span><span class="nx">create</span><span class="p">(</span><span class="nx">url</span><span class="p">,</span> <span class="nx">protocol</span><span class="p">,</span> <span class="nx">proxyHost</span> <span class="o">||</span> <span class="kc">null</span><span class="p">,</span> <span class="nx">proxyPort</span> <span class="o">||</span> <span class="mi">0</span><span class="p">,</span> <span class="nx">headers</span> <span class="o">||</span> <span class="kc">null</span><span class="p">);</span></div><div class='line' id='LC37'><br/></div><div class='line' id='LC38'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">self</span><span class="p">.</span><span class="nx">__flash</span><span class="p">.</span><span class="nx">addEventListener</span><span class="p">(</span><span class="s2">&quot;open&quot;</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">fe</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC39'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">try</span> <span class="p">{</span></div><div class='line' id='LC40'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="nx">self</span><span class="p">.</span><span class="nx">onopen</span><span class="p">)</span> <span class="nx">self</span><span class="p">.</span><span class="nx">onopen</span><span class="p">();</span></div><div class='line' id='LC41'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="nx">e</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC42'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">console</span><span class="p">.</span><span class="nx">error</span><span class="p">(</span><span class="nx">e</span><span class="p">.</span><span class="nx">toString</span><span class="p">());</span></div><div class='line' id='LC43'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC44'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">});</span></div><div class='line' id='LC45'><br/></div><div class='line' id='LC46'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">self</span><span class="p">.</span><span class="nx">__flash</span><span class="p">.</span><span class="nx">addEventListener</span><span class="p">(</span><span class="s2">&quot;close&quot;</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">fe</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC47'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">try</span> <span class="p">{</span></div><div class='line' id='LC48'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="nx">self</span><span class="p">.</span><span class="nx">onclose</span><span class="p">)</span> <span class="nx">self</span><span class="p">.</span><span class="nx">onclose</span><span class="p">();</span></div><div class='line' id='LC49'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="nx">e</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC50'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">console</span><span class="p">.</span><span class="nx">error</span><span class="p">(</span><span class="nx">e</span><span class="p">.</span><span class="nx">toString</span><span class="p">());</span></div><div class='line' id='LC51'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC52'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">});</span></div><div class='line' id='LC53'><br/></div><div class='line' id='LC54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">self</span><span class="p">.</span><span class="nx">__flash</span><span class="p">.</span><span class="nx">addEventListener</span><span class="p">(</span><span class="s2">&quot;message&quot;</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">fe</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC55'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">data</span> <span class="o">=</span> <span class="nb">decodeURIComponent</span><span class="p">(</span><span class="nx">fe</span><span class="p">.</span><span class="nx">getData</span><span class="p">());</span></div><div class='line' id='LC56'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">try</span> <span class="p">{</span></div><div class='line' id='LC57'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="nx">self</span><span class="p">.</span><span class="nx">onmessage</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC58'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">e</span><span class="p">;</span></div><div class='line' id='LC59'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="nb">window</span><span class="p">.</span><span class="nx">MessageEvent</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC60'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">e</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">createEvent</span><span class="p">(</span><span class="s2">&quot;MessageEvent&quot;</span><span class="p">);</span></div><div class='line' id='LC61'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">e</span><span class="p">.</span><span class="nx">initMessageEvent</span><span class="p">(</span><span class="s2">&quot;message&quot;</span><span class="p">,</span> <span class="kc">false</span><span class="p">,</span> <span class="kc">false</span><span class="p">,</span> <span class="nx">data</span><span class="p">,</span> <span class="kc">null</span><span class="p">,</span> <span class="kc">null</span><span class="p">,</span> <span class="nb">window</span><span class="p">);</span></div><div class='line' id='LC62'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span> <span class="k">else</span> <span class="p">{</span> <span class="c1">// IE</span></div><div class='line' id='LC63'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">e</span> <span class="o">=</span> <span class="p">{</span><span class="nx">data</span><span class="o">:</span> <span class="nx">data</span><span class="p">};</span></div><div class='line' id='LC64'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC65'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">self</span><span class="p">.</span><span class="nx">onmessage</span><span class="p">(</span><span class="nx">e</span><span class="p">);</span></div><div class='line' id='LC66'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC67'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="nx">e</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC68'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">console</span><span class="p">.</span><span class="nx">error</span><span class="p">(</span><span class="nx">e</span><span class="p">.</span><span class="nx">toString</span><span class="p">());</span></div><div class='line' id='LC69'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC70'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">});</span></div><div class='line' id='LC71'><br/></div><div class='line' id='LC72'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">self</span><span class="p">.</span><span class="nx">__flash</span><span class="p">.</span><span class="nx">addEventListener</span><span class="p">(</span><span class="s2">&quot;stateChange&quot;</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">fe</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC73'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">try</span> <span class="p">{</span></div><div class='line' id='LC74'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">self</span><span class="p">.</span><span class="nx">readyState</span> <span class="o">=</span> <span class="nx">fe</span><span class="p">.</span><span class="nx">getReadyState</span><span class="p">();</span></div><div class='line' id='LC75'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">self</span><span class="p">.</span><span class="nx">bufferedAmount</span> <span class="o">=</span> <span class="nx">fe</span><span class="p">.</span><span class="nx">getBufferedAmount</span><span class="p">();</span></div><div class='line' id='LC76'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="nx">e</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC77'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">console</span><span class="p">.</span><span class="nx">error</span><span class="p">(</span><span class="nx">e</span><span class="p">.</span><span class="nx">toString</span><span class="p">());</span></div><div class='line' id='LC78'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC79'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">});</span></div><div class='line' id='LC80'><br/></div><div class='line' id='LC81'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">//console.log(&quot;[WebSocket] Flash object is ready&quot;);</span></div><div class='line' id='LC82'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">});</span></div><div class='line' id='LC83'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC84'><br/></div><div class='line' id='LC85'>&nbsp;&nbsp;<span class="nx">WebSocket</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">send</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">data</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC86'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="k">this</span><span class="p">.</span><span class="nx">__flash</span> <span class="o">||</span> <span class="k">this</span><span class="p">.</span><span class="nx">readyState</span> <span class="o">==</span> <span class="nx">WebSocket</span><span class="p">.</span><span class="nx">CONNECTING</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC87'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">throw</span> <span class="s2">&quot;INVALID_STATE_ERR: Web Socket connection has not been established&quot;</span><span class="p">;</span></div><div class='line' id='LC88'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC89'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">result</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">__flash</span><span class="p">.</span><span class="nx">send</span><span class="p">(</span><span class="nx">data</span><span class="p">);</span></div><div class='line' id='LC90'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="nx">result</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// success</span></div><div class='line' id='LC91'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="kc">true</span><span class="p">;</span></div><div class='line' id='LC92'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span> <span class="k">else</span> <span class="p">{</span></div><div class='line' id='LC93'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">bufferedAmount</span> <span class="o">=</span> <span class="nx">result</span><span class="p">;</span></div><div class='line' id='LC94'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="kc">false</span><span class="p">;</span></div><div class='line' id='LC95'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC96'>&nbsp;&nbsp;<span class="p">};</span></div><div class='line' id='LC97'><br/></div><div class='line' id='LC98'>&nbsp;&nbsp;<span class="nx">WebSocket</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">close</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span></div><div class='line' id='LC99'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="k">this</span><span class="p">.</span><span class="nx">__flash</span><span class="p">)</span> <span class="k">return</span><span class="p">;</span></div><div class='line' id='LC100'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">readyState</span> <span class="o">!=</span> <span class="nx">WebSocket</span><span class="p">.</span><span class="nx">OPEN</span><span class="p">)</span> <span class="k">return</span><span class="p">;</span></div><div class='line' id='LC101'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">__flash</span><span class="p">.</span><span class="nx">close</span><span class="p">();</span></div><div class='line' id='LC102'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// Sets/calls them manually here because Flash WebSocketConnection.close cannot fire events</span></div><div class='line' id='LC103'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// which causes weird error:</span></div><div class='line' id='LC104'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// &gt; You are trying to call recursively into the Flash Player which is not allowed.</span></div><div class='line' id='LC105'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">readyState</span> <span class="o">=</span> <span class="nx">WebSocket</span><span class="p">.</span><span class="nx">CLOSED</span><span class="p">;</span></div><div class='line' id='LC106'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">onclose</span><span class="p">)</span> <span class="k">this</span><span class="p">.</span><span class="nx">onclose</span><span class="p">();</span></div><div class='line' id='LC107'>&nbsp;&nbsp;<span class="p">};</span></div><div class='line' id='LC108'><br/></div><div class='line' id='LC109'>&nbsp;&nbsp;<span class="cm">/**</span></div><div class='line' id='LC110'><span class="cm"> * Implementation of {@link &lt;a href=&quot;http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-registration&quot;&gt;DOM 2 EventTarget Interface&lt;/a&gt;}</span></div><div class='line' id='LC111'><span class="cm"> *</span></div><div class='line' id='LC112'><span class="cm"> * @param {string} type</span></div><div class='line' id='LC113'><span class="cm"> * @param {function} listener</span></div><div class='line' id='LC114'><span class="cm"> * @param {boolean} useCapture !NB Not implemented yet</span></div><div class='line' id='LC115'><span class="cm"> * @return void</span></div><div class='line' id='LC116'><span class="cm"> */</span></div><div class='line' id='LC117'>&nbsp;&nbsp;<span class="nx">WebSocket</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">addEventListener</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">type</span><span class="p">,</span> <span class="nx">listener</span><span class="p">,</span> <span class="nx">useCapture</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC118'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="p">(</span><span class="s1">&#39;__events&#39;</span> <span class="k">in</span> <span class="k">this</span><span class="p">))</span> <span class="p">{</span></div><div class='line' id='LC119'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">__events</span> <span class="o">=</span> <span class="p">{};</span></div><div class='line' id='LC120'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC121'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="p">(</span><span class="nx">type</span> <span class="k">in</span> <span class="k">this</span><span class="p">.</span><span class="nx">__events</span><span class="p">))</span> <span class="p">{</span></div><div class='line' id='LC122'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">__events</span><span class="p">[</span><span class="nx">type</span><span class="p">]</span> <span class="o">=</span> <span class="p">[];</span></div><div class='line' id='LC123'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="s1">&#39;function&#39;</span> <span class="o">==</span> <span class="k">typeof</span> <span class="k">this</span><span class="p">[</span><span class="s1">&#39;on&#39;</span> <span class="o">+</span> <span class="nx">type</span><span class="p">])</span> <span class="p">{</span></div><div class='line' id='LC124'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">__events</span><span class="p">[</span><span class="nx">type</span><span class="p">].</span><span class="nx">defaultHandler</span> <span class="o">=</span> <span class="k">this</span><span class="p">[</span><span class="s1">&#39;on&#39;</span> <span class="o">+</span> <span class="nx">type</span><span class="p">];</span></div><div class='line' id='LC125'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">[</span><span class="s1">&#39;on&#39;</span> <span class="o">+</span> <span class="nx">type</span><span class="p">]</span> <span class="o">=</span> <span class="nx">WebSocket_FireEvent</span><span class="p">(</span><span class="k">this</span><span class="p">,</span> <span class="nx">type</span><span class="p">);</span></div><div class='line' id='LC126'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC127'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC128'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">__events</span><span class="p">[</span><span class="nx">type</span><span class="p">].</span><span class="nx">push</span><span class="p">(</span><span class="nx">listener</span><span class="p">);</span></div><div class='line' id='LC129'>&nbsp;&nbsp;<span class="p">};</span></div><div class='line' id='LC130'><br/></div><div class='line' id='LC131'>&nbsp;&nbsp;<span class="cm">/**</span></div><div class='line' id='LC132'><span class="cm"> * Implementation of {@link &lt;a href=&quot;http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-registration&quot;&gt;DOM 2 EventTarget Interface&lt;/a&gt;}</span></div><div class='line' id='LC133'><span class="cm"> *</span></div><div class='line' id='LC134'><span class="cm"> * @param {string} type</span></div><div class='line' id='LC135'><span class="cm"> * @param {function} listener</span></div><div class='line' id='LC136'><span class="cm"> * @param {boolean} useCapture NB! Not implemented yet</span></div><div class='line' id='LC137'><span class="cm"> * @return void</span></div><div class='line' id='LC138'><span class="cm"> */</span></div><div class='line' id='LC139'>&nbsp;&nbsp;<span class="nx">WebSocket</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">removeEventListener</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">type</span><span class="p">,</span> <span class="nx">listener</span><span class="p">,</span> <span class="nx">useCapture</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC140'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="p">(</span><span class="s1">&#39;__events&#39;</span> <span class="k">in</span> <span class="k">this</span><span class="p">))</span> <span class="p">{</span></div><div class='line' id='LC141'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">__events</span> <span class="o">=</span> <span class="p">{};</span></div><div class='line' id='LC142'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC143'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="p">(</span><span class="nx">type</span> <span class="k">in</span> <span class="k">this</span><span class="p">.</span><span class="nx">__events</span><span class="p">))</span> <span class="k">return</span><span class="p">;</span></div><div class='line' id='LC144'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">__events</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">i</span> <span class="o">&gt;</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span> <span class="o">--</span><span class="nx">i</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC145'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="nx">listener</span> <span class="o">===</span> <span class="k">this</span><span class="p">.</span><span class="nx">__events</span><span class="p">[</span><span class="nx">type</span><span class="p">][</span><span class="nx">i</span><span class="p">])</span> <span class="p">{</span></div><div class='line' id='LC146'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">__events</span><span class="p">[</span><span class="nx">type</span><span class="p">].</span><span class="nx">splice</span><span class="p">(</span><span class="nx">i</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span></div><div class='line' id='LC147'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">break</span><span class="p">;</span></div><div class='line' id='LC148'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC149'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC150'>&nbsp;&nbsp;<span class="p">};</span></div><div class='line' id='LC151'><br/></div><div class='line' id='LC152'>&nbsp;&nbsp;<span class="cm">/**</span></div><div class='line' id='LC153'><span class="cm"> * Implementation of {@link &lt;a href=&quot;http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-registration&quot;&gt;DOM 2 EventTarget Interface&lt;/a&gt;}</span></div><div class='line' id='LC154'><span class="cm"> *</span></div><div class='line' id='LC155'><span class="cm"> * @param {WebSocketEvent} event</span></div><div class='line' id='LC156'><span class="cm"> * @return void</span></div><div class='line' id='LC157'><span class="cm"> */</span></div><div class='line' id='LC158'>&nbsp;&nbsp;<span class="nx">WebSocket</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">dispatchEvent</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">event</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC159'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="p">(</span><span class="s1">&#39;__events&#39;</span> <span class="k">in</span> <span class="k">this</span><span class="p">))</span> <span class="k">throw</span> <span class="s1">&#39;UNSPECIFIED_EVENT_TYPE_ERR&#39;</span><span class="p">;</span></div><div class='line' id='LC160'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="p">(</span><span class="nx">event</span><span class="p">.</span><span class="nx">type</span> <span class="k">in</span> <span class="k">this</span><span class="p">.</span><span class="nx">__events</span><span class="p">))</span> <span class="k">throw</span> <span class="s1">&#39;UNSPECIFIED_EVENT_TYPE_ERR&#39;</span><span class="p">;</span></div><div class='line' id='LC161'><br/></div><div class='line' id='LC162'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="nx">l</span> <span class="o">=</span> <span class="k">this</span><span class="p">.</span><span class="nx">__events</span><span class="p">[</span><span class="nx">event</span><span class="p">.</span><span class="nx">type</span><span class="p">].</span><span class="nx">length</span><span class="p">;</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">l</span><span class="p">;</span> <span class="o">++</span> <span class="nx">i</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC163'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">__events</span><span class="p">[</span><span class="nx">event</span><span class="p">.</span><span class="nx">type</span><span class="p">][</span><span class="nx">i</span><span class="p">](</span><span class="nx">event</span><span class="p">);</span></div><div class='line' id='LC164'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="nx">event</span><span class="p">.</span><span class="nx">cancelBubble</span><span class="p">)</span> <span class="k">break</span><span class="p">;</span></div><div class='line' id='LC165'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC166'><br/></div><div class='line' id='LC167'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="kc">false</span> <span class="o">!==</span> <span class="nx">event</span><span class="p">.</span><span class="nx">returnValue</span> <span class="o">&amp;&amp;</span></div><div class='line' id='LC168'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="s1">&#39;function&#39;</span> <span class="o">==</span> <span class="k">typeof</span> <span class="k">this</span><span class="p">.</span><span class="nx">__events</span><span class="p">[</span><span class="nx">event</span><span class="p">.</span><span class="nx">type</span><span class="p">].</span><span class="nx">defaultHandler</span><span class="p">)</span></div><div class='line' id='LC169'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC170'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">__events</span><span class="p">[</span><span class="nx">event</span><span class="p">.</span><span class="nx">type</span><span class="p">].</span><span class="nx">defaultHandler</span><span class="p">(</span><span class="nx">event</span><span class="p">);</span></div><div class='line' id='LC171'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC172'>&nbsp;&nbsp;<span class="p">};</span></div><div class='line' id='LC173'><br/></div><div class='line' id='LC174'>&nbsp;&nbsp;<span class="cm">/**</span></div><div class='line' id='LC175'><span class="cm"> *</span></div><div class='line' id='LC176'><span class="cm"> * @param {object} object</span></div><div class='line' id='LC177'><span class="cm"> * @param {string} type</span></div><div class='line' id='LC178'><span class="cm"> */</span></div><div class='line' id='LC179'>&nbsp;&nbsp;<span class="kd">function</span> <span class="nx">WebSocket_FireEvent</span><span class="p">(</span><span class="nx">object</span><span class="p">,</span> <span class="nx">type</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC180'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="kd">function</span><span class="p">(</span><span class="nx">data</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC181'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">event</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">WebSocketEvent</span><span class="p">();</span></div><div class='line' id='LC182'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">event</span><span class="p">.</span><span class="nx">initEvent</span><span class="p">(</span><span class="nx">type</span><span class="p">,</span> <span class="kc">true</span><span class="p">,</span> <span class="kc">true</span><span class="p">);</span></div><div class='line' id='LC183'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">event</span><span class="p">.</span><span class="nx">target</span> <span class="o">=</span> <span class="nx">event</span><span class="p">.</span><span class="nx">currentTarget</span> <span class="o">=</span> <span class="nx">object</span><span class="p">;</span></div><div class='line' id='LC184'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">key</span> <span class="k">in</span> <span class="nx">data</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC185'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">event</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="nx">data</span><span class="p">[</span><span class="nx">key</span><span class="p">];</span></div><div class='line' id='LC186'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC187'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">object</span><span class="p">.</span><span class="nx">dispatchEvent</span><span class="p">(</span><span class="nx">event</span><span class="p">,</span> <span class="nx">arguments</span><span class="p">);</span></div><div class='line' id='LC188'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">};</span></div><div class='line' id='LC189'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC190'><br/></div><div class='line' id='LC191'>&nbsp;&nbsp;<span class="cm">/**</span></div><div class='line' id='LC192'><span class="cm"> * Basic implementation of {@link &lt;a href=&quot;http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-interface&quot;&gt;DOM 2 EventInterface&lt;/a&gt;}</span></div><div class='line' id='LC193'><span class="cm"> *</span></div><div class='line' id='LC194'><span class="cm"> * @class</span></div><div class='line' id='LC195'><span class="cm"> * @constructor</span></div><div class='line' id='LC196'><span class="cm"> */</span></div><div class='line' id='LC197'>&nbsp;&nbsp;<span class="kd">function</span> <span class="nx">WebSocketEvent</span><span class="p">(){}</span></div><div class='line' id='LC198'><br/></div><div class='line' id='LC199'>&nbsp;&nbsp;<span class="cm">/**</span></div><div class='line' id='LC200'><span class="cm"> *</span></div><div class='line' id='LC201'><span class="cm"> * @type boolean</span></div><div class='line' id='LC202'><span class="cm"> */</span></div><div class='line' id='LC203'>&nbsp;&nbsp;<span class="nx">WebSocketEvent</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">cancelable</span> <span class="o">=</span> <span class="kc">true</span><span class="p">;</span></div><div class='line' id='LC204'><br/></div><div class='line' id='LC205'>&nbsp;&nbsp;<span class="cm">/**</span></div><div class='line' id='LC206'><span class="cm"> *</span></div><div class='line' id='LC207'><span class="cm"> * @type boolean</span></div><div class='line' id='LC208'><span class="cm"> */</span></div><div class='line' id='LC209'>&nbsp;&nbsp;<span class="nx">WebSocketEvent</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">cancelBubble</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span></div><div class='line' id='LC210'><br/></div><div class='line' id='LC211'>&nbsp;&nbsp;<span class="cm">/**</span></div><div class='line' id='LC212'><span class="cm"> *</span></div><div class='line' id='LC213'><span class="cm"> * @return void</span></div><div class='line' id='LC214'><span class="cm"> */</span></div><div class='line' id='LC215'>&nbsp;&nbsp;<span class="nx">WebSocketEvent</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">preventDefault</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span></div><div class='line' id='LC216'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">cancelable</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC217'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">returnValue</span> <span class="o">=</span> <span class="kc">false</span><span class="p">;</span></div><div class='line' id='LC218'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC219'>&nbsp;&nbsp;<span class="p">};</span></div><div class='line' id='LC220'><br/></div><div class='line' id='LC221'>&nbsp;&nbsp;<span class="cm">/**</span></div><div class='line' id='LC222'><span class="cm"> *</span></div><div class='line' id='LC223'><span class="cm"> * @return void</span></div><div class='line' id='LC224'><span class="cm"> */</span></div><div class='line' id='LC225'>&nbsp;&nbsp;<span class="nx">WebSocketEvent</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">stopPropagation</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span></div><div class='line' id='LC226'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">cancelBubble</span> <span class="o">=</span> <span class="kc">true</span><span class="p">;</span></div><div class='line' id='LC227'>&nbsp;&nbsp;<span class="p">};</span></div><div class='line' id='LC228'><br/></div><div class='line' id='LC229'>&nbsp;&nbsp;<span class="cm">/**</span></div><div class='line' id='LC230'><span class="cm"> *</span></div><div class='line' id='LC231'><span class="cm"> * @param {string} eventTypeArg</span></div><div class='line' id='LC232'><span class="cm"> * @param {boolean} canBubbleArg</span></div><div class='line' id='LC233'><span class="cm"> * @param {boolean} cancelableArg</span></div><div class='line' id='LC234'><span class="cm"> * @return void</span></div><div class='line' id='LC235'><span class="cm"> */</span></div><div class='line' id='LC236'>&nbsp;&nbsp;<span class="nx">WebSocketEvent</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">initEvent</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">eventTypeArg</span><span class="p">,</span> <span class="nx">canBubbleArg</span><span class="p">,</span> <span class="nx">cancelableArg</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC237'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">type</span> <span class="o">=</span> <span class="nx">eventTypeArg</span><span class="p">;</span></div><div class='line' id='LC238'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">cancelable</span> <span class="o">=</span> <span class="nx">cancelableArg</span><span class="p">;</span></div><div class='line' id='LC239'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">this</span><span class="p">.</span><span class="nx">timeStamp</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">();</span></div><div class='line' id='LC240'>&nbsp;&nbsp;<span class="p">};</span></div><div class='line' id='LC241'><br/></div><div class='line' id='LC242'><br/></div><div class='line' id='LC243'>&nbsp;&nbsp;<span class="nx">WebSocket</span><span class="p">.</span><span class="nx">CONNECTING</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span></div><div class='line' id='LC244'>&nbsp;&nbsp;<span class="nx">WebSocket</span><span class="p">.</span><span class="nx">OPEN</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span></div><div class='line' id='LC245'>&nbsp;&nbsp;<span class="nx">WebSocket</span><span class="p">.</span><span class="nx">CLOSED</span> <span class="o">=</span> <span class="mi">2</span><span class="p">;</span></div><div class='line' id='LC246'><br/></div><div class='line' id='LC247'>&nbsp;&nbsp;<span class="nx">WebSocket</span><span class="p">.</span><span class="nx">__tasks</span> <span class="o">=</span> <span class="p">[];</span></div><div class='line' id='LC248'><br/></div><div class='line' id='LC249'>&nbsp;&nbsp;<span class="nx">WebSocket</span><span class="p">.</span><span class="nx">__initialize</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span></div><div class='line' id='LC250'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">WebSocket</span><span class="p">.</span><span class="nx">__swfLocation</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC251'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">//console.error(&quot;[WebSocket] set WebSocket.__swfLocation to location of WebSocketMain.swf&quot;);</span></div><div class='line' id='LC252'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">//return;</span></div><div class='line' id='LC253'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">WebSocket</span><span class="p">.</span><span class="nx">__swfLocation</span> <span class="o">=</span> <span class="s2">&quot;js/WebSocketMain.swf&quot;</span><span class="p">;</span></div><div class='line' id='LC254'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC255'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">container</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">createElement</span><span class="p">(</span><span class="s2">&quot;div&quot;</span><span class="p">);</span></div><div class='line' id='LC256'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">container</span><span class="p">.</span><span class="nx">id</span> <span class="o">=</span> <span class="s2">&quot;webSocketContainer&quot;</span><span class="p">;</span></div><div class='line' id='LC257'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// Puts the Flash out of the window. Note that we cannot use display: none or visibility: hidden</span></div><div class='line' id='LC258'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">// here because it prevents Flash from loading at least in IE.</span></div><div class='line' id='LC259'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">container</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">position</span> <span class="o">=</span> <span class="s2">&quot;absolute&quot;</span><span class="p">;</span></div><div class='line' id='LC260'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">container</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">left</span> <span class="o">=</span> <span class="s2">&quot;-100px&quot;</span><span class="p">;</span></div><div class='line' id='LC261'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">container</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">top</span> <span class="o">=</span> <span class="s2">&quot;-100px&quot;</span><span class="p">;</span></div><div class='line' id='LC262'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">var</span> <span class="nx">holder</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">createElement</span><span class="p">(</span><span class="s2">&quot;div&quot;</span><span class="p">);</span></div><div class='line' id='LC263'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">holder</span><span class="p">.</span><span class="nx">id</span> <span class="o">=</span> <span class="s2">&quot;webSocketFlash&quot;</span><span class="p">;</span></div><div class='line' id='LC264'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">container</span><span class="p">.</span><span class="nx">appendChild</span><span class="p">(</span><span class="nx">holder</span><span class="p">);</span></div><div class='line' id='LC265'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nb">document</span><span class="p">.</span><span class="nx">body</span><span class="p">.</span><span class="nx">appendChild</span><span class="p">(</span><span class="nx">container</span><span class="p">);</span></div><div class='line' id='LC266'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">swfobject</span><span class="p">.</span><span class="nx">embedSWF</span><span class="p">(</span></div><div class='line' id='LC267'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">WebSocket</span><span class="p">.</span><span class="nx">__swfLocation</span><span class="p">,</span> <span class="s2">&quot;webSocketFlash&quot;</span><span class="p">,</span> <span class="s2">&quot;8&quot;</span><span class="p">,</span> <span class="s2">&quot;8&quot;</span><span class="p">,</span> <span class="s2">&quot;9.0.0&quot;</span><span class="p">,</span></div><div class='line' id='LC268'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kc">null</span><span class="p">,</span> <span class="p">{</span><span class="nx">bridgeName</span><span class="o">:</span> <span class="s2">&quot;webSocket&quot;</span><span class="p">},</span> <span class="kc">null</span><span class="p">,</span> <span class="kc">null</span><span class="p">,</span></div><div class='line' id='LC269'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kd">function</span><span class="p">(</span><span class="nx">e</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC270'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">e</span><span class="p">.</span><span class="nx">success</span><span class="p">)</span> <span class="nx">console</span><span class="p">.</span><span class="nx">error</span><span class="p">(</span><span class="s2">&quot;[WebSocket] swfobject.embedSWF failed&quot;</span><span class="p">);</span></div><div class='line' id='LC271'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC272'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">);</span></div><div class='line' id='LC273'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">FABridge</span><span class="p">.</span><span class="nx">addInitializationCallback</span><span class="p">(</span><span class="s2">&quot;webSocket&quot;</span><span class="p">,</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span></div><div class='line' id='LC274'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">try</span> <span class="p">{</span></div><div class='line' id='LC275'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="c1">//console.log(&quot;[WebSocket] FABridge initializad&quot;);</span></div><div class='line' id='LC276'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">WebSocket</span><span class="p">.</span><span class="nx">__flash</span> <span class="o">=</span> <span class="nx">FABridge</span><span class="p">.</span><span class="nx">webSocket</span><span class="p">.</span><span class="nx">root</span><span class="p">();</span></div><div class='line' id='LC277'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">WebSocket</span><span class="p">.</span><span class="nx">__flash</span><span class="p">.</span><span class="nx">setCallerUrl</span><span class="p">(</span><span class="nx">location</span><span class="p">.</span><span class="nx">href</span><span class="p">);</span></div><div class='line' id='LC278'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">WebSocket</span><span class="p">.</span><span class="nx">__tasks</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="o">++</span><span class="nx">i</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC279'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">WebSocket</span><span class="p">.</span><span class="nx">__tasks</span><span class="p">[</span><span class="nx">i</span><span class="p">]();</span></div><div class='line' id='LC280'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC281'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">WebSocket</span><span class="p">.</span><span class="nx">__tasks</span> <span class="o">=</span> <span class="p">[];</span></div><div class='line' id='LC282'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="nx">e</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC283'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">console</span><span class="p">.</span><span class="nx">error</span><span class="p">(</span><span class="s2">&quot;[WebSocket] &quot;</span> <span class="o">+</span> <span class="nx">e</span><span class="p">.</span><span class="nx">toString</span><span class="p">());</span></div><div class='line' id='LC284'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC285'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">});</span></div><div class='line' id='LC286'>&nbsp;&nbsp;<span class="p">};</span></div><div class='line' id='LC287'><br/></div><div class='line' id='LC288'>&nbsp;&nbsp;<span class="nx">WebSocket</span><span class="p">.</span><span class="nx">__addTask</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">task</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC289'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="nx">WebSocket</span><span class="p">.</span><span class="nx">__flash</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC290'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">task</span><span class="p">();</span></div><div class='line' id='LC291'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span> <span class="k">else</span> <span class="p">{</span></div><div class='line' id='LC292'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">WebSocket</span><span class="p">.</span><span class="nx">__tasks</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">task</span><span class="p">);</span></div><div class='line' id='LC293'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC294'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC295'><br/></div><div class='line' id='LC296'>&nbsp;&nbsp;<span class="c1">// called from Flash</span></div><div class='line' id='LC297'>&nbsp;&nbsp;<span class="kd">function</span> <span class="nx">webSocketLog</span><span class="p">(</span><span class="nx">message</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC298'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nb">decodeURIComponent</span><span class="p">(</span><span class="nx">message</span><span class="p">));</span></div><div class='line' id='LC299'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC300'><br/></div><div class='line' id='LC301'>&nbsp;&nbsp;<span class="c1">// called from Flash</span></div><div class='line' id='LC302'>&nbsp;&nbsp;<span class="kd">function</span> <span class="nx">webSocketError</span><span class="p">(</span><span class="nx">message</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC303'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nx">console</span><span class="p">.</span><span class="nx">error</span><span class="p">(</span><span class="nb">decodeURIComponent</span><span class="p">(</span><span class="nx">message</span><span class="p">));</span></div><div class='line' id='LC304'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC305'><br/></div><div class='line' id='LC306'>&nbsp;&nbsp;<span class="k">if</span> <span class="p">(</span><span class="nb">window</span><span class="p">.</span><span class="nx">addEventListener</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC307'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nb">window</span><span class="p">.</span><span class="nx">addEventListener</span><span class="p">(</span><span class="s2">&quot;load&quot;</span><span class="p">,</span> <span class="nx">WebSocket</span><span class="p">.</span><span class="nx">__initialize</span><span class="p">,</span> <span class="kc">false</span><span class="p">);</span></div><div class='line' id='LC308'>&nbsp;&nbsp;<span class="p">}</span> <span class="k">else</span> <span class="p">{</span></div><div class='line' id='LC309'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nb">window</span><span class="p">.</span><span class="nx">attachEvent</span><span class="p">(</span><span class="s2">&quot;onload&quot;</span><span class="p">,</span> <span class="nx">WebSocket</span><span class="p">.</span><span class="nx">__initialize</span><span class="p">);</span></div><div class='line' id='LC310'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC311'>&nbsp;&nbsp;</div><div class='line' id='LC312'><span class="p">})();</span></div></pre></div>
678
+ </td>
679
+ </tr>
680
+ </table>
681
+ </div>
682
+
683
+ </div>
684
+ </div>
685
+ </div>
686
+ </div>
687
+
688
+ </div>
689
+
690
+ <div class="frame frame-loading large-loading-area" style="display:none;" data-tree-list-url="/igrigorik/em-websocket/tree-list/b9d439cd3494db3225587ccf7cb060f4b37a9f13" data-blob-url-prefix="/igrigorik/em-websocket/blob/b9d439cd3494db3225587ccf7cb060f4b37a9f13">
691
+ <img src="https://a248.e.akamai.net/assets.github.com/images/spinners/octocat-spinner-64.gif?1329872009" height="64" width="64">
692
+ </div>
693
+
694
+ </div>
695
+ <div class="context-overlay"></div>
696
+ </div>
697
+
698
+ <div id="footer-push"></div><!-- hack for sticky footer -->
699
+ </div><!-- end of wrapper - hack for sticky footer -->
700
+
701
+ <!-- footer -->
702
+ <div id="footer" >
703
+
704
+ <div class="upper_footer">
705
+ <div class="container clearfix">
706
+
707
+ <!--[if IE]><h4 id="blacktocat_ie">GitHub Links</h4><![endif]-->
708
+ <![if !IE]><h4 id="blacktocat">GitHub Links</h4><![endif]>
709
+
710
+ <ul class="footer_nav">
711
+ <h4>GitHub</h4>
712
+ <li><a href="https://github.com/about">About</a></li>
713
+ <li><a href="https://github.com/blog">Blog</a></li>
714
+ <li><a href="https://github.com/features">Features</a></li>
715
+ <li><a href="https://github.com/contact">Contact &amp; Support</a></li>
716
+ <li><a href="https://github.com/training">Training</a></li>
717
+ <li><a href="http://enterprise.github.com/">GitHub Enterprise</a></li>
718
+ <li><a href="http://status.github.com/">Site Status</a></li>
719
+ </ul>
720
+
721
+ <ul class="footer_nav">
722
+ <h4>Tools</h4>
723
+ <li><a href="http://get.gaug.es/">Gauges: Analyze web traffic</a></li>
724
+ <li><a href="http://speakerdeck.com">Speaker Deck: Presentations</a></li>
725
+ <li><a href="https://gist.github.com">Gist: Code snippets</a></li>
726
+ <li><a href="http://mac.github.com/">GitHub for Mac</a></li>
727
+ <li><a href="http://windows.github.com/">GitHub for Windows</a></li>
728
+ <li><a href="http://mobile.github.com/">Issues for iPhone</a></li>
729
+ <li><a href="http://jobs.github.com/">Job Board</a></li>
730
+ </ul>
731
+
732
+ <ul class="footer_nav">
733
+ <h4>Extras</h4>
734
+ <li><a href="http://shop.github.com/">GitHub Shop</a></li>
735
+ <li><a href="http://octodex.github.com/">The Octodex</a></li>
736
+ </ul>
737
+
738
+ <ul class="footer_nav">
739
+ <h4>Documentation</h4>
740
+ <li><a href="http://help.github.com/">GitHub Help</a></li>
741
+ <li><a href="http://developer.github.com/">Developer API</a></li>
742
+ <li><a href="http://github.github.com/github-flavored-markdown/">GitHub Flavored Markdown</a></li>
743
+ <li><a href="http://pages.github.com/">GitHub Pages</a></li>
744
+ </ul>
745
+
746
+ </div><!-- /.site -->
747
+ </div><!-- /.upper_footer -->
748
+
749
+ <div class="lower_footer">
750
+ <div class="container clearfix">
751
+ <!--[if IE]><div id="legal_ie"><![endif]-->
752
+ <![if !IE]><div id="legal"><![endif]>
753
+ <ul>
754
+ <li><a href="https://github.com/site/terms">Terms of Service</a></li>
755
+ <li><a href="https://github.com/site/privacy">Privacy</a></li>
756
+ <li><a href="https://github.com/security">Security</a></li>
757
+ </ul>
758
+
759
+ <p>&copy; 2012 <span title="0.10916s from fe8.rs.github.com">GitHub</span> Inc. All rights reserved.</p>
760
+ </div><!-- /#legal or /#legal_ie-->
761
+
762
+ <div class="sponsor">
763
+ <a href="http://www.rackspace.com" class="logo">
764
+ <img alt="Dedicated Server" height="36" src="https://a248.e.akamai.net/assets.github.com/images/modules/footer/rackspaces_logo.png?1329521041" width="38" />
765
+ </a>
766
+ Powered by the <a href="http://www.rackspace.com ">Dedicated
767
+ Servers</a> and<br/> <a href="http://www.rackspacecloud.com">Cloud
768
+ Computing</a> of Rackspace Hosting<span>&reg;</span>
769
+ </div>
770
+ </div><!-- /.site -->
771
+ </div><!-- /.lower_footer -->
772
+
773
+ </div><!-- /#footer -->
774
+
775
+
776
+
777
+ <div id="keyboard_shortcuts_pane" class="instapaper_ignore readability-extra" style="display:none">
778
+ <h2>Keyboard Shortcuts <small><a href="#" class="js-see-all-keyboard-shortcuts">(see all)</a></small></h2>
779
+
780
+ <div class="columns threecols">
781
+ <div class="column first">
782
+ <h3>Site wide shortcuts</h3>
783
+ <dl class="keyboard-mappings">
784
+ <dt>s</dt>
785
+ <dd>Focus site search</dd>
786
+ </dl>
787
+ <dl class="keyboard-mappings">
788
+ <dt>?</dt>
789
+ <dd>Bring up this help dialog</dd>
790
+ </dl>
791
+ </div><!-- /.column.first -->
792
+
793
+ <div class="column middle" style='display:none'>
794
+ <h3>Commit list</h3>
795
+ <dl class="keyboard-mappings">
796
+ <dt>j</dt>
797
+ <dd>Move selection down</dd>
798
+ </dl>
799
+ <dl class="keyboard-mappings">
800
+ <dt>k</dt>
801
+ <dd>Move selection up</dd>
802
+ </dl>
803
+ <dl class="keyboard-mappings">
804
+ <dt>c <em>or</em> o <em>or</em> enter</dt>
805
+ <dd>Open commit</dd>
806
+ </dl>
807
+ <dl class="keyboard-mappings">
808
+ <dt>y</dt>
809
+ <dd>Expand URL to its canonical form</dd>
810
+ </dl>
811
+ </div><!-- /.column.first -->
812
+
813
+ <div class="column last" style='display:none'>
814
+ <h3>Pull request list</h3>
815
+ <dl class="keyboard-mappings">
816
+ <dt>j</dt>
817
+ <dd>Move selection down</dd>
818
+ </dl>
819
+ <dl class="keyboard-mappings">
820
+ <dt>k</dt>
821
+ <dd>Move selection up</dd>
822
+ </dl>
823
+ <dl class="keyboard-mappings">
824
+ <dt>o <em>or</em> enter</dt>
825
+ <dd>Open issue</dd>
826
+ </dl>
827
+ <dl class="keyboard-mappings">
828
+ <dt><span class="platform-mac">⌘</span><span class="platform-other">ctrl</span> <em>+</em> enter</dt>
829
+ <dd>Submit comment</dd>
830
+ </dl>
831
+ </div><!-- /.columns.last -->
832
+
833
+ </div><!-- /.columns.equacols -->
834
+
835
+ <div style='display:none'>
836
+ <div class="rule"></div>
837
+
838
+ <h3>Issues</h3>
839
+
840
+ <div class="columns threecols">
841
+ <div class="column first">
842
+ <dl class="keyboard-mappings">
843
+ <dt>j</dt>
844
+ <dd>Move selection down</dd>
845
+ </dl>
846
+ <dl class="keyboard-mappings">
847
+ <dt>k</dt>
848
+ <dd>Move selection up</dd>
849
+ </dl>
850
+ <dl class="keyboard-mappings">
851
+ <dt>x</dt>
852
+ <dd>Toggle selection</dd>
853
+ </dl>
854
+ <dl class="keyboard-mappings">
855
+ <dt>o <em>or</em> enter</dt>
856
+ <dd>Open issue</dd>
857
+ </dl>
858
+ <dl class="keyboard-mappings">
859
+ <dt><span class="platform-mac">⌘</span><span class="platform-other">ctrl</span> <em>+</em> enter</dt>
860
+ <dd>Submit comment</dd>
861
+ </dl>
862
+ </div><!-- /.column.first -->
863
+ <div class="column last">
864
+ <dl class="keyboard-mappings">
865
+ <dt>c</dt>
866
+ <dd>Create issue</dd>
867
+ </dl>
868
+ <dl class="keyboard-mappings">
869
+ <dt>l</dt>
870
+ <dd>Create label</dd>
871
+ </dl>
872
+ <dl class="keyboard-mappings">
873
+ <dt>i</dt>
874
+ <dd>Back to inbox</dd>
875
+ </dl>
876
+ <dl class="keyboard-mappings">
877
+ <dt>u</dt>
878
+ <dd>Back to issues</dd>
879
+ </dl>
880
+ <dl class="keyboard-mappings">
881
+ <dt>/</dt>
882
+ <dd>Focus issues search</dd>
883
+ </dl>
884
+ </div>
885
+ </div>
886
+ </div>
887
+
888
+ <div style='display:none'>
889
+ <div class="rule"></div>
890
+
891
+ <h3>Issues Dashboard</h3>
892
+
893
+ <div class="columns threecols">
894
+ <div class="column first">
895
+ <dl class="keyboard-mappings">
896
+ <dt>j</dt>
897
+ <dd>Move selection down</dd>
898
+ </dl>
899
+ <dl class="keyboard-mappings">
900
+ <dt>k</dt>
901
+ <dd>Move selection up</dd>
902
+ </dl>
903
+ <dl class="keyboard-mappings">
904
+ <dt>o <em>or</em> enter</dt>
905
+ <dd>Open issue</dd>
906
+ </dl>
907
+ </div><!-- /.column.first -->
908
+ </div>
909
+ </div>
910
+
911
+ <div style='display:none'>
912
+ <div class="rule"></div>
913
+
914
+ <h3>Network Graph</h3>
915
+ <div class="columns equacols">
916
+ <div class="column first">
917
+ <dl class="keyboard-mappings">
918
+ <dt><span class="badmono">←</span> <em>or</em> h</dt>
919
+ <dd>Scroll left</dd>
920
+ </dl>
921
+ <dl class="keyboard-mappings">
922
+ <dt><span class="badmono">→</span> <em>or</em> l</dt>
923
+ <dd>Scroll right</dd>
924
+ </dl>
925
+ <dl class="keyboard-mappings">
926
+ <dt><span class="badmono">↑</span> <em>or</em> k</dt>
927
+ <dd>Scroll up</dd>
928
+ </dl>
929
+ <dl class="keyboard-mappings">
930
+ <dt><span class="badmono">↓</span> <em>or</em> j</dt>
931
+ <dd>Scroll down</dd>
932
+ </dl>
933
+ <dl class="keyboard-mappings">
934
+ <dt>t</dt>
935
+ <dd>Toggle visibility of head labels</dd>
936
+ </dl>
937
+ </div><!-- /.column.first -->
938
+ <div class="column last">
939
+ <dl class="keyboard-mappings">
940
+ <dt>shift <span class="badmono">←</span> <em>or</em> shift h</dt>
941
+ <dd>Scroll all the way left</dd>
942
+ </dl>
943
+ <dl class="keyboard-mappings">
944
+ <dt>shift <span class="badmono">→</span> <em>or</em> shift l</dt>
945
+ <dd>Scroll all the way right</dd>
946
+ </dl>
947
+ <dl class="keyboard-mappings">
948
+ <dt>shift <span class="badmono">↑</span> <em>or</em> shift k</dt>
949
+ <dd>Scroll all the way up</dd>
950
+ </dl>
951
+ <dl class="keyboard-mappings">
952
+ <dt>shift <span class="badmono">↓</span> <em>or</em> shift j</dt>
953
+ <dd>Scroll all the way down</dd>
954
+ </dl>
955
+ </div><!-- /.column.last -->
956
+ </div>
957
+ </div>
958
+
959
+ <div >
960
+ <div class="rule"></div>
961
+ <div class="columns threecols">
962
+ <div class="column first" >
963
+ <h3>Source Code Browsing</h3>
964
+ <dl class="keyboard-mappings">
965
+ <dt>t</dt>
966
+ <dd>Activates the file finder</dd>
967
+ </dl>
968
+ <dl class="keyboard-mappings">
969
+ <dt>l</dt>
970
+ <dd>Jump to line</dd>
971
+ </dl>
972
+ <dl class="keyboard-mappings">
973
+ <dt>w</dt>
974
+ <dd>Switch branch/tag</dd>
975
+ </dl>
976
+ <dl class="keyboard-mappings">
977
+ <dt>y</dt>
978
+ <dd>Expand URL to its canonical form</dd>
979
+ </dl>
980
+ </div>
981
+ </div>
982
+ </div>
983
+
984
+ <div style='display:none'>
985
+ <div class="rule"></div>
986
+ <div class="columns threecols">
987
+ <div class="column first">
988
+ <h3>Browsing Commits</h3>
989
+ <dl class="keyboard-mappings">
990
+ <dt><span class="platform-mac">⌘</span><span class="platform-other">ctrl</span> <em>+</em> enter</dt>
991
+ <dd>Submit comment</dd>
992
+ </dl>
993
+ <dl class="keyboard-mappings">
994
+ <dt>escape</dt>
995
+ <dd>Close form</dd>
996
+ </dl>
997
+ <dl class="keyboard-mappings">
998
+ <dt>p</dt>
999
+ <dd>Parent commit</dd>
1000
+ </dl>
1001
+ <dl class="keyboard-mappings">
1002
+ <dt>o</dt>
1003
+ <dd>Other parent commit</dd>
1004
+ </dl>
1005
+ </div>
1006
+ </div>
1007
+ </div>
1008
+ </div>
1009
+
1010
+ <div id="markdown-help" class="instapaper_ignore readability-extra">
1011
+ <h2>Markdown Cheat Sheet</h2>
1012
+
1013
+ <div class="cheatsheet-content">
1014
+
1015
+ <div class="mod">
1016
+ <div class="col">
1017
+ <h3>Format Text</h3>
1018
+ <p>Headers</p>
1019
+ <pre>
1020
+ # This is an &lt;h1&gt; tag
1021
+ ## This is an &lt;h2&gt; tag
1022
+ ###### This is an &lt;h6&gt; tag</pre>
1023
+ <p>Text styles</p>
1024
+ <pre>
1025
+ *This text will be italic*
1026
+ _This will also be italic_
1027
+ **This text will be bold**
1028
+ __This will also be bold__
1029
+
1030
+ *You **can** combine them*
1031
+ </pre>
1032
+ </div>
1033
+ <div class="col">
1034
+ <h3>Lists</h3>
1035
+ <p>Unordered</p>
1036
+ <pre>
1037
+ * Item 1
1038
+ * Item 2
1039
+ * Item 2a
1040
+ * Item 2b</pre>
1041
+ <p>Ordered</p>
1042
+ <pre>
1043
+ 1. Item 1
1044
+ 2. Item 2
1045
+ 3. Item 3
1046
+ * Item 3a
1047
+ * Item 3b</pre>
1048
+ </div>
1049
+ <div class="col">
1050
+ <h3>Miscellaneous</h3>
1051
+ <p>Images</p>
1052
+ <pre>
1053
+ ![GitHub Logo](/images/logo.png)
1054
+ Format: ![Alt Text](url)
1055
+ </pre>
1056
+ <p>Links</p>
1057
+ <pre>
1058
+ http://github.com - automatic!
1059
+ [GitHub](http://github.com)</pre>
1060
+ <p>Blockquotes</p>
1061
+ <pre>
1062
+ As Kanye West said:
1063
+
1064
+ > We're living the future so
1065
+ > the present is our past.
1066
+ </pre>
1067
+ </div>
1068
+ </div>
1069
+ <div class="rule"></div>
1070
+
1071
+ <h3>Code Examples in Markdown</h3>
1072
+ <div class="col">
1073
+ <p>Syntax highlighting with <a href="http://github.github.com/github-flavored-markdown/" title="GitHub Flavored Markdown" target="_blank">GFM</a></p>
1074
+ <pre>
1075
+ ```javascript
1076
+ function fancyAlert(arg) {
1077
+ if(arg) {
1078
+ $.facebox({div:'#foo'})
1079
+ }
1080
+ }
1081
+ ```</pre>
1082
+ </div>
1083
+ <div class="col">
1084
+ <p>Or, indent your code 4 spaces</p>
1085
+ <pre>
1086
+ Here is a Python code example
1087
+ without syntax highlighting:
1088
+
1089
+ def foo:
1090
+ if not bar:
1091
+ return true</pre>
1092
+ </div>
1093
+ <div class="col">
1094
+ <p>Inline code for comments</p>
1095
+ <pre>
1096
+ I think you should use an
1097
+ `&lt;addr&gt;` element here instead.</pre>
1098
+ </div>
1099
+ </div>
1100
+
1101
+ </div>
1102
+ </div>
1103
+
1104
+
1105
+ <div id="ajax-error-message">
1106
+ <span class="mini-icon mini-icon-exclamation"></span>
1107
+ Something went wrong with that request. Please try again.
1108
+ <a href="#" class="ajax-error-dismiss">Dismiss</a>
1109
+ </div>
1110
+
1111
+ <div id="logo-popup">
1112
+ <h2>Looking for the GitHub logo?</h2>
1113
+ <ul>
1114
+ <li>
1115
+ <h4>GitHub Logo</h4>
1116
+ <a href="http://github-media-downloads.s3.amazonaws.com/GitHub_Logos.zip"><img alt="Github_logo" src="https://a248.e.akamai.net/assets.github.com/images/modules/about_page/github_logo.png?1310104853" /></a>
1117
+ <a href="http://github-media-downloads.s3.amazonaws.com/GitHub_Logos.zip" class="minibutton btn-download download">Download</a>
1118
+ </li>
1119
+ <li>
1120
+ <h4>The Octocat</h4>
1121
+ <a href="http://github-media-downloads.s3.amazonaws.com/Octocats.zip"><img alt="Octocat" src="https://a248.e.akamai.net/assets.github.com/images/modules/about_page/octocat.png?1310104853" /></a>
1122
+ <a href="http://github-media-downloads.s3.amazonaws.com/Octocats.zip" class="minibutton btn-download download">Download</a>
1123
+ </li>
1124
+ </ul>
1125
+ </div>
1126
+
1127
+
1128
+
1129
+
1130
+ <span id='server_response_time' data-time='0.11204' data-host='fe8'></span>
1131
+ </body>
1132
+ </html>
1133
+