Пример #1
0
        private void HandlePacket(NetIncomingMessage msg)
        {
            PacketType type = (PacketType)msg.ReadByte();
            switch (type)
            {
                case PacketType.UsernameKeywordCombo:
                    UsernameKeywordComboPacket unkwPacket = new UsernameKeywordComboPacket();
                    unkwPacket.Unpack(msg);
                    if (gameManager.PlayerSaves.ContainsKey(unkwPacket.username))
                    {
                        LoginVerificationPacket packet = new LoginVerificationPacket();
                        packet.message = "You are already logged in.";
                        ServerConsoleMessage(unkwPacket.username + " login error: Already logged in.");
                        SendUnconnectedMessage(packet, msg.SenderEndpoint);
                        //server.Connections.Remove(server.GetConnection(msg.SenderEndpoint));  // try
                    }
                    else
                    {
                        PlayerSave save = FileGrabber.getPlayerSave(isLocalGame, unkwPacket.username, unkwPacket.keyword);
                        if (!unkwPacket.keyword.Equals(save.Keyword))
                        {
                            LoginVerificationPacket packet = new LoginVerificationPacket();
                            packet.message = "Keyword does not match.";
                            ServerConsoleMessage(unkwPacket.username + " login error: Bad keyword.");
                            SendUnconnectedMessage(packet, msg.SenderEndpoint);
                            //server.Connections.Remove(server.GetConnection(msg.SenderEndpoint));  // try
                        }
                        else
                        {
                            LoginVerificationPacket packet = new LoginVerificationPacket();
                            packet.message = "verified";
                            gameManager.PlayerSaves.Add(unkwPacket.username, save);
                            gameManager.createPlayerEntityFromSave(unkwPacket.username);
                            gameManager.RUIDUsernames.Add(unkwPacket.username, msg.SenderConnection.RemoteUniqueIdentifier);
                            SendUnconnectedMessage(packet, msg.SenderEndpoint);
                            ServerConsoleMessage(unkwPacket.username + " has logged into the game.");
                            if (!isLocalGame)
                            {
                                ChatMessageQueue.Enqueue(new ChatMessage("SERVER", unkwPacket.username + " has connected."));
                            }
                        }
                    }
                    break;

                case PacketType.ChatMessage:
                    ChatMessagePacket chatPacket = new ChatMessagePacket();
                    chatPacket.Unpack(msg);
                    string username = gameManager.RUIDUsernames.GetValue(msg.SenderConnection.RemoteUniqueIdentifier);
                    if (!username.Equals(""))
                    {
                        ChatMessage cmsg = new ChatMessage(username, chatPacket.message);
                        ChatMessageQueue.Enqueue(cmsg);
                        ServerConsoleMessage(cmsg.getChatString());
                    }
                    break;

                case PacketType.InputsPacket:
                    InputsPacket inputsPacket = new InputsPacket();
                    inputsPacket.Unpack(msg);
                    string un = gameManager.RUIDUsernames.GetValue(msg.SenderConnection.RemoteUniqueIdentifier);
                    if (!un.Equals(""))
                    {
                        gameManager.HandlePlayerMoving(un, inputsPacket);
                    }
                    break;
            }
        }
Пример #2
0
        public override void HandleInput(InputState input)
        {
            if (input.IsNewKeyPress(Keys.Up))
            {
                if (onProfiles)
                {
                    selectedProfileEntry--;

                    if (selectedProfileEntry < 0)
                    {
                        selectedProfileEntry = -1;
                        selectedMenuEntry = menuEntries.Count - 1;
                        onProfiles = false;
                        onMenu = true;
                    }
                }
                else if (onMenu)
                {
                    selectedMenuEntry--;

                    if (selectedMenuEntry < 0)
                    {
                        if (profileEntries.Count > 0)
                        {
                            selectedMenuEntry = -1;
                            selectedProfileEntry = profileEntries.Count - 1;
                            onProfiles = true;
                            onMenu = false;
                        }
                        else
                        {
                            selectedMenuEntry = menuEntries.Count - 1;
                        }
                    }
                }
            }
            if (input.IsNewKeyPress(Keys.Down))
            {
                if (onProfiles)
                {
                    selectedProfileEntry++;

                    if (selectedProfileEntry >= profileEntries.Count)
                    {
                        selectedProfileEntry = -1;
                        selectedMenuEntry = 0;
                        onProfiles = false;
                        onMenu = true;
                    }
                }
                else if (onMenu)
                {
                    selectedMenuEntry++;

                    if (selectedMenuEntry >= menuEntries.Count)
                    {
                        if (profileEntries.Count > 0)
                        {
                            selectedMenuEntry = -1;
                            selectedProfileEntry = 0;
                            onProfiles = true;
                            onMenu = false;
                        }
                        else
                        {
                            selectedMenuEntry = 0;
                        }
                    }
                }
            }
            if (input.IsNewKeyPress(Keys.Enter))
            {
                if (onMenu)
                {
                    switch (selectedMenuEntry)
                    {
                        case (int)ProfileEntry.New:
                            if (newProfileActive)
                            {
                                // done typing (save it)
                                string newProfileName = keyboardInput.ToString();
                                if (profileFiles != null && profileFiles.Length > 0)
                                {
                                    if (doesProfileExist(newProfileName))
                                    {
                                        screenManager.AddScreen(new PopUpWarningScreen(this, GameConstants.DuplicateProfile));
                                    }
                                    else
                                    {
                                        profileFiles.Concat(new string[] { newProfileName });
                                        FileGrabber.createNewProfile(newProfileName);
                                        profileEntries.Add(new MenuEntry(newProfileName));
                                    }
                                }
                                else
                                {
                                    profileFiles = new string[] { newProfileName };
                                    FileGrabber.createNewProfile(newProfileName);
                                    profileEntries.Add(new MenuEntry(newProfileName));
                                }
                                keyboardInput.Clear();
                                newProfileActive = false;
                            }
                            else if (!newProfileActive)
                            {
                                // start taking keystrokes
                                newProfileActive = true;
                            }
                            break;
                        case (int)ProfileEntry.Cancel:
                            screenManager.RemoveScreen(this);
                            ParentScreen.currentScreenState = ScreenState.Active;
                            break;
                    }
                }
                else if (onProfiles)
                {
                    NetworkManager.Instance.SingleplayerStart();

                    // time to send off profile name and "local" keyword
                    UsernameKeywordComboPacket packet = new UsernameKeywordComboPacket();
                    packet.username = Path.GetFileNameWithoutExtension(profileFiles[selectedProfileEntry]);
                    packet.keyword = "local";
                    Thread.Sleep(1000); // <--- need this else packet kicks off before server thread is ready
                    NetworkManager.Instance.SendReliableData(packet);

                    // stupid thing so we can stay at the same handshake process as multiplayer
                    while (NetworkManager.Instance.Verified.Equals("")) {}

                    screenManager.AddScreen(new MainGameScreen(packet.username));
                    screenManager.RemoveScreen(this);
                }
            }
            if (input.IsNewKeyPress(Keys.Escape))
            {
                if (newProfileActive)
                {
                    keyboardInput.Clear();
                    newProfileActive = false;
                }
                screenManager.RemoveScreen(this);
                ParentScreen.currentScreenState = ScreenState.Active;
            }
        }
Пример #3
0
        // update menu entry to signal which is selected
        public override void Update(GameTime gameTime)
        {
            base.Update(gameTime);
            if (currentConnectionStatus == ConnectionStatus.NotStarted)
            {
                keyboardStringBuilder.Process(Keyboard.GetState(), gameTime, keyboardInput);
            }

            if (currentConnectionStatus == ConnectionStatus.Connecting)
            {
                if (connectingStart == 0)
                {
                    connectingStart = gameTime.TotalGameTime.TotalSeconds;
                }

                connectingElapsed = gameTime.TotalGameTime.TotalSeconds - connectingStart;

                if (NetworkManager.Instance.Discovered)
                    currentConnectionStatus = ConnectionStatus.Discovered;

                    // *** we're connected to our network server now

                else if (connectingElapsed > timeout)
                {
                    currentConnectionStatus = ConnectionStatus.NotFound;
                    connectingStart = 0;
                }
            }

            if (currentConnectionStatus == ConnectionStatus.Discovered)
            {
                if (!postDiscoverySend)
                {
                    // time to send off username/keyword
                    UsernameKeywordComboPacket packet = new UsernameKeywordComboPacket();
                    packet.username = ClientOptions.Instance.Username;
                    packet.keyword = ClientOptions.Instance.Keyword;
                    Thread.Sleep(1000);
                    NetworkManager.Instance.SendReliableData(packet);
                    postDiscoverySend = true;
                }

                string verification = NetworkManager.Instance.Verified;
                if (!verification.Equals(""))
                {
                      if (verification.Equals("verified"))
                        currentConnectionStatus = ConnectionStatus.Connected;
                      else
                      {
                          currentConnectionStatus = ConnectionStatus.FailVerify;
                          failmessage = verification;
                          NetworkManager.Instance.DisconnectClient();
                      }
                }
            }

            if (currentConnectionStatus == ConnectionStatus.Connected)
            {
                screenManager.AddScreen(new MainGameScreen(ClientOptions.Instance.Username));
                screenManager.RemoveScreen(this);
                screenManager.RemoveScreen(this.ParentScreen);
            }
        }