/// <summary> /// подготавливаем команду аутентификации /// </summary> /// <param name="user">отправитель</param> /// <returns>пакет для отправки</returns> public chatPacket authCommand(chatUser user) { userSender = user; command = Commands.AUTH; type = TypeMessage.USER;//отправляем с клиента return(this); }
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); }
/// <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); }
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); } }
/// <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); }
//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); }
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(); } }
/// <summary> /// сохранение всех параметров из дочерней панели /// </summary> /// <param name="_c"></param> /// <param name="_u"></param> public void saveConnection(connector _c, chatUser _u) { con = _c; me = _u; }
/// <summary> /// обновление пользователя /// </summary> /// <param name="user"></param> public void updateUser(chatUser user) { users = users.Where(u => u.id != user.id).ToList(); users.Add(user); }
/// <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); }
/// <summary> /// добавление пользователя /// </summary> /// <param name="newUser"></param> public void append(chatUser newUser) { users.Add(newUser); control.Items.Add(newUser.login); }
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; } } }
public void AddUser(chatUser user) { throw new NotImplementedException(); }
public chatClient(WebSocket _webSocket, chatUser _chatUser) { socket = _webSocket; user = _chatUser; }