Ejemplo n.º 1
0
        private void AddUserToChat(NetworkPacket netPacket, string defaultChat, User user)
        {
            Chat activeChat = chatList.Find(chat => chat.ChatName.Equals(defaultChat));

            if (activeChat != null)
            {
                /*
                 *  Add user to defaultChat
                 */
                activeChat.AddUser(user);

                /*
                 *  Create GetChatUserList request for defaultChat
                 */
                RequestGetChatUserList requestGetChatUserList = new RequestGetChatUserList(-1, defaultChat, activeChat.GetUserChatInfoList());
                Console.WriteLine("Send getChatUserList update to {0} users {1} / {2}", activeChat.GetUserList().Count, activeChat.GetUserChatInfoList().Count, requestGetChatUserList.UserChatInfoList.Count);
                NetworkPacket sendPacket = new NetworkPacket(netPacket.WorkSocket, requestGetChatUserList.Serialize());

                /*
                 *  Notify every user in chat of the newcomer's arrival
                 */
                activeChat.GetUserList().ForEach(userInChat => {
                    Console.WriteLine("Send message packet to {0}", userInChat.Username);
                    AsyncSendPacket(sendPacket, userInChat);
                });
                Console.WriteLine("Send getChatUserList update to {0} users3", activeChat.GetUserList().Count);
            }
        }
Ejemplo n.º 2
0
        private void GetChatUserList(NetworkPacket netPacket)
        {
            RequestGetChatUserList requestGetChatUserList = new RequestGetChatUserList();

            requestGetChatUserList.Deserialize(netPacket.Message.ToArray());
            Console.WriteLine("GetChatUserList - ChatName: {0}", requestGetChatUserList.ChatName);
            Chat activeChat = chatList.Find(chat => chat.ChatName.Equals(requestGetChatUserList.ChatName));

            if (activeChat != null)
            {
                requestGetChatUserList.UserChatInfoList = activeChat.GetUserChatInfoList();
            }
            NetworkPacket sendPacket = new NetworkPacket(
                netPacket.WorkSocket,
                requestGetChatUserList.Serialize());
            int result = networkManager.Send(sendPacket);
        }
Ejemplo n.º 3
0
        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;
        }