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