/// <summary> /// Close the connection with the client /// Call 'connectionClosed' of your application that extends the DKService when the connection is closed successfully /// </summary> public void Close() { // one thread per time, prevent two or more thread call Close() in same time and generate duplicate notifications lock (ThreadLocker.sync("Client::Close")) { if (!Connected) { return; } try { // sets connected false Connected = false; // remove the client from signal ClientSignal.Remove(Id); // close the socket _client.Close(); } catch (Exception ex) { Log.Write("Error when disconnect client " + ex.Message + " - " + ex.StackTrace, LogLevel.ERROR); } finally { // if the socket have a type and defined, notification the application is desconnected if (socketLayer != SocketLayer.undefined) { Application.send(ApplicationSend.connectionClosed, new object[] { this }); socketLayer = SocketLayer.undefined; } } } }