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)); }