private async Task <bool> Handshake(CancellationToken cancellationToken)
        {
            var handshake = await Socket.ReceiveObjectAsync <ClientHandshake>(cancellationToken);

            if (handshake.OperationCode != (int)OperationCodes.SessionHandshake)
            {
                await Socket.SendObjectAsync(new CloseSession(4402, "Invalid or Missing Handshake"), cancellationToken);

                await Socket.EnsureClosedAsync(WebSocketCloseStatus.ProtocolError, "Invalid or Missing Handshake",
                                               cancellationToken);

                return(false);
            }

            await Socket.SendObjectAsync(new ServerHandshake(new ServerHandshake.Content
            {
                SessionId = SessionId,
                ServerInstanceId = Guid.Empty,
                ServerInstanceName = Environment.MachineName
            }), cancellationToken);

            SessionState = WebSocketSessionState.SessionEstablished;
            return(true);
        }
 public override Task AcceptAsync(WebSocket socket, CancellationToken cancellationToken)
 {
     SessionState = WebSocketSessionState.ConnectionOpen;
     return(base.AcceptAsync(socket, cancellationToken));
 }