private void HandleLoginCommand(LoginCommand loginCommand) { if (_connection.ConnectionState != ConnectionState.Initiated) { _connection.Reply("login badcommand"); return; } if (_connectionRegistry.IsLoggedIn(loginCommand.DeviceId)) { _connection.Reply("login badcommand"); return; } if ( !_deviceAuthenticator.Authenticate(new AuthenticationParameters(loginCommand.DeviceId, loginCommand.ApiKey))) { Logger.Error("Login unauthorized. Device: {0}", loginCommand.DeviceId); _connection.Reply("login unauthorized"); return; } var numericDeviceId = _deviceOperations.Get(loginCommand.DeviceId).NumericId; _connectionRegistry.PromoteToLoggedInConnection(_connection, loginCommand.DeviceId, numericDeviceId); _connection.Reply("login ack"); _connection.Heartbeat(); }
public void RegisterInitiatedConnection(IPersistentConnection connection) { lock (_lock) { connection.ConnectionState = ConnectionState.Initiated; connection.Heartbeat(); InitiatedConnections.Add(connection.ConnectionId, connection); } }
public void PromoteToLoggedInConnection(IPersistentConnection connection, string deviceId, long numericDeviceId) { if (deviceId == null) { throw new ArgumentNullException(nameof(deviceId)); } lock (_lock) { InitiatedConnections.Remove(connection.ConnectionId); connection.DeviceId = deviceId; connection.NumericDeviceId = numericDeviceId; connection.ConnectionState = ConnectionState.LoggedIn; connection.Heartbeat(); LoggedInConnections.Add(connection.DeviceId, connection); } }