예제 #1
0
        /// <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();
            }
        }
예제 #2
0
        /// <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;
            }
        }
예제 #3
0
        /// <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();
            }
        }