示例#1
0
        /// <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);
        }
示例#2
0
        /// <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();
            }
        }