diff --git a/src/Yavsc/Controllers/Accounting/AccountController.cs b/src/Yavsc/Controllers/Accounting/AccountController.cs index 9608ff52..17b2f2f7 100644 --- a/src/Yavsc/Controllers/Accounting/AccountController.cs +++ b/src/Yavsc/Controllers/Accounting/AccountController.cs @@ -308,6 +308,7 @@ namespace Yavsc.Controllers public async Task LogOff(string returnUrl = null) { await _signInManager.SignOutAsync(); + HttpContext.Session.Clear(); _logger.LogInformation(4, "User logged out."); if (returnUrl == null) return RedirectToAction(nameof(HomeController.Index), "Home"); return Redirect(returnUrl); diff --git a/src/Yavsc/Hubs/ChatHub.cs b/src/Yavsc/Hubs/ChatHub.cs index f3fc1a15..6d795fe4 100644 --- a/src/Yavsc/Hubs/ChatHub.cs +++ b/src/Yavsc/Hubs/ChatHub.cs @@ -326,7 +326,6 @@ namespace Yavsc _logger.LogError($"NotifyErrorToCallerInRoom: {room}, {reason}"); } - public void Send([Required] string roomName, [Required] string message) { var groupname = ChatHubConstants.HubGroupRomsPrefix + roomName; diff --git a/src/Yavsc/Services/ChatHubConnexionManager.cs b/src/Yavsc/Services/ChatHubConnexionManager.cs index 7ca733c3..c9dd9d59 100644 --- a/src/Yavsc/Services/ChatHubConnexionManager.cs +++ b/src/Yavsc/Services/ChatHubConnexionManager.cs @@ -39,7 +39,8 @@ namespace Yavsc.Services static ConcurrentDictionary> ChatCxIds = new ConcurrentDictionary>(); /// - /// by user name + /// by user name, + /// the list of its chat rooms /// /// static ConcurrentDictionary> ChatRoomPresence = new ConcurrentDictionary>(); @@ -208,6 +209,7 @@ namespace Yavsc.Services if (Channels.TryAdd(roomName, chanInfo)) { + ChatRoomPresence[userName].Add(roomName); _logger.LogInformation("new room joint"); return (chanInfo); } diff --git a/src/Yavsc/wwwroot/css/main/site.css b/src/Yavsc/wwwroot/css/main/site.css index 6e0128b5..500eba61 100644 --- a/src/Yavsc/wwwroot/css/main/site.css +++ b/src/Yavsc/wwwroot/css/main/site.css @@ -402,6 +402,10 @@ h6 { div.chatbar { border-bottom: rgb(24, 24, 167) solid 2px; } + +div.chatctl { + float: right; +} div.roomlist { display:inline-block; diff --git a/src/Yavsc/wwwroot/css/main/site.min.css b/src/Yavsc/wwwroot/css/main/site.min.css index 1ac12d62..ae7e70b0 100644 --- a/src/Yavsc/wwwroot/css/main/site.min.css +++ b/src/Yavsc/wwwroot/css/main/site.min.css @@ -22,5 +22,6 @@ p{font-size:20px;} p.small{font-size:16px;}.smalltext{font-size:10px;} h1,h2,h3,h4,h5,h6{font-family:"Montserrat","Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:700;} div.chatbar{border-bottom:rgb(24,24,167)solid 2px;} +div.chatctl{float:right;} div.roomlist{display:inline-block;} div.chatlist{color:#008;background-color:rgb(231,229,199);}#chatview ul.notifs li.error{color:#a94442;background-color:white;font-style:italic;font-family:Impact,Haettenschweiler,'Arial Narrow Bold',sans-serif;border-bottom-style:ridge;border-bottom-width:1pt;} \ No newline at end of file diff --git a/src/Yavsc/wwwroot/js/chat.js b/src/Yavsc/wwwroot/js/chat.js index 5236c6aa..b7108a50 100644 --- a/src/Yavsc/wwwroot/js/chat.js +++ b/src/Yavsc/wwwroot/js/chat.js @@ -113,20 +113,22 @@ window.ChatHubHandler = (function ($) { var setActiveChan = function (chanId) { if (frontChanId != chanId) { - $('#sel_' + frontChanId).addClass('btn-primary'); - $('#v' + frontChanId).addClass('hidden'); + if (frontChanId) { + $('#sel_' + frontChanId).addClass('btn-primary'); + $('#v' + frontChanId).addClass('hidden'); + } + frontChanId = chanId; + $('#sel_' + chanId).removeClass('btn-primary'); + $('#v' + chanId).removeClass('hidden'); + $('#inp_' + chanId).focus(); } - frontChanId = chanId; - $('#sel_' + chanId).removeClass('btn-primary'); - $('#v' + chanId).removeClass('hidden'); - $('#inp_' + chanId).focus(); }; function join(roomName) { chat.server.join(roomName).done(function (chatInfo) { setChanInfo(chatInfo); - setActiveChan(chatInfo.Name); + setActiveChan('r'+chatInfo.Name); }); } diff --git a/src/Yavsc/wwwroot/js/chat.min.js b/src/Yavsc/wwwroot/js/chat.min.js index 5fe50494..7651f0aa 100644 --- a/src/Yavsc/wwwroot/js/chat.min.js +++ b/src/Yavsc/wwwroot/js/chat.min.js @@ -3,9 +3,9 @@ window.ChatHubHandler=(function($){$.fn.filterByData=function(prop,val){return t buildPv(name);$('#u'+name).append('
  • '+htmlEncode(name)+': '+htmlEncode(message)+'
  • ');};chat.client.notifyRoom=function(tag,targetid,message){if(tag==='connected'||tag==='reconnected'){onUserConnected(targetid,message);return;}else if(tag==='disconnected'){onUserDisconnected(targetid,message);return;} $('
  • ').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);return;}else if(tag==='disconnected'){onUserDisconnected(targetid,message);return;} $('
  • ').append(tag+': '+targetid+': ').append(message.Value).addClass(tag).appendTo(notifications);};var setChanInfo=function(chanInfo){var chanId='r'+chanInfo.Name;$('#tv_'+chanId).replaceWith(chanInfo.Topic);} -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();};function join(roomName) -{chat.server.join(roomName).done(function(chatInfo){setChanInfo(chatInfo);setActiveChan(chatInfo.Name);});} +var setActiveChan=function(chanId){if(frontChanId!=chanId){if(frontChanId){$('#sel_'+frontChanId).addClass('btn-primary');$('#v'+frontChanId).addClass('hidden');} +frontChanId=chanId;$('#sel_'+chanId).removeClass('btn-primary');$('#v'+chanId).removeClass('hidden');$('#inp_'+chanId).focus();}};function join(roomName) +{chat.server.join(roomName).done(function(chatInfo){setChanInfo(chatInfo);setActiveChan('r'+chatInfo.Name);});} var chatbar=$('
    ');var roomjoin=$('
    ');var roomlist=$('
    ');roomlist.appendTo(chatbar);$('').appendTo(roomjoin);var chanName=$('');chanName.appendTo(roomjoin);roomjoin.appendTo(chatbar);chatbar.appendTo($view);var chatlist=$('
    ');chatlist.appendTo($view);var buildChan=function(chdp,chanType,chanName,sendCmd){var chanId=chanType+chanName;var roomTag=$(''+chdp+chanName+'').addClass('btn');roomTag.prop('id','sel_'+chanId).click(function(){setActiveChan(chanId);$(this).removeClass('btn-primary');});roomTag.appendTo(roomlist);var roomview=$('
    ').addClass('container');roomview.appendTo(chatlist);roomview.prop('id','v'+chanId);$('
    ').prop('id','tv_'+chanId).appendTo(roomview);var msglist=$('
      ').addClass('mesglist');msglist.prop('id',chanId);msglist.appendTo(roomview);$('').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);});function onCx(){$view.removeClass('disabled');setTimeout(function(){chans.forEach(function(chan){join(chan);});},120);} function onDisCx(){$view.addClass('disabled');}