Fixes JS panic when server goes down
This commit is contained in:
@ -49,6 +49,15 @@ window.ChatHubHandler = (function ($) {
|
||||
ulist.appendTo($view);
|
||||
notifications.appendTo($view);
|
||||
|
||||
|
||||
var onUserDisconnected = function (uname) {
|
||||
$('#u' + uname).remove();
|
||||
};
|
||||
|
||||
var onUserConnected = function (username) {
|
||||
addChatUser(username);
|
||||
};
|
||||
|
||||
var chat = $.connection.chatHub;
|
||||
// Create a function that the hub can call back to display messages.
|
||||
chat.client.addMessage = function (name, room, message) {
|
||||
@ -148,7 +157,7 @@ window.ChatHubHandler = (function ($) {
|
||||
}).appendTo(roomview);
|
||||
if (chanType == 'r')
|
||||
chans.push(chanName);
|
||||
else if (chanType == 'u')
|
||||
else if (chanType == 'u' || chanType == 'a')
|
||||
userlist.push(chanName);
|
||||
setActiveChan(chanId);
|
||||
};
|
||||
@ -161,15 +170,23 @@ window.ChatHubHandler = (function ($) {
|
||||
if (userlist.some(function(uname){ return uname == userName ; }))
|
||||
setActiveChan('u' + userName);
|
||||
else
|
||||
buildChan('@', 'u', userName, chat.server.sendPV); };
|
||||
if (userName[0]=='?') buildChan('@?', 'a', userName.slice(1), chat.server.sendPV);
|
||||
else buildChan('@', 'u', userName, chat.server.sendPV);
|
||||
};
|
||||
|
||||
$view.data('chans').split(',').forEach(function (chan) {
|
||||
buildRoom(chan);
|
||||
});
|
||||
|
||||
function onCx() {
|
||||
var getUsers = function () {
|
||||
$.get('/api/chat/users').done(function (users) {
|
||||
$.each(users, function () {
|
||||
var user = this;
|
||||
addChatUser(user.UserName);
|
||||
});
|
||||
});
|
||||
};
|
||||
function onCx(recting) {
|
||||
setTimeout(function () {
|
||||
if (is_auth) getUsers();
|
||||
chans.forEach(function (room) {
|
||||
chat.server.join(room).done(function (chatInfo) {
|
||||
setActiveChan('r' + chatInfo.Name);
|
||||
@ -186,7 +203,7 @@ window.ChatHubHandler = (function ($) {
|
||||
|
||||
// Start the connection.
|
||||
$.connection.hub.start().done(function () {
|
||||
onCx();
|
||||
onCx(false);
|
||||
});
|
||||
|
||||
$.connection.hub.disconnected(function () {
|
||||
@ -194,9 +211,9 @@ window.ChatHubHandler = (function ($) {
|
||||
onDisCx();
|
||||
setTimeout(function () {
|
||||
$.connection.hub.start().done(function () {
|
||||
onCx();
|
||||
}, 30000); // Re-start connection after 30 seconds
|
||||
});
|
||||
onCx(true);
|
||||
}); }
|
||||
, 30000); // Re-start connection after 30 seconds
|
||||
});
|
||||
|
||||
chanName.keydown(function (event) {
|
||||
@ -234,14 +251,7 @@ window.ChatHubHandler = (function ($) {
|
||||
.appendTo(ulist);
|
||||
};
|
||||
|
||||
var getUsers = function () {
|
||||
$.get('/api/chat/users').done(function (users) {
|
||||
$.each(users, function () {
|
||||
var user = this;
|
||||
addChatUser(user.UserName);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
// This optional function html-encodes messages for display in the page.
|
||||
function htmlEncode(value) {
|
||||
@ -249,13 +259,6 @@ window.ChatHubHandler = (function ($) {
|
||||
return encodedValue;
|
||||
}
|
||||
|
||||
var onUserDisconnected = function (uname) {
|
||||
$('#u' + uname).remove();
|
||||
};
|
||||
|
||||
var onUserConnected = function (username) {
|
||||
addChatUser(username);
|
||||
};
|
||||
|
||||
$(window).unload(function () { chat.server.abort(); });
|
||||
|
||||
|
19
src/Yavsc/wwwroot/js/chat.min.js
vendored
19
src/Yavsc/wwwroot/js/chat.min.js
vendored
@ -1,7 +1,14 @@
|
||||
|
||||
window.ChatHubHandler=(function($){$.fn.filterByData=function(prop,val){return this.filter(function(){return $(this).data(prop)==val;});};var ChatView=function($view,full){if(!full)throw new Error('not implemented');var chans=[];var frontRoomName;var ulist=$('<ul></ul>').addClass('userlist');var notifications=$('<ul></ul>').addClass('notifs');ulist.appendTo($view);notifications.appendTo($view);var chat=$.connection.chatHub;chat.client.addMessage=function(name,room,message){$('#room_'+room).append('<li class="discussion"><strong>'+htmlEncode(name)+'</strong>: '+htmlEncode(message)+'</li>');};chat.client.addPV=function(name,message){if(!$('#mute').prop('checked')){audio.play();}
|
||||
$('#pv_'+name).append('<li class="pv"><strong>'+htmlEncode(name)+'</strong>: '+htmlEncode(message)+'</li>');};chat.client.notifyRoom=function(tag,targetid,message){if(tag==='connected'||tag==='reconnected')onUserConnected(targetid,message);else if(tag==='disconnected')onUserDisconnected(targetid,message);$('<li></li>').addClass(tag).append(tag+': '+targetid+' ').append(message).addClass(tag).appendTo($('#room_'+targetid));};chat.client.notifyUser=function(tag,targetid,message){if(tag==='connected'||tag==='reconnected')onUserConnected(targetid,message);else if(tag==='disconnected')onUserDisconnected(targetid,message);$('<li></li>').append(tag+': '+targetid).append(message).addClass(tag).appendTo(notifications);};var setActiveRoom=function(room){var frontRoom;if(frontRoomName!==''){frontRoom=$('#vroom_'+frontRoomName);frontRoom.addClass('hidden');$('#sel_'+frontRoomName).addClass('btn-primary');}
|
||||
frontRoomName=room;frontRoom=$('#vroom_'+room);$('#sel_'+room).removeClass('btn-primary');frontRoom.removeClass('hidden');};var chatbar=$('<div class="chatbar"></div>');var roomjoin=$('<div class="chatctl" class="form-control"></div>');var roomlist=$('<div class="roomlist"></div>');roomlist.appendTo(chatbar);$('<label for="channame">Join :</label>').appendTo(roomjoin);var chanName=$('<input id="channame" title="channel name" hint="yavsc" >');chanName.appendTo(roomjoin);roomjoin.appendTo(chatbar);chatbar.appendTo($view);var chatlist=$('<div class="chatlist" ></div>');chatlist.appendTo($view);var buildRoom=function(room){var roomTag=$('<a>'+room+'</a>').addClass('btn');roomTag.prop('id','sel_'+room).click(function(){setActiveRoom(room);$(this).removeClass('btn-primary');});roomTag.appendTo(roomlist);var roomview=$('<div></div>').addClass('container');roomview.appendTo(chatlist);roomview.prop('id','vroom_'+room);var msglist=$('<ul></ul>').addClass('mesglist');msglist.prop('id','room_'+room);msglist.appendTo(roomview);$('<input type="text">').prop('id','inp_'+room).prop('enable',false).prop('hint','hello').prop('title','send to '+room).addClass('form-control').keydown(function(ev){if(ev.which==13){if(this.value.length==0)return;chat.server.send(room,this.value);this.value='';}}).appendTo(roomview);chans.push(room);setActiveRoom(room);};$view.data('chans').split(',').forEach(function(chan){buildRoom(chan);});function onCx(){setTimeout(function(){getUsers();},120);$('#chatview').removeClass('disabled');chans.forEach(function(room){chat.server.join(room).done(function(chatInfo){setActiveRoom(chatInfo.Name);});});}
|
||||
function onDisCx(){$('#chatview').addClass('disabled');}
|
||||
$.connection.hub.start().done(function(){onCx();});$.connection.hub.disconnected(function(){onDisCx();setTimeout(function(){$.connection.hub.start().done(function(){onCx();},30000);});});chanName.keydown(function(event){if(event.which==13){if(this.value.length==0)return;buildRoom(this.value);chat.server.join(this.value).done(function(chatInfo){setActiveRoom(chatInfo.Name);});this.value='';}});var pvuis;var audio=new Audio('/sounds/bell.mp3');var sendPV=function(){var msg=$('#pv').val();$.each(pvuis.CXs,function(){chat.server.sendPV(this,msg);});$('#discussion').append('<li class="pv">'+htmlEncode(pvuis.UserName)+'<< '+htmlEncode(msg)+'</li>');$('#pv').val('');};$('#pv').keydown(function(event){if(event.which==13){sendPV();}});$('#command').keydown(function(event){if(event.which==13){}});var addChatUser=function(uname){$('#u_'+uname).remove();$('<li class="user"><img src="/Avatars/'+uname+'.xs.png"> '+uname+'</li>').prop('id','u_'+uname).css('cursor','pointer').click(function(){setPrivateTarget(this);}).appendTo(ulist);};var getUsers=function(){$.get('/api/chat/users').done(function(users){$.each(users,function(){var user=this;addChatUser(user.UserName);});});};function htmlEncode(value){var encodedValue=$('<div />').text(value).html();return encodedValue;}
|
||||
var setPrivateTarget=function(li){$('#rooms').addClass('hidden');$('#sendpvbox').removeClass('hidden');pvuis={CXs:$(li).data('cxids'),UserName:$(li).data('name')};$('#sendpvdest').html(pvuis.UserName);$('#pvs').focus();};var setPublic=function(){$('#rooms').removeClass('hidden');$('#sendpvbox').addClass('hidden');$('#message').focus();};$('#pubChan').css('cursor','pointer');$('#pubChan').click(setPublic);setPublic();var onUserDisconnected=function(uname){$('#u_'+uname).remove();};var onUserConnected=function(username){addChatUser(username);};$(window).unload(function(){chat.server.abort();});};$(document).ready(function($){ChatView($('#chatview'),true);});})(window.jQuery);
|
||||
window.ChatHubHandler=(function($){$.fn.filterByData=function(prop,val){return this.filter(function(){return $(this).data(prop)==val;});};var ChatView=function($view,full){if(!full)throw new Error('not implemented');var chans=[];var is_auth=$view.data('is_auth');var userlist=[];var frontChanId;var ulist=$('<ul></ul>').addClass('userlist');var notifications=$('<ul></ul>').addClass('notifs');ulist.appendTo($view);notifications.appendTo($view);var onUserDisconnected=function(uname){$('#u'+uname).remove();};var onUserConnected=function(username){addChatUser(username);};var chat=$.connection.chatHub;chat.client.addMessage=function(name,room,message){var $userTag=$("<a>"+htmlEncode(name)+"</a>").click(function(){buildPv(name);});var $li=$('<li class="discussion"></li>');$userTag.appendTo($li)
|
||||
$li.append(' '+htmlEncode(message));$li.appendTo($('#r'+room));};chat.client.addPV=function(name,message){if(!$('#mute').prop('checked')){audio.play();}
|
||||
buildPv(name);$('#u'+name).append('<li class="pv"><strong>'+htmlEncode(name)+'</strong>: '+htmlEncode(message)+'</li>');};chat.client.notifyRoom=function(tag,targetid,message){if(tag==='connected'||tag==='reconnected')onUserConnected(targetid,message);else if(tag==='disconnected')onUserDisconnected(targetid,message);$('<li></li>').addClass(tag).append(tag+': '+targetid+' ').append(message).addClass(tag).appendTo($('#room_'+targetid));};chat.client.notifyUser=function(tag,targetid,message){if(tag==='connected'||tag==='reconnected')onUserConnected(targetid,message);else if(tag==='disconnected')onUserDisconnected(targetid,message);$('<li></li>').append(tag+': '+targetid).append(message).addClass(tag).appendTo(notifications);};var setActiveChan=function(chanId){if(frontChanId!=chanId){$('#sel_'+frontChanId).addClass('btn-primary');$('#v'+frontChanId).addClass('hidden');}
|
||||
frontChanId=chanId;$('#sel_'+chanId).removeClass('btn-primary');$('#v'+chanId).removeClass('hidden');$('#inp_'+chanId).focus();};var chatbar=$('<div class="chatbar"></div>');var roomjoin=$('<div class="chatctl" class="form-control"></div>');var roomlist=$('<div class="roomlist"></div>');roomlist.appendTo(chatbar);$('<label for="channame">Join :</label>').appendTo(roomjoin);var chanName=$('<input id="channame" title="channel name" hint="yavsc" >');chanName.appendTo(roomjoin);roomjoin.appendTo(chatbar);chatbar.appendTo($view);var chatlist=$('<div class="chatlist" ></div>');chatlist.appendTo($view);var buildChan=function(chdp,chanType,chanName,sendCmd){var chanId=chanType+chanName;var roomTag=$('<a>'+chdp+chanName+'</a>').addClass('btn');roomTag.prop('id','sel_'+chanId).click(function(){setActiveChan(chanId);$(this).removeClass('btn-primary');});roomTag.appendTo(roomlist);var roomview=$('<div></div>').addClass('container');roomview.appendTo(chatlist);roomview.prop('id','v'+chanId);var msglist=$('<ul></ul>').addClass('mesglist');msglist.prop('id',chanId);msglist.appendTo(roomview);$('<input type="text">').prop('id','inp_'+chanId).prop('enable',false).prop('hint','hello').prop('title','send to '+chanName).addClass('form-control').keydown(function(ev){if(ev.which==13){if(this.value.length==0)return;sendCmd(chanName,this.value);this.value='';}}).appendTo(roomview);if(chanType=='r')
|
||||
chans.push(chanName);else if(chanType=='u'||chanType=='a')
|
||||
userlist.push(chanName);setActiveChan(chanId);};var buildRoom=function(roomName){if(chans.some(function(cname){return cname==roomName;}))
|
||||
setActiveChan('r'+roomName);else
|
||||
buildChan('#','r',roomName,chat.server.send);};var buildPv=function(userName){if(userlist.some(function(uname){return uname==userName;}))
|
||||
setActiveChan('u'+userName);else
|
||||
if(userName[0]=='?')buildChan('@?','a',userName.slice(1),chat.server.sendPV);else buildChan('@','u',userName,chat.server.sendPV);};$view.data('chans').split(',').forEach(function(chan){buildRoom(chan);});var getUsers=function(){$.get('/api/chat/users').done(function(users){$.each(users,function(){var user=this;addChatUser(user.UserName);});});};function onCx(recting){setTimeout(function(){chans.forEach(function(room){chat.server.join(room).done(function(chatInfo){setActiveChan('r'+chatInfo.Name);});});},120);$view.removeClass('disabled');}
|
||||
function onDisCx(){$view.addClass('disabled');}
|
||||
$.connection.hub.start().done(function(){onCx(false);});$.connection.hub.disconnected(function(){onDisCx();setTimeout(function(){$.connection.hub.start().done(function(){onCx(true);});},30000);});chanName.keydown(function(event){if(event.which==13){if(this.value.length==0)return;buildRoom(this.value);chat.server.join(this.value).done(function(chatInfo){setActiveChan('r'+chatInfo.Name);});this.value='';}});var audio=new Audio('/sounds/bell.mp3');$('#command').keydown(function(event){if(event.which==13){}});var addChatUser=function(uname){$('#u'+uname).remove();$('<li class="user"><img src="/Avatars/'+uname+'.xs.png"> '+uname+'</li>').prop('id','u_'+uname).css('cursor','pointer').click(function(){buildPv(uname);}).appendTo(ulist);};function htmlEncode(value){var encodedValue=$('<div />').text(value).html();return encodedValue;}
|
||||
$(window).unload(function(){chat.server.abort();});};$(document).ready(function($){ChatView($('#chatview'),true);});})(window.jQuery);
|
Reference in New Issue
Block a user