Ejemplo n.º 1
0
        public void ReceiveMessages()
        {
            //    byte[] buffer = new byte[128];
            while (connected)
            {
                if (connectionStream == null)
                {
                    Console.WriteLine("Disconnected, please reconnect to server.");
                    connected = false;
                    break;
                }
                //   buffer = new byte[128];
                try
                {
                    if (connectionStream.DataAvailable)
                    {
                        SoapFormatter formatter = new SoapFormatter();
                        Packet        msg       = (Packet)formatter.Deserialize(connectionStream);
                        int           type      = msg.type;

                        Console.WriteLine("HandleServerConnection receive messages type " + type);
                        switch (type)
                        {
                        case 0:    //message

                            chatBox.BeginInvoke((MethodInvoker) delegate()
                            {
                                string username = (string)msg.GetObjects(0);
                                string content  = (string)msg.GetObjects(1);
                                chatBox.Items.Add("[" + msg.GetTimestamp() + "] " + username + ": " + content);
                            });
                            break;

                        case 1:    //user list
                            userList.BeginInvoke((MethodInvoker) delegate()
                            {
                                string u       = (string)msg.GetObjects(0);
                                string[] users = u.Split('|');
                                userList.Items.Clear();
                                foreach (string user in users)
                                {
                                    userList.Items.Add(user);
                                }
                            });
                            break;

                        case 2:    //Login response from server
                            bool success = (bool)msg.GetObjects(0);
                            lr.BeginInvoke((MethodInvoker) delegate()
                            {
                                lr.LoginResponse(success);
                            });
                            break;

                        case 3:     //Registration response from server
                            bool success2 = (bool)msg.GetObjects(0);
                            lr.RegisterResponse(success2);
                            break;

                        case 4:    //Received confirmation from server that channel join was successful
                            string channelName = (string)msg.GetObjects(0);
                            SendUserListRequest();
                            chatBox.BeginInvoke((MethodInvoker) delegate()
                            {
                                chatBox.Items.Add("You joined channel " + channelName);
                            });

                            break;

                        default:
                            Console.WriteLine("HandleServerConnection: Unhandled type: " + type);
                            break;
                        }
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.StackTrace);
                    Console.WriteLine("Disconnected");
                    break;
                }
            }
        }