private string RequestHandler(IPAddress address, SIMCommon.Requests.InitConnection request)
        {
            SIMCommon.Responses.InitConnection response;
            if (!this.Clients.ContainsKey(address))
            {
                var newClient = new Client(address, request.PublicKey);
                this.Clients.Add(address, newClient);
                response = new SIMCommon.Responses.InitConnection(true, newClient.PGPClient.PublicKey, this.Config.LeaseDuration);
            }
            else
            {
                response = new SIMCommon.Responses.InitConnection(false);
            }

            return(JsonConvert.SerializeObject(response));
        }
        public bool InitConnection()
        {
            try
            {
                var request      = new SIMCommon.Requests.InitConnection(this.PGPClient.PublicKey);
                var response     = TcpClient.Send(this.Address.ToString(), JsonConvert.SerializeObject(request));
                var baseResponse = JsonConvert.DeserializeObject <SIMCommon.Responses.Base>(response);
                if (baseResponse.ResponseType == typeof(SIMCommon.Responses.InitConnection))
                {
                    var convertedResponse = JsonConvert.DeserializeObject <SIMCommon.Responses.InitConnection>(response);
                    this.ServerPublicKey = convertedResponse.PublicKey;
                    this.LeaseDuration   = convertedResponse.LeaseDuration;
                    //this.LeaseMonitor.Start();
                    return(true);
                }

                return(false);
            }
            catch (Exception e) when(e is TcpClient.ConnectionFailiureException || e is Newtonsoft.Json.JsonReaderException)
            {
                return(false);
            }
        }