/// <summary>
 /// подготавливаем команду аутентификации
 /// </summary>
 /// <param name="user">отправитель</param>
 /// <returns>пакет для отправки</returns>
 public chatPacket authCommand(chatUser user)
 {
     userSender = user;
     command    = Commands.AUTH;
     type       = TypeMessage.USER;//отправляем с клиента
     return(this);
 }
Example #2
0
    private void handleOnJoinedChat(IIncommingMessage msg)
    {
        if (playersInChat.Find(x => x.peer == msg.Peer) != null)
        {
            return;
        }

        //Creates a new chatUser and assigns it a "uniqe" chatId... until we have more users then a long can carry
        //I doubt this will be a problem in the near future....
        AlbotChatMsg chatMsg = msg.Deserialize <AlbotChatMsg> ();
        chatUser     newUser = new chatUser(msg.Peer, chatMsg.username, chatMsg.icon, chatIdCounter++);

        //Let everone who already is in chat know!
        AlbotChatMsg joinedMsg = new AlbotChatMsg();

        joinedMsg.icon     = newUser.icon;
        joinedMsg.username = newUser.username;
        joinedMsg.chatID   = newUser.chatID;
        broadcastMsg(joinedMsg, (short)ServerCommProtocl.LobbyPlayerEnter);

        playersInChat.Add(newUser);
        newUser.peer.Disconnected += handleDissconnect;

        //Init the new users chat with all current members, Perhaps this should be one big msg?!
        foreach (chatUser u in playersInChat)
        {
            joinedMsg          = new AlbotChatMsg();
            joinedMsg.icon     = u.icon;
            joinedMsg.username = u.username;
            joinedMsg.chatID   = u.chatID;
            newUser.peer.SendMessage((short)ServerCommProtocl.LobbyPlayerEnter, joinedMsg);
        }
    }
 /// <summary>
 /// подготавливаем команду аутентификации
 /// </summary>
 /// <param name="user">отправитель</param>
 /// <returns>пакет для отправки</returns>
 public chatPacket authCommand(chatUser user)
 {
     userSender = user;
     command    = Commands.AUTH;
     type       = TypeMessage.SYSTEM;//отправляем с сервера
     return(this);
 }
Example #4
0
 /// <summary>
 /// подготовка статуса
 /// </summary>
 /// <param name="sender">отправитель</param>
 /// <param name="message">текст статуса</param>
 /// <returns>сформированный пакет сообщения</returns>
 public chatPacket prepaireStatus(chatUser sender, string message)
 {
     userSender = sender;
     text       = message;
     command    = Commands.INFO;
     type       = TypeMessage.USER;
     return(this);
 }
        /// <summary>
        /// подготавливаем команду выдачи активных пользователей
        /// </summary>
        /// <param name="user">отправитель</param>
        /// <returns>пакет для отправки</returns>
        public chatPacket connectedUserList(chatUser user)
        {
            userSender = user;
            command    = Commands.INFO;
            type       = TypeMessage.SYSTEM;//отправляем с сервера

            return(this);
        }
Example #6
0
        private void UserList_SelectedIndexChanged(object sender, EventArgs e)
        {
            //вывод статуса при клике
            if (UserList.SelectedItems.Count == 0)
            {
                return;
            }
            chatUser user = users.getUser(UserList.SelectedItem.ToString());

            if (user != null)
            {
                MessageBox.Show(user.status);
            }
        }
Example #7
0
        /// <summary>
        /// обработка выхода пользователя
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        public async Task closeClient(chatUser user)
        {
            //закрываем сокет
            chatClient chatClient = onlineClients.Where(client => client.user.id == user.id).First();

            onlineClients = onlineClients.Where(client => client.user.id != user.id).ToList();
            using (chatMessage m = new chatMessage())
            {
                m.command    = chatPacket.Commands.CLOSE;
                m.text       = "Вышел из сети";
                m.type       = chatPacket.TypeMessage.SYSTEM;
                m.userSender = user;
                await broadcast(m);
            }
            //await chatClient.socket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Normal Closure", CancellationToken.None);
        }
Example #8
0
    //Can be called from either "handleOnLeftChat()" when a player joines a gameroom or by loging out
    //Or it can be called from the user dissconnecting from the server
    private void handleDissconnect(IPeer peer)
    {
        chatUser user = playersInChat.Find(x => x.peer == peer);

        if (user == null)
        {
            return;
        }

        playersInChat.Remove(user);
        user.peer.Disconnected -= handleDissconnect;

        AlbotChatMsg msg = new AlbotChatMsg();

        msg.chatID = user.chatID;
        broadcastMsg(msg, (short)ServerCommProtocl.LobbyPlayerLeft);
    }
Example #9
0
        private async void button1_Click(object sender, EventArgs e)
        {
            //определяем себя
            chatUser me = new chatUser();

            me.login = loginBox.Text;
            chatPacket packet = new chatPacket();
            //готовим пакет на аутентификацию
            string strJson = JsonConvert.SerializeObject(packet.authCommand(me));

            //формируем коннектор
            c = new connector();
            //готовим параметры подключения
            Dictionary <string, object> d = new Dictionary <string, object>();

            d.Add("uri", new Uri("ws://localhost:64636/Chat"));
            //инициализируем подключение
            c.initialize(d);
            //открываем подключение
            await c.open();

            //отправляем подключение
            await c.sendString(strJson);

            //получаем ответ
            string message = await c.reciveString();

            //разворачиваем ответ
            chatMessage answer = JsonConvert.DeserializeObject <chatMessage>(message);

            //если получили ответ с guid то считаем что подключение удалось
            if (answer.userSender.id != Guid.Empty)
            {
                //открываем основную форму
                ((ChatForm)this.Owner).saveConnection(c, answer.userSender);
                this.Close();
            }
        }
Example #10
0
 /// <summary>
 /// сохранение всех параметров из дочерней панели
 /// </summary>
 /// <param name="_c"></param>
 /// <param name="_u"></param>
 public void saveConnection(connector _c, chatUser _u)
 {
     con = _c;
     me  = _u;
 }
Example #11
0
 /// <summary>
 /// обновление пользователя
 /// </summary>
 /// <param name="user"></param>
 public void updateUser(chatUser user)
 {
     users = users.Where(u => u.id != user.id).ToList();
     users.Add(user);
 }
Example #12
0
 /// <summary>
 /// удаление пользователя
 /// </summary>
 /// <param name="delUser"></param>
 public void delete(chatUser delUser)
 {
     users = users.Where(u => u.id != delUser.id).ToList();
     control.Items.Remove(delUser.login);
 }
Example #13
0
 /// <summary>
 /// добавление пользователя
 /// </summary>
 /// <param name="newUser"></param>
 public void append(chatUser newUser)
 {
     users.Add(newUser);
     control.Items.Add(newUser.login);
 }
Example #14
0
        private async void parseByCommand(chatMessage message, WebSocket webSocket, chatClientBuffer chatClientBuffer, IdbConnector connectionContext)
        {
            switch (message.command)
            {
            case (chatPacket.Commands.AUTH):
            {
                if (message.userSender.id == Guid.Empty)
                {
                    //получаем пользователей из БД
                    chatUser[] users = (chatUser[])await connectionContext.getData(message.userSender.login);

                    chatUser user;
                    //если это новый пользователь
                    if (users.Length == 0)
                    {
                        //даем ему guid
                        Guid id = Guid.NewGuid();
                        user    = new chatUser();
                        user.id = id;
                    }
                    else
                    {
                        //если пользователь не новый, то из запроса забираем его id
                        user = users[0];
                    }

                    //проверка на подключенного пользователя
                    chatClient client = chatClientBuffer.getClientByGuid(user.id);
                    //если пользователь уже был подключен
                    if (client != null)
                    {
                        if (client.socket.State == WebSocketState.Open)
                        {
                            //возвращаем пользователю его сообщение
                            await sendMessage(webSocket, message);

                            await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Пользователь уже в сети", CancellationToken.None);

                            return;
                        }
                        else
                        {
                            //если пользователь уже был в сети, но сокет не открыт, вырубаем его
                            message.userSender = user;
                            await chatClientBuffer.closeClient(message.userSender);
                        }
                    }
                    message.userSender = user;
                    //подключаем
                    await sendMessage(webSocket, message);

                    //отправим всех юзеров
                    chatMessage informationMessage = new chatMessage();
                    informationMessage.connectedUserList(message.userSender);
                    informationMessage.text = JsonConvert.SerializeObject(chatClientBuffer.getOnlineUsers());
                    await sendMessage(webSocket, informationMessage);

                    //добавление в клиенты
                    await chatClientBuffer.newClient(new chatClient(webSocket, message.userSender));
                }
                break;
            }

            case (chatPacket.Commands.SEND):
            {
                await chatClientBuffer.broadcast(message);

                break;
            }

            case (chatPacket.Commands.INFO):
            {
                //смена статуса
                //await chatClientBuffer.changeStatus(message.userSender, message.text);
                message.userSender.status = message.text;
                await chatClientBuffer.broadcast(message);

                connectionContext.Update(message.userSender);

                /*chatMessage informationMessage = new chatMessage();
                 * informationMessage.connectedUserList(message.userSender);
                 * informationMessage.text = JsonConvert.SerializeObject(chatClientBuffer.getOnlineUsers());
                 * await sendMessage(webSocket, informationMessage);*/
                break;
            }

            case (chatPacket.Commands.CLOSE):
            {
                await chatClientBuffer.closeClient(message.userSender);

                break;
            }

            default:
            {
                break;
            }
            }
        }
Example #15
0
 public void AddUser(chatUser user)
 {
     throw new NotImplementedException();
 }
Example #16
0
 public chatClient(WebSocket _webSocket, chatUser _chatUser)
 {
     socket = _webSocket;
     user   = _chatUser;
 }