public void OnDisconnected(HubCallerContext hubCallerContext) { long accountId = GetAccountId(hubCallerContext); if (accountId < 1) { return; } try { ChatUser chatUser = GetUser(accountId); if (Monitor.TryEnter(_lockUser, _lockTime)) { if (chatUser != null) { chatUser.SetActive(false); } } } finally { Monitor.Exit(_lockUser); } //group theo accountId để gửi message cho toàn bộ các connectionId cùng accountId //HubContext.Groups.Remove(hubCallerContext.ConnectionId, accountId.ToString()); }
public void OnConnected(HubCallerContext hubCallerContext) { long accountId = GetAccountId(hubCallerContext); NLogManager.LogMessage("OnConnected: " + accountId); if (accountId < 1) { return; } if (!Monitor.TryEnter(_lockUser, _lockTime)) { return; } try { ChatUser chatUser = GetUser(accountId); if (chatUser != null) { chatUser.SetActive(true); } } finally { Monitor.Exit(_lockUser); } //group theo accountId để gửi message cho toàn bộ các connectionId cùng accountId //HubContext.Groups.Add(hubCallerContext.ConnectionId, accountId.ToString()); }
public bool UnregisterChat(HubCallerContext hubCallerContext, string channelId) { try { HubContext.Groups.Remove(hubCallerContext.ConnectionId, channelId); long accountId = GetAccountId(hubCallerContext); if (accountId < 1) { return(false); } ChatChannel chatChannel = GetChannel(channelId); if (chatChannel != null) { ChatUser chatUser = GetUser(accountId); if (chatUser != null) { chatUser.SetActive(false); NLogManager.LogMessage(string.Format("User leave channel: {0}:{1} - ChannelId={2}", chatUser.AccountID, chatUser.UserName, channelId)); } //neu phong chat it hon 20 nguoi khong remove user khoi danh sach onlines (fake so luong user online) if (chatChannel.UserOnlines.Count > MIN_USER_INACTIVE_IN_CHANNEL) { chatChannel.RemoveUser(accountId); } return(true); } } catch (Exception ex) { NLogManager.PublishException(ex); } return(false); }
/// <summary> /// Đăng ký kênh chat /// </summary> /// <param name="hubCallerContext"></param> /// <param name="channelId"></param> /// <param name="nickName"></param> /// <returns></returns> public bool RegisterChat(HubCallerContext hubCallerContext, string channelId, string nickName = "") { try { HubContext.Groups.Add(hubCallerContext.ConnectionId, channelId); long accountId = GetAccountId(hubCallerContext); ChatChannel chatChannel = GetChannel(channelId, true); if (accountId < 1) { ClientListLastMessages(hubCallerContext, chatChannel); return(false); } ChatUser chatUser = GetUser(accountId, channelId, true); //var dataUser = AbstractDAOFactory.Instance().CreateMessageDao().SP_Account_Get_Infor(int.Parse(accountId.ToString())); //if (dataUser != null) //{ // nickName = string.IsNullOrEmpty(dataUser.NickName) ? StringUtil.MaskUserName(chatUser.UserName) : dataUser.NickName; //} //else //{ // if (string.IsNullOrEmpty(nickName)) // nickName = StringUtil.MaskUserName(chatUser.UserName); //} nickName = AccountSession.AccountName; if (nickName.Trim() == "System" || nickName.Trim() == "system") { return(false); } chatUser.NickName = nickName; chatUser.SetActive(true); chatUser.SetChannelConnectionId(channelId, hubCallerContext.ConnectionId); chatChannel.AddUser(chatUser); SetCacheLevel(chatUser.UserName, (int)chatUser.AccountID, channelId); NLogManager.LogMessage(string.Format("User join channel: {0}:{1} - ChannelId={2}", chatUser.AccountID, chatUser.UserName, channelId)); ClientListUserOnlines(hubCallerContext, chatChannel); ClientListLastMessages(hubCallerContext, chatChannel); ClientAddUserOnline(channelId, chatUser); #region Fake user in channel chat ThreadPool.QueueUserWorkItem(__ => { int countUserOnline = chatChannel.UserOnlines.Count; //neu it them mot user fake if (countUserOnline < ENABLE_FAKENAME_LV1_IN_CHANNEL) { Thread.Sleep(3000); chatChannel.AddFakeUser(); //neu it qua them mot user fake nua if (countUserOnline < ENABLE_FAKENAME_LV2_IN_CHANNEL) { Thread.Sleep(2000); chatChannel.AddFakeUser(); } } else if (countUserOnline > MIN_USER_INACTIVE_IN_CHANNEL) { chatChannel.RemoveFakeUser(); } }); #endregion return(true); } catch (Exception ex) { NLogManager.PublishException(ex); } return(false); }