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); } }
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); } }
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); }
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); }