示例#1
0
        /// <summary>
        /// Execute the command.
        /// </summary>
        public override ServerResponse Execute
        (
            ClientQuery clientQuery
        )
        {
            Sure.NotNull(clientQuery, nameof(clientQuery));

            ServerResponse result = base.Execute(clientQuery);

            result.GetReturnCode();
            if (result.ReturnCode == 0)
            {
                int expected = result.RequireInt32();
                FoundCount = expected;
                List <FoundItem> foundList = FoundItem
                                             .ParseServerResponse(result, expected)
                                             .ThrowIfNull("Found");
                Found = foundList;

                _FetchRemaining(result, expected);

                if (!_subCommand &&
                    FirstRecord == 1 &&
                    NumberOfRecords == 0)
                {
                    Debug.Assert
                    (
                        foundList.Count == expected,
                        "Found.Count != expected in total"
                    );
                }
            }

            return(result);
        }
示例#2
0
        public static MarcRecord ParseResponseForReadRecord
        (
            [NotNull] ServerResponse response,
            [NotNull] MarcRecord record
        )
        {
            Sure.NotNull(response, "response");
            Sure.NotNull(record, "record");

            try
            {
                record.Fields.BeginUpdate();

                ParseMfnStatusVersion
                (
                    response.RequireUtfString(),
                    response.RequireUtfString(),
                    record
                );

                string line;
                while (true)
                {
                    line = response.GetUtfString();
                    if (string.IsNullOrEmpty(line))
                    {
                        break;
                    }
                    if (line == "#")
                    {
                        break;
                    }
                    RecordField field = ParseLine(line);
                    if (field.Tag > 0)
                    {
                        record.Fields.Add(field);
                    }
                }
                if (line == "#")
                {
                    int returnCode = response.RequireInt32();
                    if (returnCode >= 0)
                    {
                        line = response.RequireUtfString();
                        line = IrbisText.IrbisToWindows(line);
                        record.Description = line;
                    }
                }
            }
            finally
            {
                record.Fields.EndUpdate();
                record.Modified = false;
            }

            return(record);
        }
示例#3
0
        public static ServerStat Parse
        (
            [NotNull] ServerResponse response
        )
        {
            ServerStat result = new ServerStat
            {
                TotalCommandCount = response.RequireInt32(),
                ClientCount       = response.RequireInt32(),
                Unknown           = response.RequireInt32()
            };

            List <ClientInfo> clients = new List <ClientInfo>();

            while (true)
            {
                string number    = response.GetAnsiString();
                string ipAddress = response.GetAnsiString();
                if (string.IsNullOrEmpty(number) ||
                    string.IsNullOrEmpty(ipAddress))
                {
                    break;
                }

                ClientInfo client = new ClientInfo
                {
                    Number        = number,
                    IPAddress     = ipAddress,
                    Port          = response.RequireAnsiString(),
                    Name          = response.RequireAnsiString(),
                    ID            = response.RequireAnsiString(),
                    Workstation   = response.RequireAnsiString(),
                    Registered    = response.RequireAnsiString(),
                    Acknowledged  = response.RequireAnsiString(),
                    LastCommand   = response.RequireAnsiString(),
                    CommandNumber = response.RequireAnsiString()
                };
                clients.Add(client);
            }
            result.RunningClients = clients.ToArray();

            return(result);
        }