private void HandleChatMessage(NetworkPacket netPacket) { RequestChatMessage requestChatMessage = RequestChatMessage.StaticDeserialize(netPacket.Message.ToArray()); Console.WriteLine("HandleChatMessage, Sender: {0}, Message: {1}, Recipient: {2}, Size: {3}", requestChatMessage.Sender, requestChatMessage.Message, requestChatMessage.Recipient, requestChatMessage.PacketSize); bool isPublicMessage = false; /* * Handle one-to-many chat messages */ Chat activeChat = chatList.Find(chat => isPublicMessage = chat.ChatName.Equals(requestChatMessage.Recipient)); if (activeChat != null) { activeChat.GetUserList().ForEach(user => { NetworkPacket sendPacket = new NetworkPacket(null, requestChatMessage.Serialize()); Console.WriteLine("Send message packet to {0}, {1}, {2}", user.Username, requestChatMessage.Recipient, activeChat.ChatName); AsyncSendPacket(sendPacket, user); }); } /* * Handle private chat messages */ if (!isPublicMessage) { NetworkPacket sendPacket = netPacket; userList .FindAll(user => user.Username == requestChatMessage.Recipient || user.Username == requestChatMessage.Sender) .ForEach(user => AsyncSendPacket(netPacket, user)); } netPacket.Message.Clear(); }
public void ShowDialog(MessengerClientMain owner, String chatName, RequestChatMessage requestChatMessage) { UI.FormChat form = new UI.FormChat(owner, chatName); if (requestChatMessage != null) { form.messageList.Add(requestChatMessage); } chatWindowList.Add(form); form.ShowDialog(); }
public void AddNewChatWindow(MessengerClientMain owner, String chatName, RequestChatMessage requestChatMessage = null) { bool isChatWindowOpen = false; foreach (UI.FormChat chat in chatWindowList) { if (chat.chatName == chatName) { isChatWindowOpen = true; break; } } if (!isChatWindowOpen) { Thread thread = new Thread(() => ShowDialog(owner, chatName, requestChatMessage)); thread.Name = "thread" + addedWindowsThreadList.Count; thread.Start(); addedWindowsThreadList.Add(thread); } }
public void ReceiveDataCallback(IAsyncResult ar) { // Retrieve the state object and the handler socket from the asynchronous state object. NetworkPacket netPacket = (NetworkPacket)ar.AsyncState; // Read data from the client socket. int bytesRead = netPacket.WorkSocket.EndReceive(ar); netPacket.Message.AddRange(netPacket.Buffer); int packetSize = BitConverter.ToInt32(netPacket.Message.ToArray(), 0); if (packetSize <= 0) { netPacket.WorkSocket.BeginReceive( netPacket.Buffer, 0, netPacket.BufferSize, 0, new AsyncCallback(ReceiveDataCallback), netPacket); return; } if (bytesRead > 0 && netPacket.Message.Count < packetSize) { netPacket.BufferSize = packetSize - netPacket.Message.Count; netPacket.Buffer = new byte[netPacket.BufferSize]; netPacket.WorkSocket.BeginReceive( netPacket.Buffer, 0, netPacket.BufferSize, 0, new AsyncCallback(ReceiveDataCallback), netPacket); return; } else { switch (RequestBase.GetPacketAction(netPacket)) { /* * case RequestID.RequestResponse: { * RequestResponse response = new RequestResponse(netPacket); * switch (response.ResponsePacketAction) { * case RequestID.LoginRequestAction: { * RequestLogin requestLogin = new RequestLogin(); * requestLogin.Deserialize(netPacket.Message.ToArray()); * break; * } * case RequestID.ChatMessageRequestAction: { * break; * } * default: * break; * } * break; * } * * case RequestID.LoginRequestAction: { * RequestLogin requestLogin = new RequestLogin(); * requestLogin.Deserialize(netPacket.Message.ToArray()); * break; * } */ /* * Handle received chat messages */ case RequestID.ChatMessageRequestAction: { RequestChatMessage requestChatMessage = RequestChatMessage.StaticDeserialize(netPacket.Message.ToArray()); UI.FormChat formChat = chatWindowList.Find(chat => { return((requestChatMessage.Recipient == User.Username && requestChatMessage.Sender == chat.chatName) || requestChatMessage.Recipient == chat.chatName); }); if (formChat != null) { formChat.messageList.Add(requestChatMessage); } else { AddNewChatWindow(this, requestChatMessage.Sender == User.Username ? requestChatMessage.Recipient : requestChatMessage.Sender, requestChatMessage); } break; } /* * Handle received chatUserLists */ case RequestID.RequestGetChatUserList: { form.requestGetChatUserList.Add( RequestGetChatUserList.StaticDeserialize(netPacket.Message.ToArray())); break; } } } IsReceivingData = false; }