/// <inheritdoc cref="AbstractCommand.Execute" /> public override ServerResponse Execute ( ClientQuery query ) { Sure.NotNull(query, nameof(query)); Log.Trace("ConnectCommand::Execute"); if (Connection.Connected) { Log.Error ( "ConnectCommand::Execute: " + "already connected" ); throw new IrbisException("Already connected"); } ServerResponse result; while (true) { result = base.Execute(query); Log.Trace ( "ConnectCommand::Execute: returnCode=" + result.ReturnCode ); // CLIENT_ALREADY_EXISTS if (result.ReturnCode == -3337) { IrbisConnection connection = Connection as IrbisConnection; int newId = ReferenceEquals(connection, null) ? Connection.ClientID + 1 : connection.GenerateClientID(); query.ClientID = newId; } else { break; } } if (result.ReturnCode == 0) { ConfirmationInterval = result.RequireInt32(); Configuration = result.RemainingAnsiText(); } ServerVersion = result.ServerVersion; return(result); }
/// <summary> /// Constructor. /// </summary> public ConnectCommand ( [NotNull] IIrbisConnection connection ) : base(connection) { Log.Trace("ConnectCommand::Constructor"); // TODO fix it! IrbisConnection nativeConnection = connection as IrbisConnection; if (!ReferenceEquals(nativeConnection, null)) { nativeConnection.GenerateClientID(); nativeConnection.ResetCommandNumber(); } }