/// <summary> /// 移除消息. /// </summary> /// <param name="group"></param> /// <param name="messageID"></param> public void RemoveMessage(string group, long messageID) { // 取得当前用户. // 查询用户。 var user = GetCurrentChatRoomUser(); // 取得用户 ip地址. string ipAddress = IpGetter.GetIpAddress(HttpContext.Current.Request); if (!user.IsAdmin) { Clients.Client(Context.ConnectionId).showErrorMessage("权限不足!"); return; } string resultMsg = null; // 拒绝消息. bool result = chatRoomMessageService.RefuseMessage(messageID, user.DisplayUserNickName, ipAddress, ref resultMsg); if (!result) { // 失败的情况下. Clients.Client(Context.ConnectionId).showErrorMessage(resultMsg); return; } // 成功的情况下, 通知所有的 客户端, 移除消息. // 调用 客户端的 removeMessage 方法. Clients.Group(group).removeMessage(messageID); }
/// <summary> /// 通过审核. /// </summary> /// <param name="group"></param> /// <param name="messageID"></param> public void PassMessage(string group, long messageID) { // 取得当前用户. // 查询用户。 var user = GetCurrentChatRoomUser(); // 取得用户 ip地址. string ipAddress = IpGetter.GetIpAddress(HttpContext.Current.Request); if (!user.IsAdmin) { Clients.Client(Context.ConnectionId).showErrorMessage("权限不足!"); return; } string resultMsg = null; // 通过审核. bool result = chatRoomMessageService.PassMessage(messageID, user.DisplayUserNickName, ipAddress, ref resultMsg); if (!result) { // 失败的情况下. Clients.Client(Context.ConnectionId).showErrorMessage(resultMsg); return; } // 成功的情况下, 通知所有的 客户端, 显示消息. // 查询数据库中的指定消息, 目的, 查询出关联信息. ChatRoomMessage dbMsg = chatRoomMessageService.GetChatRoomMessage(messageID); // 类型转换. var clientMsg = GetClientMessage(dbMsg); // 调用 客户端的 showNewMessage 方法. Clients.Group(group).showNewMessage(clientMsg); // 调用 管理员组的 PassMessageFinish(messageID) 方法. Clients.Group(GetAdminGroupCode(group)).passMessageFinish(messageID); }
/// <summary> /// 发送消息. /// </summary> /// <param name="group"></param> /// <param name="message"></param> public void NewMessage(string group, string message, long?replyMessageId = null) { if (logger.IsDebugEnabled) { logger.DebugFormat("NewMessage ( {0}, {1}, {2} ) Start!", group, message, replyMessageId); } if (String.IsNullOrEmpty(message) || String.IsNullOrWhiteSpace(message)) { Clients.Client(Context.ConnectionId).showErrorMessage("消息为空!"); return; } message = message.Trim(); message = message.Replace("\n", "<br/>\n"); if (message.Length > 500) { Clients.Client(Context.ConnectionId).showErrorMessage("消息超长!"); return; } // 取得当前用户. // 查询用户。 var user = UserList.SingleOrDefault(u => u.ContextID == Context.ConnectionId); // 取得用户 ip地址. string ipAddress = IpGetter.GetIpAddress(HttpContext.Current.Request); // 匿名用户的情况下,需要检查黑名单. //if (user.UserID == 1) //{ // if (this.chatRoomBlackNameList.Contains(ipAddress)) // { // // 在黑名单里面. // Clients.Client(Context.ConnectionId).showErrorMessage("网络连接上存在一些问题,请稍候再尝试!"); // if (logger.IsInfoEnabled) // { // logger.InfoFormat("黑名单用户 {0},尝试发送消息:{1} ", ipAddress, message); // } // return; // } //} ChatRoomMessage chatroomMessage = new ChatRoomMessage() { // 房间ID. HouseID = group, // 发信人. MessageSenderId = user.UserID, // 发件人昵称. MessageSenderNickName = user.NickName, // 回复消息ID. ReplyMessageId = replyMessageId, // 消息内容. MessageContent = message, // IP. IpAddress = ipAddress, // 数据有效. IsActive = true, }; string resultMsg = null; bool result = chatRoomMessageService.CreateNewMessage(chatroomMessage, ref resultMsg); if (!result) { // 消息发送失败. Clients.Client(Context.ConnectionId).showErrorMessage(resultMsg); return; } // 查询数据库中的指定消息, 目的, 查询出关联信息. ChatRoomMessage dbMsg = chatRoomMessageService.GetChatRoomMessage(chatroomMessage.MessageID); // 类型转换. var clientMsg = GetClientMessage(dbMsg); // 消息发送成功 if (dbMsg.AuditingFlag == ChatRoomMessage.AUDITING_IS_PASS) { if (logger.IsDebugEnabled) { logger.DebugFormat("房间{0}, 用户{1}, 昵称{2}, 发送的消息{3}, 自动审核通过了!", group, user.UserID, user.NickName, message); } // 调用 客户端的 showNewMessage 方法. Clients.Group(group).showNewMessage(clientMsg); } else { // 需要审核的. if (logger.IsDebugEnabled) { logger.DebugFormat("房间{0}, 用户{1}, 昵称{2}, 发送的消息{3}, 等待审核通过!", group, user.UserID, user.NickName, message); } // 调用 管理员组端的 showTodoMessage 方法. Clients.Group(GetAdminGroupCode(group)).showTodoMessage(clientMsg); } }