keitaircメインレポジトリ
Révision | 2a2c11ea6b9658b9a5f9928719678424218592ba (tree) |
---|---|
l'heure | 2010-11-29 09:31:40 |
Auteur | ISHIKAWA Mutsumi <ishikawa@hanz...> |
Commiter | ISHIKAWA Mutsumi |
websocket error handling enhance
@@ -51,7 +51,6 @@ jQuery(document).ready(function($) { | ||
51 | 51 | var map_load = true; |
52 | 52 | var myScroll; |
53 | 53 | var ws = false; |
54 | - var prev_cid = 0; | |
55 | 54 | |
56 | 55 | $(window).bind('orientationchange', function(){ |
57 | 56 | adjust_height(); |
@@ -75,33 +74,27 @@ jQuery(document).ready(function($) { | ||
75 | 74 | $('#loading').css('display', 'block').height($(document).height()); |
76 | 75 | $('body').append($('<div id="'+url.replace('/','_')+'"></div>').attr('animation', anim).load(web_root + session_id + '/' + url, param, reinit)); |
77 | 76 | |
77 | + if (ws) { | |
78 | + ws.close(); | |
79 | + ws = false; | |
80 | + } | |
78 | 81 | try { |
79 | 82 | if (url.match(/all\/([0-9]+)/)) { |
80 | 83 | var cid = RegExp.$1; |
81 | - if (cid != prev_cid && ws) { | |
82 | - ws.close(); | |
83 | - ws = false; | |
84 | - } | |
85 | - if (!ws) { | |
86 | - ws = new WebSocket('ws://' + location.host + '/' + session_id + '/push/' + cid); | |
87 | - ws.addEventListener("open", | |
88 | - function () { | |
89 | - /* alert('open'); */ | |
90 | - },false); | |
91 | - ws.addEventListener("close", | |
92 | - function () { | |
93 | - /* alert('close'); */ | |
94 | - },false); | |
95 | - ws.addEventListener("message", | |
96 | - function (e) { | |
97 | - var data = JSON.parse(e.data); | |
98 | - $('div.scroll_wrap ul.edgetoedge li.sep').after(data.formatted); | |
99 | - },false); | |
100 | - prev_cid = cid; | |
101 | - } | |
102 | - } else { | |
103 | - ws.close(); | |
104 | - ws = false; | |
84 | + ws = new WebSocket('ws://' + location.host + '/' + session_id + '/push/' + cid); | |
85 | + ws.addEventListener("open", | |
86 | + function () { | |
87 | + /* alert('open'); */ | |
88 | + },false); | |
89 | + ws.addEventListener("close", | |
90 | + function () { | |
91 | + /* alert('close'); */ | |
92 | + },false); | |
93 | + ws.addEventListener("message", | |
94 | + function (e) { | |
95 | + var data = JSON.parse(e.data); | |
96 | + $('div.scroll_wrap ul.edgetoedge li.sep').after(data.formatted); | |
97 | + },false); | |
105 | 98 | } |
106 | 99 | } catch(e) { |
107 | 100 |
@@ -107,7 +107,9 @@ POE::Component::Server::TCP->new( | ||
107 | 107 | Alias => 'keitairc', |
108 | 108 | Port => $cf->web_listen_port(), |
109 | 109 | ClientFilter => 'POE::Filter::HTTPD::Keitairc', |
110 | - ClientInput => \&http_request); | |
110 | + ClientInput => \&http_request, | |
111 | + ClientError => \&on_error, | |
112 | + ); | |
111 | 113 | |
112 | 114 | # fire up main loop |
113 | 115 | $poe_kernel->run(); |
@@ -134,6 +136,10 @@ sub http_request{ | ||
134 | 136 | $kernel->yield('shutdown'); |
135 | 137 | } |
136 | 138 | |
139 | +sub on_error { | |
140 | + warn 'ClientError'; | |
141 | + $ib->remove_stream($_[ARG3]); | |
142 | +} | |
137 | 143 | ################################################################ |
138 | 144 | sub dispatch{ |
139 | 145 | my ($request, $heap) = @_; |