Inheritance: MonoBehaviour
        /// <summary>
        /// Return false if disconnect/finished
        /// </summary>
        void RunClientHandshake()
        {
            clientThread.WatchdogTick = DateTime.Now;

            //Read Handshake
            var hs = PacketReader.ReadFirstPackage(clientStream);

            if (hs == null)
            {
                //Old status packet
                LegacyStatus.SendStatus(clientStream);
                Phase = Phases.FinalClose;
                return;
            }
            var h = new Handshake(hs);

            Debug.FromClient(this, h);
            clientThread.State = "Handshake Received " + h;
            ClientVersion      = h.Version;
            if (h.State == HandshakeState.Status)
            {
                RunStatusPing(h);
                return;
            }
            if (h.State == HandshakeState.None)
            {
                Close("Invalid handshake state: " + h.State);
                return;
            }
            if (h.State != HandshakeState.Login)
            {
                Close("Invalid handshake state: " + h.State);
                return;
            }
            #if DEBUG
            if (h.Version >= ProtocolVersion.next)
            {
                throw new InvalidDataException("new version: " + h.Version);
            }
            #endif
            if (h.Version > MinecraftServer.BackendVersion)
            {
                clientThread.State = "Handshake too high version";
                Close("We are still running " + MinecraftServer.BackendVersion.ToText() + " we are so very sorry about that");
                return;
            }
            if (h.Version < MinecraftServer.FrontendVersion)
            {
                clientThread.State = "Handshake too low version";
                Close("Upgrade your client to " + MinecraftServer.FrontendVersion.ToText());
                return;
            }

            //Login
            var l = new LoginStart(PacketReader.ReadHandshake(clientStream));

            clientThread.State = "LoginStart Received " + l.Name;
            unverifiedUsername = l.Name;
            #if DEBUGx
            var names = new string[] { "travelcraft2012", "nuxas", "drjanitor" };
            unverifiedUsername = names[logincount++ % names.Length];
            #endif
            if (unverifiedUsername.Length == 0 || unverifiedUsername.Length > 16)
            {
                clientThread.State = "Handshake wrong username length";
                Close("Bad username");
                Console.WriteLine("Wrong username length: " + unverifiedUsername.Length);
                return;
            }

            //Set Compression
            var compression = new SetCompression();
            SendToClientInternal(compression);
            maxUncompressed = compression.MaxSize;

            //Send encryption request
            clientThread.State = "Handshake: Sending encryption request";
            //Initiate ID
            var r = new Random();
            ID = new byte[8];
            r.NextBytes(ID);
            SendToClientInternal(new EncryptionRequest(Authentication.McHex(ID), MinecraftServer.RsaBytes));
            clientThread.State = "Handshake: Sent encryption request, reading response";

            //Read enc response
            int erSize;
            var erBuffer = PacketReader.Read(clientStream, out erSize);
            if (erSize != 0)
            {
                erBuffer = Compression.Decompress(erBuffer, erSize);
            }
            var er = new EncryptionResponse(erBuffer);

            clientThread.State = "Handshake: Got enc resp";
            CryptoMC cryptoStream = new CryptoMC(clientStream, er);

            //Verify user
            clientThread.WatchdogTick = DateTime.Now;

            clientThread.State = "Handshake: loading proxy data";
            Settings           = LoadProxyPlayer(unverifiedUsername);

            if (IPAddress.IsLoopback(RemoteEndPoint.Address))
            {
                MinecraftUsername = unverifiedUsername;
                Log.WritePlayer(this, "Succesful login from (local) " + RemoteEndPoint);
            }
            else
            {
                clientThread.State = "Handshake: Verifying login credentials";
                string error = Authentication.VerifyUserLogin(unverifiedUsername, cryptoStream.SharedKey, ID);
                if (error != null)
                {
                    //Unauthorized
                    Log.WriteAuthFail(unverifiedUsername, RemoteEndPoint, error);
                    Close("Mojang says " + error);
                    return;
                }
                else
                {
                    MinecraftUsername = unverifiedUsername;
                    Log.WritePlayer(this, "Login from " + RemoteEndPoint + " " + Country);
                }
            }
            clientThread.State = "Handshake: Logged in";

            //Get UUID
            try
            {
                Settings.UUID = UsernameUUID.GetUUID(MinecraftUsername);
                //Saved further down
                Debug.WriteLine("Real UUID for " + MinecraftUsername + " is " + Settings.UUID);
            }
            catch (Exception)
            {
                Debug.WriteLine("Failed to get UUID for MinecraftName " + MinecraftUsername);
            }

            clientThread.WatchdogTick = DateTime.Now;

            MineProxy.Inbox.Status(this);

            //start encryption
            clientStream = cryptoStream;

            SendToClientInternal(new LoginSuccess(Settings.UUID, MinecraftUsername));

            clientThread.User  = MinecraftUsername;
            clientThread.State = "Logged in";

            EntityID = freeEID;

            //Math.Abs(unverifiedUsername.GetHashCode());
            freeEID += 5000;

            //Login reply to client
            JoinGame lr = new JoinGame();
            lr.ClientVersion = 0;
            lr.Difficulty    = 0;
            lr.Dimension     = 0;
            lr.EntityID      = EntityID;
            lr.MaxPlayers    = (byte)MinecraftServer.PlayerListSlots;
            lr.GameMode      = 0;
            SendToClient(lr);

            Phase = Phases.Gaming;
            Queue = new SendQueue(this);

            PlayerList.LoginPlayer(this);

            SaveProxyPlayer();

            string name = h.Host.ToLowerInvariant().Split('.')[0];
            if (name == "con")
            {
                SetWorld(World.Construct);
            }
            else
            {
                SetWorld(World.Main);
            }
            //Handshake complete
        }
Beispiel #2
0
        /// <summary>
        /// Throw exception on error
        /// </summary>
        void RunServerHandshake()
        {
            thread.WatchdogTick = DateTime.Now;

            //Handshaker
            SendToBackend(new Handshake(MinecraftServer.IP.ToString(), Vanilla.Endpoint.Port, HandshakeState.Login));
            SendToBackend(new LoginStart(Player.MinecraftUsername));

            thread.WatchdogTick = DateTime.Now;

            //No encryption with localhost?!!! :D

            /*
             * //Read Encryption Request
             * var encReq = new EncryptionRequest(PacketReader.Read(serverReader, EncryptionRequest.ID));
             * Debug.FromServer(encReq, Player);
             *
             * //Send response
             * if (encReq.ServerID != "")
             *  throw new InvalidOperationException("Backend server online mode must be false, ID=-, got " + encReq.ServerID);
             * crypto = new CryptoMC(serverStream, encReq);
             * SendToBackend(new EncryptionResponse(crypto));
             *
             * //Start encryption
             * serverStream = crypto;
             * serverReader = new EndianBinaryReader(EndianBitConverter.Big, serverStream);
             * serverWriter = new EndianBinaryWriter(EndianBitConverter.Big, serverStream);
             */

            byte[] buffer = PacketReader.ReadHandshake(serverStream);
            if (buffer[0] == 0)
            {
                string disconnectMessage = Encoding.ASCII.GetString(buffer, 2, buffer.Length - 2);
                Player.TellSystem("[Error]", disconnectMessage);
                throw new InvalidOperationException(disconnectMessage);
            }

            var compression = new SetCompression(buffer);

            maxUncompressed = compression.MaxSize;
            Debug.FromServer(compression, Player);

            var loginSuccess = new LoginSuccess(PacketReader.Read(serverStream));

            UUID = loginSuccess.UUID;
            Debug.FromServer(loginSuccess, Player);

            //Read LoginRequest
            JoinGame res = new JoinGame(PacketReader.Read(serverStream));

            Debug.FromServer(res, Player);

            thread.State = "Got Login";
            EID          = res.EntityID;
            Mode         = (GameMode)res.GameMode;
            Dimension    = res.Dimension;

            //Store UUID permanently - No need to store from backend since that is offline uuid

            phase = Phases.Gaming;
        }
 // Use this for initialization
 void Start()
 {
     _canvas         = GameObject.Find("Canvas");
     joinGame        = _canvas.GetComponent <JoinGame>();
     characterViewer = GetComponent <CharacterViewer>();
 }
        public void HandleMessage(JoinGame message, Socket handler)
        {
            lock (BoardLock)
            {
                var selectedTeam = SelectTeamForPlayer(message.preferredTeam);
                //both teams are full
                if (selectedTeam == null)
                {
                    gameMaster.Connection.SendFromClient(handler,
                                                         XmlMessageConverter.ToXml(new RejectJoiningGame()
                    {
                        gameName = message.gameName,
                        playerId = message.playerId
                    }));

                    gameMaster.Connection.SendFromClient(handler,
                                                         XmlMessageConverter.ToXml(new GameStarted()
                    {
                        gameId = this.gameId
                    }));

                    return;
                }

                var role = message.preferredRole;
                if (role == PlayerType.leader)
                {
                    if (selectedTeam.HasLeader)
                    {
                        role = PlayerType.member;
                    }
                }

                var guid           = Utils.GenerateGuid();
                var fieldForPlayer = Board.GetEmptyPositionForPlayer(selectedTeam.Color);
                fieldForPlayer.PlayerId = message.playerId;

                if (role == PlayerType.leader)
                {
                    selectedTeam.AddLeader(new Wrapper.Leader(message.playerId, guid, selectedTeam, fieldForPlayer.X,
                                                              fieldForPlayer.Y));
                }
                else
                {
                    selectedTeam.Players.Add(new Wrapper.Player(message.playerId, guid, selectedTeam, fieldForPlayer.X,
                                                                fieldForPlayer.Y));
                }

                var answer = new ConfirmJoiningGame();
                answer.playerId         = message.playerId;
                answer.privateGuid      = guid;
                answer.gameId           = this.gameId;
                answer.PlayerDefinition = new Player()
                {
                    id   = message.playerId,
                    team = selectedTeam.Color,
                    type = role
                };
                var answerString = XmlMessageConverter.ToXml(answer);
                gameMaster.Connection.SendFromClient(handler, answerString);
            }


            if (IsReady)
            {
                var board   = Board;
                var players = Players.Select(p => p.SchemaPlayer).ToArray();
                foreach (var player in Players)
                {
                    var startGame = new Common.Schema.Game()
                    {
                        Board          = board.SchemaBoard,
                        playerId       = player.Id,
                        PlayerLocation = new Location()
                        {
                            x = player.X, y = player.Y
                        },
                        Players = players
                    };
                    var gameString = XmlMessageConverter.ToXml(startGame);
                    //ConsoleDebug.Message(gameString);
                    gameMaster.Connection.SendFromClient(handler, gameString);
                    //send GameStarted message to server so it won't show it as an open game
                    var gameStarted = new GameStarted()
                    {
                        gameId = gameId
                    };
                    var startedString = XmlMessageConverter.ToXml(gameStarted);
                    gameMaster.Connection.SendFromClient(handler, startedString);
                }
                //place first pieces
                for (int i = 0; i < gameMaster.Settings.GameDefinition.InitialNumberOfPieces; i++)
                {
                    PlaceNewPiece(Board.GetRandomEmptyFieldInTaskArea());
                }
                //start infinite Piece place loop
                GameInProgress = true;
                GeneratePieces();
            }
        }
Beispiel #5
0
    // Start is called before the first frame update
    void Start()
    {
        GameManager.Inst.isInbackground = false;

        if (GameObject.FindGameObjectWithTag("SocketIO") != null && socketIOComponent == null)
        {
            socketIOComponent = GameObject.FindGameObjectWithTag("SocketIO").GetComponent <SocketIOComponent>();
        }

        isAnimationOver = false;
        GameManager.Inst.isNotYetJoin = false;
        //hide player showing section and title first
        foreach (GameObject game in playerRows)
        {
            game.SetActive(false);
        }

        //start animation after slider gets open
        StartCoroutine(StartAnimation());

        enterCodeField.GetComponent <TMP_InputField>().onEndEdit.AddListener(EndEditing);
        errorPanel.SetActive(false);

        confirmPanel.SetActive(false);

        //socket setup
        socketIOComponent.On("leftGame", (SocketIOEvent obj) =>
        {
            confirmText.text     = obj.data.ToDictionary()["message"];
            confirmOkButton.text = "OK";

            isAdminExited = true;
            StartCoroutine(StartConfirmPanelAnimation());
        });

        socketIOComponent.On("playerJoinedRoom", (SocketIOEvent obj) =>
        {
            JoinGame joinGame = JsonUtility.FromJson <JoinGame>(obj.data.ToString());

            for (int i = 0; i < joinGame.team.Length; i++)
            {
                playerRowsText[i].GetComponentInChildren <TMP_Text>().text = joinGame.team[i].userName;
                GameManager.Inst.Lobby_id = joinGame.team[i].lobby_id;
                string roleToSet          = "friend";

                if (joinGame.team[i].role == "admin")
                {
                    roleToSet = "admin";
                }

                if (joinGame.team[i].deviceId == SystemInfo.deviceUniqueIdentifier && joinGame.team[i].role == "friend")
                {
                    roleToSet = "you";
                }

                playerRowsText[i].transform.GetChild(1).gameObject.SetActive(true);
                playerRowsText[i].transform.GetChild(1).gameObject.GetComponent <TMP_Text>().text = roleToSet;

                print("<Color><b> !♦ playerJoinedRoom ♦! </b></Color>");
            }
        });

        socketIOComponent.On("playerLeftGame", (SocketIOEvent obj) =>
        {
            JoinGame joinGame = JsonUtility.FromJson <JoinGame>(obj.data.ToString());
            Debug.Log("obj: " + joinGame.status);

            //set joined players to rows
            for (int i = joinGame.team.Length; i < playerRowsText.Length; i++)
            {
                playerRowsText[i].GetComponentInChildren <TMP_Text>().text = "pending...";
                GameManager.Inst.isNotYetJoin = false;
                playerRowsText[i].transform.GetChild(1).gameObject.SetActive(false);
            }
        });
    }
 private void OnJoinGame(string joinSecret) => JoinGame?.Invoke(joinSecret);
Beispiel #7
0
    //will send code to server and will fetch team for same using socket (it's used)
    public void CheckAndJoinGame()
    {
        myGameCode = enterCodeField.GetComponent <TMP_InputField>().text;

        Player player = new Player();

        Dictionary <string, string> inputData = new Dictionary <string, string>();

        inputData.Add("code", myGameCode);
        inputData.Add("userName", player.GetUserName());
        inputData.Add("deviceId", SystemInfo.deviceUniqueIdentifier);

        socketIOComponent.Emit("joinGame", new JSONObject(inputData), (JSONObject obj) =>
        {
            string jsonString = obj[0].ToString();
            Debug.Log("joinGame  CHECKING 11: " + jsonString);
            JoinGame joinGame = JsonUtility.FromJson <JoinGame>(jsonString);

            if (joinGame.status == true)
            {
                GameManager.Inst.isNotYetJoin = true;

                joinedTeam = true;

                enterCodeField.GetComponent <TMP_InputField>().interactable = false;

                //set joined players to rows
                for (int i = 0; i < joinGame.team.Length; i++)
                {
                    playerRowsText[i].GetComponentInChildren <TMP_Text>().text = joinGame.team[i].userName;

                    string roleToSet = "friend";

                    if (joinGame.team[i].role == "admin")
                    {
                        roleToSet = "admin";
                    }

                    if (joinGame.team[i].deviceId == SystemInfo.deviceUniqueIdentifier && joinGame.team[i].role == "friend")
                    {
                        roleToSet = "you";
                    }

                    playerRowsText[i].transform.GetChild(1).gameObject.SetActive(true);
                    playerRowsText[i].transform.GetChild(1).gameObject.GetComponent <TMP_Text>().text = roleToSet;

                    //show player showing section and title first
                    foreach (GameObject game in playerRows)
                    {
                        game.SetActive(true);
                    }

                    StartCoroutine(AnimateRows(0));
                }

                // here timer
                //timer = 15;
                //InvokeRepeating("Starttimer", 1f, 1f);
            }
            else
            {
                GameManager.Inst.isNotYetJoin = false;
                //if api sends error, show error panel
                isErrorVisible = true;
                errorPanel.SetActive(true);
                errorPanel.GetComponent <Animator>().Play("ErrorAnimationIn");
                errorText.text = joinGame.message;
            }
        });
    }
Beispiel #8
0
// ParseNetMessage accepts input of raw bytes from a NetMessage. Parses and returns a Net message.
    public static INet Parse(ushort msgType, byte[] content)
    {
        INet    msg = null;
        MsgType mt  = (MsgType)msgType;

        switch (mt)
        {
        case MsgType.Multipart:
            msg = new Multipart();
            break;

        case MsgType.Heartbeat:
            msg = new Heartbeat();
            break;

        case MsgType.Connected:
            msg = new Connected();
            break;

        case MsgType.Disconnected:
            msg = new Disconnected();
            break;

        case MsgType.CreateAcct:
            msg = new CreateAcct();
            break;

        case MsgType.CreateAcctResp:
            msg = new CreateAcctResp();
            break;

        case MsgType.Login:
            msg = new Login();
            break;

        case MsgType.LoginResp:
            msg = new LoginResp();
            break;

        case MsgType.Character:
            msg = new Character();
            break;

        case MsgType.ListGames:
            msg = new ListGames();
            break;

        case MsgType.ListGamesResp:
            msg = new ListGamesResp();
            break;

        case MsgType.CreateGame:
            msg = new CreateGame();
            break;

        case MsgType.CreateGameResp:
            msg = new CreateGameResp();
            break;

        case MsgType.JoinGame:
            msg = new JoinGame();
            break;

        case MsgType.GameConnected:
            msg = new GameConnected();
            break;

        case MsgType.GameMasterFrame:
            msg = new GameMasterFrame();
            break;

        case MsgType.Entity:
            msg = new Entity();
            break;

        case MsgType.MovePlayer:
            msg = new MovePlayer();
            break;

        case MsgType.UseAbility:
            msg = new UseAbility();
            break;

        case MsgType.AbilityResult:
            msg = new AbilityResult();
            break;

        case MsgType.EndGame:
            msg = new EndGame();
            break;
        }
        MemoryStream ms = new MemoryStream(content);

        msg.Deserialize(new BinaryReader(ms));
        return(msg);
    }
 private void InvokeJoinGame(JoinGame packet)
 {
     packetListener.OnJoinGame(packet);
 }
 public void OnJoinGame(JoinGame packet)
 {
 }
Beispiel #11
0
        public void Tick()
        {
            lock (MinecraftServer.Worlds)
            {
                foreach (var i in MinecraftServer.Worlds)
                {
                    foreach (var p in i.Players)
                    {
                        var ka = new KeepAlive()
                        {
                            Owner = p.OwnerID
                        };
                        ka.KeepAliveID = new Random().Next();

                        NetworkService.EnqueuePacket(ka);
                    }
                }
            }

            if (NetworkService.IsAvalible(new LoginStart()))
            {
                var p  = NetworkService.GetPacket <LoginStart>() as LoginStart;
                var pl = new Player()
                {
                    OwnerID = p.Owner, Name = p.Name
                };


                var Logins = new LoginSuccess()
                {
                    Owner = p.Owner
                };
                Logins.Username = p.Name;
                Logins.UUID     = GetUuid(p.Name);

                NetworkService.EnqueuePacket(Logins);

                var jg = new JoinGame()
                {
                    Owner = p.Owner
                };
                jg.EntityID         = 0;
                jg.Gamemode         = (byte)pl.GameMode;
                jg.Dimension        = 0;
                jg.Difficulty       = 0;
                jg.MaxPlayers       = 255;
                jg.LevelType        = "default";
                jg.ReducedDebugInfo = 0;

                NetworkService.EnqueuePacket(jg);


                var ppal = new PlayerPositionAndLook()
                {
                    Owner = p.Owner
                };
                ppal.X     = pl.Posistion.X;
                ppal.Y     = pl.Posistion.Y;
                ppal.Z     = pl.Posistion.Z;
                ppal.Yaw   = pl.Look.Yaw;
                ppal.Pitch = pl.Look.Pitch;
                ppal.Flags = 255;

                NetworkService.EnqueuePacket(ppal);

                pl.Spawned = true;

                MinecraftServer.Worlds[0].Players.Add(pl);
            }
        }
Beispiel #12
0
 private void OnJoinGame(string secret)
 {
     JoinGame?.Invoke(secret);
 }
    private void Awake()
    {
        inst = this;

        isAnimationOver = false;


        GameManager.Inst.isNotYetJoin   = false;
        GameManager.Inst.isInbackground = false;

        if (GameObject.FindGameObjectWithTag("SocketIO") != null && socketIOComponent == null)
        {
            socketIOComponent = GameObject.FindGameObjectWithTag("SocketIO").GetComponent <SocketIOComponent>();
        }
        else
        {
            print("-=-=socketIO-=error-=->");
        }
        Debug.Log("socketIO: " + socketIOComponent);

        //enterCodeField.GetComponent<TMP_InputField>().onEndEdit.AddListener(EndEditing);
        enterCodeField.GetComponent <TMP_InputField>().interactable = false;

        //get code from server
        GetCodeFromServer();

        //start animation after slider gets open
        StartCoroutine(StartAnimation());

        //get current user name (who will be admin) and set on first row
        Player player = new Player();

        playerRowsText[0].GetComponentInChildren <TMP_Text>().text = player.GetUserName();
        playerRowsText[0].interactable = false;

        //deactive confirmation panel and change message of that
        confirmPanel.SetActive(false);
        confirmText.text = "Your friends will not be able join team using this code. Are you sure you want to leave ?";

        //Socket setup
        socketIOComponent.On("playerJoinedRoom", (SocketIOEvent obj) =>
        {
            JoinGame joinGame = JsonUtility.FromJson <JoinGame>(obj.data.ToString());
            print("playerJoinedRoom + data.ToString()" + obj.data.ToString());
            Debug.Log("obj: " + joinGame.status);
            GameManager.Inst.isNotYetJoin = true;
            //set joined players to rows
            for (int i = 1; i < joinGame.team.Length; i++)
            {
                playerRowsText[i].GetComponentInChildren <TMP_Text>().text = joinGame.team[i].userName;
                GameManager.Inst.Lobby_id = joinGame.team[i].lobby_id;
                string roleToSet          = "friend";

                if (joinGame.team[i].role == "admin")
                {
                    roleToSet = "admin";
                }

                if (joinGame.team[i].deviceId == SystemInfo.deviceUniqueIdentifier && joinGame.team[i].role == "friend")
                {
                    roleToSet = "you";
                }

                playerRowsText[i].transform.GetChild(2).gameObject.SetActive(false);
                playerRowsText[i].transform.GetChild(1).gameObject.SetActive(true);
                playerRowsText[i].transform.GetChild(1).gameObject.GetComponent <TMP_Text>().text = roleToSet;

                Dictionary <string, Dictionary <string, string> > playerDetails = new Dictionary <string, Dictionary <string, string> >();

                Dictionary <string, string> obj1 = new Dictionary <string, string>();
                obj1.Add((i + 1).ToString(), (i + 1).ToString());
                playerDetails.Add((i + 1).ToString(), obj1);
                PlayerDetails details = new PlayerDetails();

                print("playerJoinedRoom joinGame.team.Length" + joinGame.team.Length);

                details.allUsers = new PlayerData[joinGame.team.Length];

                int j = 0;

                foreach (string key in playerDetails.Keys)
                {
                    Debug.Log("KEY: " + key);
                    foreach (string innerKey in playerDetails[key].Keys)
                    {
                        //Debug.Log(innerKey + " INNER VALUE: " + playerDetails[key][innerKey]);
                        PlayerData data = new PlayerData();
                        data.name       = key;
                        data.type       = innerKey;
                        data.team       = playerDetails[key][innerKey];
                        print("playerJoinedRoom >>>>>>>>>>>>>>>>>>" + innerKey);
                        Debug.Log("playerJoinedRoom ♥ KEY: " + key);
                        if (innerKey != "none" && j <= joinGame.team.Length)
                        {
                            switch (key)
                            {
                            case "1":
                                data.color          = "red";
                                details.allUsers[j] = data;
                                break;

                            case "2":
                                data.color          = "yellow";
                                details.allUsers[j] = data;
                                break;

                            case "3":
                                data.color          = "green";
                                details.allUsers[j] = data;
                                break;

                            case "4":
                                data.color          = "blue";
                                details.allUsers[j] = data;
                                break;
                            }
                            if (j != joinGame.team.Length)
                            {
                                j++;
                                print("j " + j);
                            }
                        }
                    }
                }
                print("♥♥♥" + details.allUsers[j]);
                PlayerPrefs.SetString("singlePlayerGame", JsonUtility.ToJson(details));
            }
            // here timer
            //timer = 15;
            //InvokeRepeating("Starttimer", 1f, 1f);
            //SceneManager.LoadScene("MultiPlayerGamePlayScene");

            GameObject.Find("StartButtonText").GetComponent <TMP_Text>().text = "You can Start Game";
        });

        socketIOComponent.On("playerLeftGame", (SocketIOEvent obj) =>
        {
            JoinGame joinGame = JsonUtility.FromJson <JoinGame>(obj.data.ToString());
            Debug.Log("obj: " + joinGame.status);

            //set joined players to rows
            for (int i = joinGame.team.Length; i < playerRowsText.Length; i++)
            {
                playerRowsText[i].GetComponentInChildren <TMP_Text>().text = "add friend";
                GameManager.Inst.isNotYetJoin = false;

                playerRowsText[i].transform.GetChild(2).gameObject.SetActive(true);
                playerRowsText[i].transform.GetChild(1).gameObject.SetActive(false);
            }
        });

        //make socket not destroy
        //DontDestroyOnLoad(socketIOComponent);

        //get code from server
        //GetCodeFromServer();      from here to Awake top
    }
        public void Use(int characterIndex)
        {
            var validation = new CharacterValidation()
            {
                Player = Player
            };

            CharacterValidationResult validationResult;

            validationResult = validation.ValidateCharacterIndex(characterIndex);

            if (!CanValidateNext(validationResult))
            {
                return;
            }

            validationResult = validation.ValidateEmptyCharacterSelection(characterIndex);

            // Quando o slot de personagem está vazio, muda o AlertType para Connection.
            if (validationResult.AlertMessageType == AlertMessageType.None)
            {
                validationResult.AlertMessageType = AlertMessageType.Connection;
                validationResult.MenuResetType    = MenuResetType.Login;
                validationResult.Disconnect       = true;

                // Realiza a desconexão pois é impossível utilizar um personagem que não existe.
                if (!CanValidateNext(validationResult))
                {
                    return;
                }
            }

            var character = Player.CharacterSelection[characterIndex];

            if (character.CharacterId > 0)
            {
                Player.CharacterId = character.CharacterId;

                // Quando um personagem pendente para exclusão é usado. A requisição é cancelada.
                var cancelRequest = false;

                if (Player.CharacterSelection[characterIndex].PendingExclusion)
                {
                    Global.DeleteRequest.CancelDelete(character.CharacterId);
                    cancelRequest = true;
                }

                var characters = new CharacterDatabase(Player);
                characters.LoadCharacter(cancelRequest);
                characters.Close();

                Global.WriteLog(LogType.Player, $"Loaded characters from {Player.Username}", LogColor.Green);

                var game = new JoinGame()
                {
                    Player = Player
                };

                game.Join();
            }
        }
Beispiel #15
0
    //will send code to server and will fetch team for same (not used)
    IEnumerator CheckCodeAndJoin()
    {
        myGameCode = enterCodeField.GetComponent <TMP_InputField>().text;

        Player player = new Player();

        string apiUrl = ApiUtil.BASE_URL + "checkCode/" + myGameCode + "/" + player.GetUserName() + "/" + SystemInfo.deviceUniqueIdentifier;

        UnityWebRequest www = UnityWebRequest.Get(apiUrl);

        yield return(www.SendWebRequest());      // hold for API response

        if (www.isNetworkError || www.isHttpError)
        {
            Debug.Log(www.error);
        }
        else
        {
            string jsonString = www.downloadHandler.text;
            Debug.Log("CHECKING 11: " + jsonString);
            JoinGame joinGame = JsonUtility.FromJson <JoinGame>(jsonString);

            if (joinGame.status == true)
            {
                joinedTeam = true;

                enterCodeField.GetComponent <TMP_InputField>().interactable = false;

                //set joined players to rows
                for (int i = 0; i < joinGame.team.Length; i++)
                {
                    playerRowsText[i].GetComponentInChildren <TMP_Text>().text = joinGame.team[i].userName;

                    string roleToSet = "friend";

                    if (joinGame.team[i].role == "admin")
                    {
                        roleToSet = "admin";
                    }

                    if (joinGame.team[i].deviceId == SystemInfo.deviceUniqueIdentifier && joinGame.team[i].role == "friend")
                    {
                        roleToSet = "you";
                    }

                    playerRowsText[i].transform.GetChild(1).gameObject.SetActive(true);
                    playerRowsText[i].transform.GetChild(1).gameObject.GetComponent <TMP_Text>().text = roleToSet;
                }

                //show player showing section and title first
                foreach (GameObject game in playerRows)
                {
                    game.SetActive(true);
                }

                StartCoroutine(AnimateRows(0));
            }
            else
            {
                //if api sends error, show error panel
                isErrorVisible = true;
                errorPanel.SetActive(true);
                errorPanel.GetComponent <Animator>().Play("ErrorAnimationIn");
                errorText.text = joinGame.message;
            }
        }
    }
Beispiel #16
0
 public IEnumerable <IEvent> On(JoinGame command)
 {
     yield return(new Gamejoined(command.ID, command.AccountID));
 }
        public void CreateEncodingSamples()
        {
            StreamWriter writer = new StreamWriter("MessageSamples.txt");

            MessageNumber msgNumber          = MessageNumber.Create(100, 120);
            MessageNumber conversationNumber = MessageNumber.Create(200, 240);
            AgentInfo     agentInfo          = new AgentInfo(10, AgentInfo.PossibleAgentType.BrilliantStudent, new Common.EndPoint("129.123.5.10:1234"))
            {
                AgentStatus = AgentInfo.PossibleAgentStatus.InGame,
                ANumber     = "A00001",
                FirstName   = "Joe",
                LastName    = "Jones",
                Location    = new FieldLocation(10, 20),
                Points      = 100,
                Strength    = 200,
                Speed       = 1.2
            };


            AckNak ackNak = new AckNak(Reply.PossibleStatus.Success, agentInfo, "Test Message")
            {
                MessageNr      = msgNumber,
                ConversationId = conversationNumber,
                IntResult      = 99,
                Note           = "Test Note"
            };

            writer.WriteLine("AckNak");
            writer.WriteLine("\tMessageNr={0}", ackNak.MessageNr.ToString());
            writer.WriteLine("\tConversationId={0}", ackNak.ConversationId.ToString());
            writer.WriteLine("\tReplyType={0}", ackNak.ReplyType);
            writer.WriteLine("\tAckNak Status={0}", ackNak.Status);
            writer.WriteLine("\tAgent Info:");
            writer.WriteLine("\t\tId={0}", agentInfo.Id);
            writer.WriteLine("\t\tAgentStatus={0}", agentInfo.AgentStatus);
            writer.WriteLine("\t\tANumber={0}", agentInfo.ANumber);
            writer.WriteLine("\t\tFirstName={0}", agentInfo.FirstName);
            writer.WriteLine("\t\tLastName={0}", agentInfo.LastName);
            writer.WriteLine("\t\tLocation={0}", agentInfo.Location.ToString());
            writer.WriteLine("\t\tPoints={0}", agentInfo.Points);
            writer.WriteLine("\t\tStrength={0}", agentInfo.Strength);
            writer.WriteLine("\t\tSpeed={0}", agentInfo.Speed);

            ByteList byteList = new ByteList();

            ackNak.Encode(byteList);

            writer.WriteLine("");
            writer.WriteLine("Encoding:");
            writer.WriteLine(byteList.CreateLogString());
            writer.WriteLine("");
            writer.WriteLine("------------------------------------");
            writer.WriteLine("");

            JoinGame joinGame = new JoinGame(20, agentInfo)
            {
                MessageNr      = msgNumber,
                ConversationId = conversationNumber,
            };

            writer.WriteLine("JoinGame");
            writer.WriteLine("\tMessageNr={0}", joinGame.MessageNr.ToString());
            writer.WriteLine("\tConversationId={0}", joinGame.ConversationId.ToString());
            writer.WriteLine("\tGameId={0}", joinGame.GameId);
            writer.WriteLine("\tAgent Info:");
            writer.WriteLine("\t\tId={0}", agentInfo.Id);
            writer.WriteLine("\t\tAgentStatus={0}", agentInfo.AgentStatus);
            writer.WriteLine("\t\tANumber={0}", agentInfo.ANumber);
            writer.WriteLine("\t\tFirstName={0}", agentInfo.FirstName);
            writer.WriteLine("\t\tLastName={0}", agentInfo.LastName);
            writer.WriteLine("\t\tLocation={0}", agentInfo.Location.ToString());
            writer.WriteLine("\t\tPoints={0}", agentInfo.Points);
            writer.WriteLine("\t\tStrength={0}", agentInfo.Strength);
            writer.WriteLine("\t\tSpeed={0}", agentInfo.Speed);

            byteList = new ByteList();
            joinGame.Encode(byteList);

            writer.WriteLine("");
            writer.WriteLine("Encoding:");
            writer.WriteLine(byteList.CreateLogString());
            writer.WriteLine("");
            writer.WriteLine("------------------------------------");
            writer.WriteLine("");

            // TODO: All of the other message types
        }