/// <summary> /// 当服务删除WebSocket时触发 /// </summary> /// <param name="webSocketContext"></param> private void ChatService_OnRemoveWebSocket(WebSocketService.Core.WebSocketContext webSocketContext) { Guid userId = GetUidFunc(webSocketContext.HttpListenerWebSocketContext); var user = Users.FirstOrDefault(p => p.UserId.Equals(userId)); if (user != null) { user.ChatOffLine(); } }
/// <summary> /// 当接收到消息时触发 /// </summary> /// <param name="context"></param> /// <param name="message"></param> private void ChatService_OnReceiveMessage(WebSocketService.Core.WebSocketContext context, string message) { ReceiveMessage receiveMessage = Newtonsoft.Json.JsonConvert.DeserializeObject <ReceiveMessage>(message); switch (receiveMessage.MessageType) { case MessageType.message: switch (receiveMessage.ReceiverType) { case ReceiverType.individual: IndividualSendMessage(receiveMessage); break; case ReceiverType.group: GroupSendMessage(receiveMessage); break; } break; case MessageType.readStatusChange: MessageRead(receiveMessage); break; } }
/// <summary> /// 当服务添加WebSocket时触发 /// </summary> /// <param name="webSocketContext"></param> private void ChatService_OnAddWebSocket(WebSocketService.Core.WebSocketContext webSocketContext) { Guid uid = default(Guid); if (GetUidFunc == null && webSocketContext.HttpListenerWebSocketContext.User != null) { string name = webSocketContext.HttpListenerWebSocketContext.User.Identity.Name; uid = Guid.Parse(name); } else { uid = GetUidFunc(webSocketContext.HttpListenerWebSocketContext); } var user = Users.FirstOrDefault(p => p.UserId.Equals(uid)); List <ReceiveMessage> receiveMessages = null; using (var repository = CreateRepositoryFunc()) { if (user == null) { user = repository.GetUsers().FirstOrDefault(p => p.UserId.Equals(uid)); if (user == null) { throw new Exception($"用户【{uid}】不存在!"); } Users.Add(user); } receiveMessages = repository.GetUnReadChatMessage(uid).ToList(); } user.ChatOnLine(webSocketContext); foreach (var message in receiveMessages) { var sendMessage = new SendMessage(message.MessageId, message.SenderId, message.ReceiverType, message.MessageType, message.Message); user.SendMessageAsync(sendMessage).Wait(); } }