示例#1
0
        public async Task handleUser(ChatMember user)
        {
            AddMember(user);
            await ReadUserMessages(user);

            RemoveMember(user);
        }
示例#2
0
 public async Task handleUser(ChatMember member, int chatId)
 {
     if (_chatRooms.TryGetValue(chatId, out ChatRoom room))
     {
         await room.handleUser(member);
     }
 }
示例#3
0
        private async Task <(int chatId, int userId)> waitForData(ChatMember member)
        {
            var message = await member.getMessage();

            var id     = message.message.Split(";");
            int chatId = Int32.Parse(id[0]);
            int userId = Int32.Parse(id[1]);

            return(chatId, userId);
        }
示例#4
0
        private async Task ReadUserMessages(ChatMember member)
        {
            try
            {
                while (true)
                {
                    var message = await member.getMessage();

                    _chatMessages.Add(message);
                }
            }
            catch (Exception)
            {
            }
            finally
            {
                //just finish
            }
        }
示例#5
0
        public async void handleUser(WebSocket webSocket, TaskCompletionSource <object> end)
        {
            try
            {
                var user = new ChatMember(webSocket);
                var data = await waitForData(user);

                var userData = await getUser(data.userId);

                user.init(userData);
                await _chatRooms.handleUser(user, data.chatId);
            }
            catch (Exception) { }
            finally
            {
                await webSocket.CloseAsync(WebSocketCloseStatus.Empty, null, CancellationToken.None);

                end.TrySetResult(new object());
            }
        }
示例#6
0
 private void RemoveMember(ChatMember member)
 {
     _members.TryRemove(member, out ChatMember outValue);
 }
示例#7
0
 private void AddMember(ChatMember member)
 {
     _members.TryAdd(member, member);
 }