Example #1
0
        public void ConnectToGameServer(GameServerInformation serverInformation)
        {
            GameServerServiceProvider = new ClientServiceProvider(
                serverInformation.ServerPublicAddress, serverInformation.ServerPort,
                NetworkObjectParameters.LobbyServerBufferSize,
                GameServerConsumerAction);

            GameServerServiceProvider.StartOperation();
        }
Example #2
0
        private ServerInformationBroker()
        {
            ActionCallbackDictionary = new Dictionary <int, Action <object> >();

            LobbyServerServiceProvider = new ClientServiceProvider(
                NetworkObjectParameters.LobbyServerInformation.ServerPublicAddress,
                NetworkObjectParameters.LobbyServerInformation.ServerPort,
                NetworkObjectParameters.LobbyServerBufferSize,
                LobbyServerConsumerAction);

            ActionCallbackDictionary.AddOrReplace(NetworkObjectParameters.GameServerRoomRefreshMetadata, UpdateRoomMetadataAsyncCallback);

            LobbyServerServiceProvider.StartOperation();
        }
Example #3
0
        public void ConnectToGameServer(GameServerInformation serverInformation)
        {
            GameServerServiceProvider = new ClientServiceProvider(
                serverInformation.ServerPublicAddress, serverInformation.ServerPort,
                NetworkObjectParameters.LobbyServerBufferSize,
                GameServerConsumerAction);

            GameServerServiceProvider.StartOperation();

            GameServerServiceProvider.OnDisconnect += OnDisconnect;

            //If the application fails to send or to receive, force the disconnection
            GameServerServiceProvider.OnFailToSendMessage        =
                GameServerServiceProvider.OnFailToReceiveMessage = (ex) => { return(true); };
        }
Example #4
0
        public static void StartListeningPlayerLoginAttempt(ExtendedConcurrentQueue <byte[]> provider, string param)
        {
            try
            {
                PlayerController pc = new PlayerController();

                Player deserializedPlayer = ObjectWrapper.Deserialize <Player>(param);
                Player player             = pc.LoginPlayer(deserializedPlayer);

                Player answer = null;

                if (player != null)
                {
                    ClientServiceProvider csp = new ClientServiceProvider(
                        NetworkObjectParameters.LobbyServerInformation.ServerLocalAddress,
                        NetworkObjectParameters.LobbyServerInformation.ServerPort,
                        NetworkObjectParameters.LobbyServerBufferSize,
                        (_provider, _request) =>
                    {
                        answer = ObjectWrapper.Deserialize <Player>(_request[1]);
                    });
                    csp.StartOperation();
                    csp.RequestQueue.Enqueue(NetworkObjectParameters.LobbyServerPlayerUIDRequest, player);

                    while (answer == null)
                    {
                        Thread.Sleep(100);
                    }

                    csp.StopOperation();

                    deserializedPlayer.Nickname = answer.Nickname;
                }

                Console.WriteLine($"- Request for: {deserializedPlayer.Nickname} - {deserializedPlayer.Password} - Player " + ((answer == null) ? "not " : "") + "found");

                if (answer == null)
                {
                    provider.Enqueue(NetworkObjectParameters.LoginServerLoginAttemptRequest, null);
                    return;
                }

                // Preparing Player Information Stream
                Dictionary <AvatarCategory, HashSet <int> > ownedAvatars = pc.RetrievePlayerAvatarList(player);

                provider.Enqueue(NetworkObjectParameters.LoginServerLoginAttemptRequest, player);

                if (ownedAvatars != null)
                {
                    foreach (KeyValuePair <AvatarCategory, HashSet <int> > kvp in ownedAvatars)
                    {
                        //For safety reasons, the maximum integer stream size must be 300 integers.
                        const int maximumSize = 300;
                        for (int i = 0; i < kvp.Value.Count; i += maximumSize)
                        {
                            provider.Enqueue(NetworkObjectParameters.LoginServerLoginAttemptRequest, (int)kvp.Key, kvp.Value.Skip(i).Take(maximumSize).ToList());
                        }
                    }
                }

                //Sends the "EOF" to client
                provider.Enqueue(NetworkObjectParameters.LoginServerLoginAttemptRequest, 0, null);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error: {ex}");
                throw ex;
            }
        }
        public void Login(GameLauncher gameLauncher, string nickname, string password)
        {
            try
            {
                //Preparing player variable
                Player player = new Player()
                {
                    Nickname = nickname,
                    Password = password
                };

                bool waiting = false;

                ClientServiceProvider csp = new ClientServiceProvider(
                    NetworkObjectParameters.LoginServerInformation.ServerPublicAddress,
                    NetworkObjectParameters.LoginServerInformation.ServerPort,
                    NetworkObjectParameters.LoginServerBufferSize,
                    (serviceProvider, message) =>
                {
                    if (message.Length == 2)
                    {
                        player = ObjectWrapper.DeserializeRequest <Player>(message[1]);

                        if (player == null)
                        {
                            waiting = true;
                            return;
                        }
                    }
                    else
                    {
                        List <int> idList = ObjectWrapper.DeserializeRequest <List <int> >(message[2]);

                        if (idList == null)
                        {
                            waiting = true;
                            return;
                        }

                        foreach (int i in idList)
                        {
                            player.PlayerAvatarMetadataList.Add(new PlayerAvatarMetadata()
                            {
                                Player         = player,
                                AvatarMetadata = new AvatarMetadata()
                                {
                                    ID             = i,
                                    AvatarCategory = (AvatarCategory)int.Parse(message[1])
                                },
                            });
                        }
                    }
                });

                csp.OnFailToEstabilishConnection += () =>
                {
                    Feedback.CreateWarningMessageBox(Language.FailToEstabilishConnection);
                    OnFailToEstabilishConnection(gameLauncher);
                };
                csp.StartOperation();
                csp.RequestQueue.Enqueue(NetworkObjectParameters.LoginServerLoginAttemptRequest, player);

                while (!waiting)
                {
                    Thread.Sleep(100);
                }

                csp.StopOperation();

                if (player == null || player.ID == 0)
                {
                    //Error
                    Feedback.CreateWarningMessageBox(Language.PlayerNotFound);
                    OnFailToEstabilishConnection(gameLauncher);

                    return;
                }

                player.LoadOwnedAvatarDictionary();

                //Success
                gameLauncher.TickAction += () => { gameLauncher.Close(); };
                Parameter.Player         = player;
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Ex: {ex.Message}");
            }
        }
        public void Register(SignUpForm signUpForm, PlayerDTO account)
        {
            try
            {
                bool waiting = false;

                Player newPlayer = null;

                ClientServiceProvider csp = new ClientServiceProvider(
                    NetworkObjectParameters.LoginServerInformation.ServerLocalAddress,
                    NetworkObjectParameters.LoginServerInformation.ServerPort,
                    NetworkObjectParameters.LoginServerBufferSize,
                    (serviceProvider, message) =>
                {
                    newPlayer = ObjectWrapper.DeserializeRequest <Player>(message[1]);
                    waiting   = true;
                });
                csp.OnFailToEstabilishConnection += () =>
                {
                    Feedback.CreateWarningMessageBox(Language.FailToEstabilishConnection);
                    OnFailToEstabilishConnection(signUpForm);
                };
                csp.StartOperation();
                csp.RequestQueue.Enqueue(NetworkObjectParameters.LoginServerAccountCreationRequest, account);

                while (!waiting)
                {
                    Thread.Sleep(100);
                }

                csp.StopOperation();

                bool wasAccountCreated = true;

                if (newPlayer == null)
                {
                    //Unnable to create player (unknown reason)
                    signUpForm.TickAction += () => signUpForm.SetEnableInterfaceElements(true);
                    Feedback.CreateWarningMessageBox(Language.RegisterFailureMessage);
                    return;
                }

                string errorMessage = "";
                if (newPlayer.Nickname == null)
                {
                    //Invalid Nickname
                    errorMessage     += Language.RegisterFailureNickname;
                    wasAccountCreated = false;
                }

                if (newPlayer.Email == null)
                {
                    //Invalid Email
                    errorMessage     += Language.RegisterFailureEmail;
                    wasAccountCreated = false;
                }

                if (wasAccountCreated)
                {
                    //Success
                    signUpForm.TickAction += () => signUpForm.Close();
                    Feedback.CreateInformationMessageBox($"{Language.RegisterSuccess}");
                }
                else
                {
                    signUpForm.TickAction += () => signUpForm.SetEnableInterfaceElements(true);
                    Feedback.CreateWarningMessageBox($"{Language.RegisterFailureMessage}{errorMessage}");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Ex: {ex.Message}");
            }
        }
        public void Login(LoginLoadingScreen loadingScreen, string nickname, string password)
        {
            try
            {
                //Preparing player variable
                Player player = new Player()
                {
                    Nickname = nickname,
                    Password = password
                };

                bool waiting = false;

                ClientServiceProvider csp = new ClientServiceProvider(
                    NetworkObjectParameters.LoginServerInformation.ServerPublicAddress,
                    NetworkObjectParameters.LoginServerInformation.ServerPort,
                    NetworkObjectParameters.LoginServerBufferSize,
                    (serviceProvider, message) =>
                {
                    if (message.Length == 2)
                    {
                        player = ObjectWrapper.Deserialize <Player>(message[1]);

                        if (player == null)
                        {
                            waiting = true;
                            return;
                        }
                    }
                    else
                    {
                        List <int> idList = ObjectWrapper.Deserialize <List <int> >(message[2]);

                        if (idList == null)
                        {
                            waiting = true;
                            return;
                        }

                        foreach (int i in idList)
                        {
                            player.PlayerAvatarMetadataList.Add(new PlayerAvatarMetadata()
                            {
                                Player         = player,
                                AvatarMetadata = new AvatarMetadata()
                                {
                                    ID             = i,
                                    AvatarCategory = (AvatarCategory)int.Parse(message[1])
                                },
                            });
                        }
                    }
                });

                csp.OnFailToEstabilishConnection += loadingScreen.OnFailToStablishConnection;
                csp.StartOperation();
                csp.RequestQueue.Enqueue(NetworkObjectParameters.LoginServerLoginAttemptRequest, player);

                while (!waiting)
                {
                    Thread.Sleep(100);
                }

                csp.StopOperation();

                if (player == null || player.ID == 0)
                {
                    loadingScreen.OnFailToFindPlayer();
                    return;
                }

                player.LoadOwnedAvatarDictionary();

                //Success
                Parameter.Player = player;
                loadingScreen.Close(DialogResult.OK);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Ex: {ex.Message}");
            }
        }
        public void Register(SignUpLoadingScreen signUpLoadingScreen, PlayerDTO account)
        {
            try
            {
                bool waiting = false;

                Player newPlayer = null;

                ClientServiceProvider csp = new ClientServiceProvider(
                    NetworkObjectParameters.LoginServerInformation.ServerPublicAddress,
                    NetworkObjectParameters.LoginServerInformation.ServerPort,
                    NetworkObjectParameters.LoginServerBufferSize,
                    (serviceProvider, message) =>
                {
                    newPlayer = ObjectWrapper.Deserialize <Player>(message[1]);
                    waiting   = true;
                });
                csp.OnFailToEstabilishConnection += signUpLoadingScreen.OnFailToStablishConnection;

                csp.StartOperation();
                csp.RequestQueue.Enqueue(NetworkObjectParameters.LoginServerAccountCreationRequest, account);

                while (!waiting)
                {
                    Thread.Sleep(100);
                }

                csp.StopOperation();

                if (newPlayer == null)
                {
                    //Unnable to create player (unknown reason)
                    signUpLoadingScreen.OnFailToCreateAccount();
                    return;
                }

                string errorMessage = "";

                //Invalid Nickname
                if (newPlayer.Nickname == null)
                {
                    errorMessage += Language.RegisterFailureNickname;
                }

                //Invalid Email
                if (newPlayer.Email == null)
                {
                    errorMessage += Language.RegisterFailureEmail;
                }

                //Fail
                if (errorMessage.Length > 0)
                {
                    signUpLoadingScreen.OnFailToCreateAccount();
                    return;
                }

                //Success
                signUpLoadingScreen.OnCreateAccount();
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Ex: {ex.Message}");
            }
        }