using SafeMobileLib.Registration; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading.Tasks; namespace SafeMobileLib.Helpers { public class RegistrationHelper { public static Int16 TimeoutSeconds = 7; public static String GatewayIP = "127.0.0.1"; public static async Task RegisterGateway(String appServerIP, Int16 registrationPort) { return await (Task.Factory.StartNew(() => { try { TcpClient client = new TcpClient(); IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse(appServerIP), registrationPort); client.Connect(serverEndPoint); NetworkStream clientStream = client.GetStream(); GatewayIP = (client.Client.LocalEndPoint.ToString().Split(":".ToCharArray()))[0]; UTF8Encoding encoding = new UTF8Encoding(); byte[] buffer = encoding.GetBytes("200"); clientStream.Write(buffer, 0, buffer.Length); Utils.WriteLine($"Sent registration request to server {appServerIP}:{registrationPort}, waiting..."); byte[] message = new byte[1024]; //set read timeout to 10s clientStream.ReadTimeout = TimeoutSeconds * 1000; int result = clientStream.Read(message, 0, message.Length); if (result < 1) return new RegistrationResponse(""); String decodedString = encoding.GetString(message).Trim('\0'); return new RegistrationResponse(decodedString); } catch(Exception ex) { Utils.WriteLine("Registration exception: " + ex.ToString(), ConsoleColor.Red); return new RegistrationResponse(""); } })); } } }