コード例 #1
0
        static void SendClientName(Socket s, String clientName)
        {
            ClientNameMsg nameMsg = new ClientNameMsg();

            nameMsg.name = clientName;

            MemoryStream outStream = nameMsg.WriteData();

            s.Send(outStream.GetBuffer());
        }
コード例 #2
0
ファイル: Form1.cs プロジェクト: JamesCollins1/comp260-client
        static void clientReceive(Object o)
        {
            Form1 form = (Form1)o;

            while (form.bConnected == true)
            {
                try
                {
                    byte[] buffer = new byte[4096];
                    int    result;

                    result = form.client.Receive(buffer);

                    if (result > 0)
                    {
                        MemoryStream stream = new MemoryStream(buffer);
                        BinaryReader read   = new BinaryReader(stream);

                        Msg m = Msg.DecodeStream(read);

                        if (m != null)
                        {
                            Console.Write("Got a message: ");
                            switch (m.mID)
                            {
                            case PublicChatMsg.ID:
                            {
                                PublicChatMsg publicMsg = (PublicChatMsg)m;

                                form.AddMessageText(publicMsg.msg);
                            }
                            break;

                            case PrivateChatMsg.ID:
                            {
                                PrivateChatMsg privateMsg = (PrivateChatMsg)m;
                                form.AddMessageText(privateMsg.msg);
                            }
                            break;

                            case ClientListMsg.ID:
                            {
                                ClientListMsg clientList = (ClientListMsg)m;
                                form.SetClientList(clientList);
                            }
                            break;

                            case ClientNameMsg.ID:
                            {
                                ClientNameMsg clientName = (ClientNameMsg)m;
                                form.SetClientName(clientName.name);
                            }
                            break;

                            case GameMsg.ID:
                            {
                                GameMsg gameMessage = (GameMsg)m;
                                form.AddGameText(gameMessage.msg);
                            }
                            break;



                            default:
                                break;
                            }
                        }
                    }
                }
                catch (Exception)
                {
                    form.bConnected = false;
                    Console.WriteLine("Lost server!");
                }
            }
        }
コード例 #3
0
        /*
         * Receive messages from the server
         */
        static void clientReceive(Object o)
        {
            Form1 form = (Form1)o;

            while (form.m_Connected == true)
            {
                try
                {
                    byte[] buffer = new byte[4096];

                    if (form.m_Server.Receive(buffer) > 0)
                    {
                        MemoryStream stream = new MemoryStream(buffer);
                        BinaryReader read   = new BinaryReader(stream);

                        Msg m = Msg.DecodeStream(read);

                        if (m != null)
                        {
                            switch (m.mID)
                            {
                            case ClientNameMsg.ID:
                            {
                                ClientNameMsg clientName = (ClientNameMsg)m;
                                form.SetClientName(clientName.name);
                            }
                            break;

                            case ActionMsg.ID:
                            {
                                ActionMsg actionMessage = (ActionMsg)m;
                                form.AddActionText(actionMessage.msg);
                            }
                            break;

                            case LoginMsg.ID:
                            {
                                LoginMsg recievedLoginMsg = (LoginMsg)m;
                                switch (recievedLoginMsg.msg.Split(' ')[0])
                                {
                                case "LoginAccepted":
                                    m_MainForm.Invoke(new MethodInvoker(delegate()
                                        {
                                            m_LoginForm.Close();
                                            m_MainForm.Enabled = true;
                                            m_MainForm.Show();
                                            m_MainForm.WindowState = FormWindowState.Normal;
                                        }));

                                    break;

                                case "LoginFailed":
                                    m_MainForm.Invoke(new MethodInvoker(delegate()
                                        {
                                            // Clear text boxes and display error message
                                            m_LoginForm.ClearTextBoxes("Incorrect login details");
                                        }));
                                    break;

                                case "UserAlreadyLoggedIn":
                                    m_MainForm.Invoke(new MethodInvoker(delegate()
                                        {
                                            // Clear text boxes and display error message
                                            m_LoginForm.ClearTextBoxes("User logged in already");
                                        }));
                                    break;

                                case "AuthenticateRequested":
                                    m_MainForm.Invoke(new MethodInvoker(delegate()
                                        {
                                            m_MainForm.ReenterLoginDetails();
                                        }));
                                    break;

                                case "Salt":
                                    // If not one of the above confirm/deny strings then the message is the password salt sent back from the server in order to compare password hashs.
                                    Byte[] salt = Convert.FromBase64String(recievedLoginMsg.msg.Split(' ')[1]);

                                    m_MainForm.Invoke(new MethodInvoker(delegate()
                                        {
                                            // Handing the salt back to the login form as we don't want to store the plaintext password anywhere, it is only ever read from the password box
                                            m_LoginForm.logInWithSaltedHash(salt);
                                        }));
                                    break;
                                }
                            }
                            break;

                            case CreateNewUserMsg.ID:
                            {
                                // Returned through new user creation process
                                CreateNewUserMsg recievedNameCheck = (CreateNewUserMsg)m;
                                switch (recievedNameCheck.msg)
                                {
                                case "NameAvailable":
                                    m_MainForm.Invoke(new MethodInvoker(delegate()
                                        {
                                            m_RegisterNewUserForm.UserNameAccepted();
                                        }));
                                    break;

                                case "NameTaken":
                                    m_MainForm.Invoke(new MethodInvoker(delegate()
                                        {
                                            m_RegisterNewUserForm.UserNameRejected();
                                        }));
                                    break;

                                case "Success":
                                    m_MainForm.Invoke(new MethodInvoker(delegate()
                                        {
                                            m_RegisterNewUserForm.Close();
                                        }));
                                    break;
                                }
                            }
                            break;

                            case UpdatePasswordMsg.ID:
                            {
                                UpdatePasswordMsg updatePasswordMsg = (UpdatePasswordMsg)m;
                                switch (updatePasswordMsg.msg)
                                {
                                case "UpdatePasswordRequired":
                                    m_MainForm.Invoke(new MethodInvoker(delegate()
                                        {
                                            m_MainForm.OpenUpdatePasswordForm();
                                        }));
                                    break;

                                case "SuccessUpdatedPassword":
                                    m_MainForm.Invoke(new MethodInvoker(delegate()
                                        {
                                            m_UpdatePasswordForm.Close();
                                        }));
                                    break;
                                }
                            }
                            break;
                            }
                        }
                    }
                }
                catch (Exception)
                {
                    form.m_Connected = false;
                    Console.WriteLine("Lost connection.");
                    try
                    {
                        m_MainForm.Enabled = false;

                        // if the login window is closed
                        if (m_LoginForm.Visible == false)
                        {
                            m_LoginForm.ShowDialog();
                        }

                        m_MainForm.Invoke(new MethodInvoker(delegate()
                        {
                            m_LoginForm.showDisconnectedMessage();
                            m_MainForm.Hide();
                        }));
                    }
                    catch { }
                }
            }
            Application.Restart();
        }