54 lines
2.0 KiB
C#
54 lines
2.0 KiB
C#
|
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<RegistrationResponse> 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(':'))[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("");
|
|||
|
}
|
|||
|
}));
|
|||
|
}
|
|||
|
}
|
|||
|
}
|