Ejemplo n.º 1
0
    private static void PackageTick(object sender, ElapsedEventArgs e)
    {
        lock (Server.ChangedCells)
        {
            List <PositionDataPackage> positionData = PositionData();

            for (int i = 0; i < Players.Count; i++)
            {
                List <GridDataPackage> gridData = GridData(Players[i].PlayerID);

                byte[] package = PackageToByte(new DataCollectionPackage()
                {
                    PositionDataPackages = positionData, GridDataPackages = gridData
                });
                if (TCPHelper.Connected(Players[i].Client.tcpClient))
                {
                    Players[i].Client.SendToClient(package);
                }
                else
                {
                    disconnectedClients.Add(Players[i].Client);
                }
            }
            ChangedCells.Clear();
        }

        foreach (var item in disconnectedClients)
        {
            Disconnect(item);
        }
        disconnectedClients.Clear();
    }
Ejemplo n.º 2
0
    private bool RequestCharacterCreation(TcpClient client)
    {
        List <PlayerDataModel> requests = new List <PlayerDataModel>();
        PlayerDataModel        model    = new PlayerDataModel()
        {
            PlayerDataRequest = PlayerDataRequest.Create,
            UserID            = clientName
        };

        requests.Add(model);
        //Sent to database
        byte[] data = TCPHelper.MessageBytesNewton(requests);
        client.GetStream().Write(data, 0, data.Length);

        PlayerDataModel responseModel = null;
        //Wait for response
        bool done = false;

        while (!done)
        {
            if (TCPHelper.Connected(client))
            {
                if (client.GetStream().DataAvailable)
                {
                    Debug.Log("INCOMMING DATA");
                    string responseString = TCPHelper.ReadStreamOnce(client.GetStream());
                    responseModel = JsonConvert.DeserializeObject <PlayerDataModel>(responseString);
                    done          = true;
                }
            }
            else
            {
                done = true;
            }

            Thread.Sleep(16);
        }

        switch (responseModel.PlayerDataStatus)
        {
        case PlayerDataStatus.None:
            break;

        case PlayerDataStatus.Success:
            return(true);

        case PlayerDataStatus.ConnectionFailed:
            break;

        case PlayerDataStatus.AlreadyExists:
            break;

        case PlayerDataStatus.DoesNotExist:
            break;

        default:
            break;
        }

        return(false);
    }
Ejemplo n.º 3
0
    private PlayerDataModel GetCharacterFromDB()
    {
        TcpClient client = new TcpClient(GlobalVariables.LOADBALANCER_IP, GlobalVariables.GAME_DATABASE_LOADBALANCER_PORT);
        //TcpClient client = new TcpClient("127.0.0.1", GlobalVariables.GAME_DATABASE_LOADBALANCER_PORT);

        List <PlayerDataModel> requests = new List <PlayerDataModel>();
        PlayerDataModel        model    = new PlayerDataModel()
        {
            PlayerDataRequest = PlayerDataRequest.Read,
            UserID            = clientName
        };

        requests.Add(model);
        //Sent to database
        byte[] data = TCPHelper.MessageBytesNewton(requests);

        client.GetStream().Write(data, 0, data.Length);

        PlayerDataModel responseModel = null;
        //Wait for response
        bool done = false;

        while (!done)
        {
            if (TCPHelper.Connected(client))
            {
                if (client.GetStream().DataAvailable)
                {
                    Debug.Log("INCOMMING DATA");
                    string responseString = TCPHelper.ReadStreamOnce(client.GetStream());
                    responseModel = JsonConvert.DeserializeObject <PlayerDataModel>(responseString);
                    done          = true;
                }
            }
            else
            {
                done = true;
            }

            Thread.Sleep(16);
        }
        //When response have been received, check the response
        switch (responseModel.PlayerDataStatus)
        {
        case PlayerDataStatus.None:
            break;

        case PlayerDataStatus.Success:
            return(responseModel);

        case PlayerDataStatus.ConnectionFailed:
            break;

        case PlayerDataStatus.AlreadyExists:
            break;

        case PlayerDataStatus.DoesNotExist:
        {
            if (RequestCharacterCreation(client))
            {
                return(new PlayerDataModel()
                    {
                        PlayerDataStatus = PlayerDataStatus.DoesNotExist
                    });
            }
        }
        break;

        default:
            break;
        }
        return(null);
    }