示例#1
0
    // Start is called before the first frame update
    void Start()
    {
        string[] args  = Environment.GetCommandLineArgs();
        string   token = args[1];

        //string token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJKV1RQYXlsb2FkIjoie1wiU2VydmVyc0luZm9cIjp7XCJTZXJ2ZXJzXCI6W119LFwiVXNlcklEXCI6XCJKZW5zXCJ9IiwibmJmIjoxNTcwMTE5MjkwLCJleHAiOjE1NzA1NTEyOTAsImlhdCI6MTU3MDExOTI5MH0.L31Fkm8kaOpVoglhgEv_GvCAD6b1ep0h56OstUnF0d4";

        JwtSecurityToken tokenSent = new JwtSecurityToken(token);
        JWTPayload       payload   = JWTManager.GetModelFromToken <JWTPayload>(token);

        clientName = payload.UserID;

        chatSystem = gameObject.GetComponent <ChatSystem>();

        int port = 13001;

        //string IpAdress = "10.131.67.203";

        client = new TcpClient(Globals.MIDDLEWARE_IP, port);
        //client = new TcpClient("192.168.10.135", port);

        userName = ((IPEndPoint)client.Client.LocalEndPoint).Address.ToString();

        //client.NoDelay = true;
        Debug.Log("Connected?");


        StartCoroutine(ListenToServer());
    }
示例#2
0
    /// <summary>
    /// Starts an endless while-loop, where the tcp client listens for new messages from the endpoint
    /// </summary>
    /// <returns></returns>
    public IEnumerator ListenForMessages()
    {
        StreamReader reader = new StreamReader(networkStream);

        while (!isDisconnecting)
        {
            if (Connected)
            {
                if (networkStream.DataAvailable)
                {
                    string      msg        = reader.ReadLine();
                    string[]    msgSplit   = msg.Split(Server.MESSAGE_TYPE_INDICATOR);
                    MessageType type       = (MessageType)Int32.Parse(msgSplit[0]);
                    string      newMessage = msgSplit[1];

                    switch (type)
                    {
                    case MessageType.Validate:
                        if (ValidateToken(newMessage))
                        {
                            //For sjov random placering
                            JwtSecurityToken token   = new JwtSecurityToken(newMessage);
                            JWTPayload       payload = JWTManager.GetModelFromToken <JWTPayload>(token);
                            clientName = payload.UserID;

                            //Tjek om spilleren allerede er ingame
                            foreach (var item in Server.Clients)
                            {
                                if (item.clientName == clientName)
                                {
                                    isDisconnecting = true;
                                    DisconnectClient();
                                }
                            }

                            //Tjek om brugeren har en karakter i databasen
                            PlayerDataModel character = GetCharacterFromDB();

                            if (character != null)
                            {
                                switch (character.PlayerDataStatus)
                                {
                                case PlayerDataStatus.Success:
                                {
                                    if (!isDisconnecting)
                                    {
                                        Vector2 index = new Vector2(character.PositionX, character.PositionY);
                                        Server.MapGrid.grid[(int)index.x, (int)index.y].GetComponent <Cell>().OccupyCell(SpawnActor(index, clientName).gameObject);
                                    }
                                }
                                break;

                                case PlayerDataStatus.DoesNotExist:
                                {
                                    if (!isDisconnecting)
                                    {
                                        Vector2 index = new Vector2(UnityEngine.Random.Range(0, Server.MapGrid.gridWidth), UnityEngine.Random.Range(0, Server.MapGrid.gridHeigth));
                                        Server.MapGrid.grid[(int)index.x, (int)index.y].GetComponent <Cell>().OccupyCell(SpawnActor(index, clientName).gameObject);
                                    }
                                }
                                break;

                                default:
                                    break;
                                }
                            }
                            else
                            {
                                isDisconnecting = true;
                                DisconnectClient();
                            }
                        }
                        else
                        {
                            isDisconnecting = true;
                            DisconnectClient();
                        }
                        break;

                    case MessageType.Input:
                        HandleInputMessage(newMessage);
                        break;

                    case MessageType.Disconnect:
                        DisconnectClient();
                        break;

                    case MessageType.Connect:
                        break;

                    case MessageType.ServerTick:
                        break;

                    default:
                        break;
                    }
                }
                yield return(null);
            }
            else
            {
                isDisconnecting = true;
                DisconnectClient();
            }
        }
    }