Beispiel #1
0
    public static void Disconnect(ServerClient disconnectedClient)
    {
        //Session manager - UNTESTED
        try
        {
            UserSession ses = new UserSession()
            {
                UserID = disconnectedClient.clientName, InGame = false, Request = SessionRequest.SetStatus
            };
            byte[] data = TCPHelper.MessageBytes(ses);
            Server.SessionClient.GetStream().Write(data, 0, data.Length);
        }
        catch
        {
        }

        ServerActor disconnectedActor = null;

        foreach (ServerActor actor in Players)
        {
            if (actor.Client == disconnectedClient)
            {
                disconnectedActor = actor;
                SendDisconnectNotification(disconnectedActor.PlayerID);
            }
        }
        if (disconnectedActor != null)
        {
            //Gem spillerens state
            List <PlayerDataModel> saveStates = new List <PlayerDataModel>();
            saveStates.Add(new PlayerDataModel()
            {
                PlayerDataRequest = PlayerDataRequest.Update,
                Online            = false,
                PositionX         = disconnectedActor.startingX,
                PositionY         = disconnectedActor.startingY,
                UserID            = disconnectedActor.Client.clientName,
                ResponseExpected  = false
            });
            byte[] data = TCPHelper.MessageBytesNewton(saveStates);
            databaseClient.GetStream().Write(data, 0, data.Length);

            //Fjern fra spillet
            MapGrid.grid[disconnectedActor.startingX, disconnectedActor.startingY].GetComponent <Cell>().UnoccupyCell();
            ChangedCells.Add(Server.MapGrid.grid[disconnectedActor.startingX, disconnectedActor.startingY].GetComponent <Cell>(), 0);
            Players.Remove(disconnectedActor);
            GameObject.Destroy(disconnectedActor.gameObject);
            Clients.Remove(disconnectedClient);
        }
    }
Beispiel #2
0
    private static void SaveTick(object sender, ElapsedEventArgs e)
    {
        if (Players.Count > 0)
        {
            List <PlayerDataModel> characterSaves = new List <PlayerDataModel>();
            lock (Players)
                foreach (var item in Players)
                {
                    characterSaves.Add(new PlayerDataModel()
                    {
                        PlayerDataRequest = PlayerDataRequest.Update,
                        Online            = true,
                        PositionX         = item.startingX,
                        PositionY         = item.startingY,
                        UserID            = item.Client.clientName,
                        ResponseExpected  = false
                    });
                }

            byte[] data = TCPHelper.MessageBytesNewton(characterSaves);
            databaseClient.GetStream().Write(data, 0, data.Length);
        }
    }
Beispiel #3
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);
    }
Beispiel #4
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);
    }