Example #1
0
    public ILog Disconnect()
    {
        if (socket == null)
        {
            return(new Error("[TCP] Client cannot disconnect without a socket defined"));
        }
        if (!socket.Connected)
        {
            return(new Error("[TCP] Client tried to disconnect but socket was already closed"));
        }
        if (clientState.Connecting)
        {
            return(new Error("[TCP] Client cannot disconnect while connecting"));
        }
        if (clientState.Disconnecting)
        {
            return(new Error("[TCP] Client already disconnecting"));
        }
        if (clientState.Disconnected)
        {
            return(new Error("[TCP] Client cannot disconnect when already disconnected"));
        }

        clientState.Connected    = false;
        clientState.Disconnected = true;

        socket.Shutdown(SocketShutdown.Both);
        socket.Close();
        socket.Dispose();
        socket = null;
        connectionHandler.HandleDisconnect();

        return(null);
    }