/// <summary> /// listens for a connection from town control and responds with city acknowledgement message /// </summary> /// <returns> /// none /// </returns> public static void CitySetup() { bool done = false; bool status = false; // we set to true if connection was successful! // Listen for connections on our defined port var listener = new TcpListener(IPAddress.Any, portNum); // Echo we're beginning the listener Console.WriteLine("City server now awaiting TCP connection to Town Control on port " + portNum); listener.Start(); TcpClient client = listener.AcceptTcpClient(); // accept the connection NetworkStream ns = client.GetStream(); // establish a network stream while (!done) { byte[] outgoing_msg = Encoding.ASCII.GetBytes(cityID); // Retrieve and convert // try to send our data try { // Show we received a connection request Console.WriteLine("Incoming Connection...."); ns.Write(outgoing_msg, 0, outgoing_msg.Length); // Show we sent the data Console.WriteLine("Sent city..."); Byte[] data = new Byte[256]; String responseString = string.Empty; Int32 bytes = ns.Read(data, 0, data.Length); Console.WriteLine("Looking for response..."); responseString = System.Text.Encoding.ASCII.GetString(data, 0, bytes); if (!String.IsNullOrEmpty(responseString)) { Console.WriteLine("Success! Received MSG " + responseString); status = true; ContextSwitch.FinishSetup(); break; } } catch (Exception e) { Console.WriteLine(e.ToString()); break; } } // Stop the listener on success ns.Close(); listener.Stop(); }
static void Main(string[] args) { #region Command Arguments // Check for user input for (int i = 0; i < args.Length; i++) { if (args[i] == "--set-unit") { ContextSwitch.SetAsUnit(); } if (args[i] == "--set-town") { ContextSwitch.SetAsTown(); } if (args[i] == "--set-city") { ContextSwitch.SetAsCity(); } if (args[i] == "--get-mode") { Console.WriteLine(ContextSwitch.GetMode()); } if (args[i] == "--tcpscan") { NetworkRW.TCPScan(); } if (args[i] == "--gendb") { SQLHelper.CreateDB(); } if (args[i] == "--refresh-city") { NetworkRW.FindCity(); } } #endregion #region DeviceDefaults // If mode is not already set, then set it by default to unit mode if (!File.Exists("mode")) { ContextSwitch.SetAsDefault(); } // Create our dummy files if (!File.Exists("water") || !File.Exists("sewage") || !File.Exists("power")) { RetrieveData.CreateFiles(); } // Create a setupstat file if (!File.Exists("setupstat")) { ContextSwitch.CreateSetup(); } #endregion #region ModeDependants if (ContextSwitch.GetMode() == 0) // if unit { // We await a connection from the Town Control // by using the TCP Unit Server in Network Read/Write Console.WriteLine("Unit Mode Detected!"); ContextSwitch.FinishSetup(); // Setup can be set to finished NetworkRW.TcpUnitServer(); } if (ContextSwitch.GetMode() == 1) // if town { Console.WriteLine("Town Mode Detected!"); string stat = ContextSwitch.GetSetup(); // if the database doesn't exist, generate it and populate it if (stat == "pending") { Console.WriteLine("Generating Database..."); SQLHelper.CreateDB(); // create the database Console.WriteLine("Scanning Network..."); NetworkRW.TCPScan(); // populate the database Console.WriteLine("Detecting City..."); NetworkRW.FindCity(); // find the city ContextSwitch.FinishSetup(); // finish the setup } // Check setup again stat = ContextSwitch.GetSetup(); if (stat == "done") { // Initiate the TCP town client Console.WriteLine("Starting town client..."); NetworkRW.TcpTownClient(); // When finished, echo the errors to city Console.WriteLine("Sending any errors to city control..."); Console.WriteLine("Successfully sent errors"); } } if (ContextSwitch.GetMode() == 2) // if city { Console.WriteLine("City Mode Detected!"); string stat = ContextSwitch.GetSetup(); // if the error database doesn't exist yet generate it, but do not populate it. if (stat == "pending") { Console.WriteLine("Initializating setup:"); Console.WriteLine("Generating Database..."); SQLHelper.CreateErrorDB(); // create the error database NetworkRW.CitySetup(); // run the city setup } //check setup again stat = ContextSwitch.GetSetup(); if (stat == "done") { // just run the city server NetworkRW.CityServer(); } } if (ContextSwitch.GetMode() == 3) // DEBUG MODE { Console.WriteLine("DEBUG MODE Detected!"); SQLHelper.CreateErrorDB(); } #endregion }