public override void OnCreated(ILoading loading) { //asks the server about who's turn is it right now ClientData.loadData(); TurnData.loadTurnData(); if (ClientData.hostIP != "0.0.0.0") { try { HostConfigData.fetchRemoteData(ClientData.name, ClientData.code, ClientData.hostIP); if (HostConfigData.playerTurnName == ClientData.name && !TurnData.saveFetched) { PseudoMultiplayer.receiveSaveFromServer(); } } catch { ClientData.connectedToHost = false; ClientData.saveData(); } if (HostConfigData.playerTurnName == ClientData.name) { } } }
public static void receiveSaveFromServer() { var clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); clientSocket.Connect(ClientData.hostIP, Message.PORT); var message = new PMCommunication.Message(ClientData.name, ClientData.code, PMCommunication.MessageStrings.saveToClient); clientSocket.Send(message.messageAsByteArray()); using (FileStream output = File.Create(ClientData.savePath + ClientData.SAVE_FILE_NAME + "_received.crp")) { // read the file in chunks of 1KB byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = clientSocket.Receive(buffer)) > 0) { output.Write(buffer, 0, bytesRead); } } TurnData.cycle = 0; TurnData.tick = 0; TurnData.saveFetched = true; TurnData.saveTurnData(); //view.AddUIComponent(); return; }
//send essential data to server in this funtion(the most current saveGame and maybe in future some statistics collected) public static void sendSaveToServer(Object source, ElapsedEventArgs eventArgs) { string pathAndFileName = ClientData.savePath + ClientData.SAVE_FILE_NAME + ".crp"; if (!File.Exists(pathAndFileName)) { DebugOutputPanel.AddMessage(ColossalFramework.Plugins.PluginManager.MessageType.Error, " Savefile did not exist!"); throw new FileNotFoundException("File " + pathAndFileName + " was not found!"); } //DebugOutputPanel.AddMessage(PluginManager.MessageType.Message, "SendDataToServer()"); byte[] responseByte = new byte[1]; var clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); clientSocket.Connect(ClientData.hostIP, Message.PORT); clientSocket.Send(new Message(ClientData.name, ClientData.code, MessageStrings.saveToHost).messageAsByteArray()); clientSocket.Receive(responseByte); if (responseByte[0] != (byte)PMCommunication.Responses.ReceivingSave) { throw new Exception("Host was not willing to receive a savefile for unknown reason"); } clientSocket.SendFile(pathAndFileName); clientSocket.Close(); //DebugOutputPanel.AddMessage(PluginManager.MessageType.Message, "Save file sent now"); TurnData.nullifyTurnData(); }
public override void OnLevelLoaded(LoadMode mode) { //DebugOutputPanel.AddMessage(PluginManager.MessageType.Message, "OnLevelLoaded()"); TurnData.loadTurnData(); ClientData.loadData(); //DebugOutputPanel.AddMessage(PluginManager.MessageType.Message, ClientData.hostIP + "turnDuration: " + HostConfigData.turnDuration + " turn: " +HostConfigData.turn + " player name: " + HostConfigData.playerTurnName ); if (ClientData.hostIP == "0.0.0.0") { PMThreading.PMActive = false; return; } HostConfigData.fetchRemoteData(ClientData.name, ClientData.code, ClientData.hostIP); if (HostConfigData.playerTurnName == ClientData.name || HostConfigData.turn == 0) { //DebugOutputPanel.AddMessage(PluginManager.MessageType.Message, "PMActive == true"); PMThreading.PMActive = true; } else { //DebugOutputPanel.AddMessage(PluginManager.MessageType.Message, "PMActive == false"); PMThreading.PMActive = false; } }
public void askTurn(UIHelperBase group) { ClientData.loadData(); TurnData.loadTurnData(); try { HostConfigData.fetchRemoteData(ClientData.name, ClientData.code, ClientData.hostIP); } catch (Exception e) { group.AddTextfield("No Response from server!", e.Message, (value) => doNothing()); ClientData.connectedToHost = false; ClientData.saveData(); return; } if (HostConfigData.playerTurnName == ClientData.name) { if (HostConfigData.playerTurnName == ClientData.name && !TurnData.saveFetched) { PseudoMultiplayer.receiveSaveFromServer(); group.AddTextfield("Response from server: ", "Yes it is. An up to date save was retrieved from host into save name: " + ClientData.SAVE_FILE_NAME + "_received.crp", (value) => doNothing()); } else { group.AddTextfield("Response from server: ", "Yes it is.", (value) => doNothing()); } } else if (HostConfigData.playerTurnName == "First turn") { group.AddTextfield("Response from server:", "As it is the first turn it is up to the players to decide.", (value) => doNothing()); } else { group.AddTextfield("Response from server: ", "Nope. It is player " + HostConfigData.playerTurnName + "'s turn.", (value) => doNothing()); } }