Пример #1
0
        public static unsafe bool Request(string api, StringBuilder input, string api_type)
        {
            if (!ServerConnected)
            {
                MessageBox.Show("Небходимо соединиться с сервером", "Предупреждение", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return(false);
            }
            // EQGateRequest =========================================
            EQGateStatus = -1;

            uint temp_DSC;

            temp_DSC = 0;

            temp_DSC = EQGATE_DESCRIPTOR;

            // строка, заканчивающаяся нулевым символом, содержащая имя вызываемой функции.
            if (api == "")
            {
                return(false);
            }

            StringBuilder sb_api = new StringBuilder(7);

            sb_api = sb_api.Append(api);
            sb_api = sb_api.Append("\0");

            // строка, заканчивающаяся нулевым символом, содержащая идентификатор сессии, в рамках которой будет осуществлен вызов функции Equation.
            StringBuilder sb_session_id = new StringBuilder(26);

            sb_session_id = sb_session_id.Append(SessionID);
            sb_session_id = sb_session_id.Append("\0");

            // строка, заканчивающаяся нулевым символом, содержащая входные параметры функции Equation.
            StringBuilder sb_input = new StringBuilder(2);

            sb_input = input;
            sb_input = sb_input.Append("\0");
            //sb_input = input;
            //        user = 10
            //        Pass =10
            //        мнемоника блока = 3 - имя блока

            // указатель на область памяти, куда будет скопирована информация об ошибках и/или предупреждениях, возникших во время выполнения функции Equation (см. примечание).
            StringBuilder sb_ksm = new StringBuilder(EQGATE_KSM_SIZE);
            // указатель на область памяти, куда будет принята строка, содержащая выходные параметры функции Equation.
            StringBuilder sb_output = new StringBuilder(EQGATE_OUTPUT_SIZE);
            // указатель на область памяти, где содержится управляющая информация для функций, поддерживающих возврат набора (переменной длины) записей (см. примечание). Данный параметр содержит как входные, так и выходные параметры (используется как для чтения, так и для записи).

            int           msc_size = 0;
            StringBuilder sb_mcs   = new StringBuilder(0);

            sb_mcs = null;
            if (api_type == "list")
            {
                msc_size = EQGATE_MCS_SIZE;
                sb_mcs   = new StringBuilder(msc_size);
                sb_mcs   = sb_mcs.Append(mcs_QueryType.ToString());                                        //
                sb_mcs   = sb_mcs.Append(EQGateDLL.InsertZero(Convert.ToString(mcs_RecordsRequested), 4)); //
                sb_mcs   = sb_mcs.Append("00000");                                                         //
                sb_mcs   = sb_mcs.Append("\0");
            }

            try
            {
                EQGateStatus = EqGate.EQGateDLL.EQGateRequest(
                    &temp_DSC,
                    sb_api,
                    sb_session_id,
                    sb_input,
                    sb_ksm,
                    sb_ksm.Capacity,    // размер области памяти в байтах, на которую указывает параметр ksm.
                    sb_output,
                    sb_output.Capacity, // размер области памяти в байтах, на которую указывает параметр output.
                    sb_mcs,             // указатель на область памяти, где содержится управляющая информация для функций, поддерживающих возврат набора (переменной длины) записей (см. примечание). Данный параметр содержит как входные, так и выходные параметры (используется как для чтения, так и для записи).
                    msc_size            // размер области памяти в байтах, на которую указывает параметр mcs.
                    );;
            }
            catch
            {
                MessageBox.Show("Error call [EQGateRequest]", "Error EQGateRequest",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            Get_ksm_array(sb_ksm);
            if (EQGateStatus != 0)
            {
                //MessageBox.Show(GetEQGateStatus(EQGateStatus), "EQGateStatus", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return(false);
            }
            RequestOutput = sb_output;
            RequestOutputCurrentLength = 0;

            if (api_type == "list")
            {
                mcs_QueryType        = Convert.ToInt32(sb_mcs.ToString(0, 1));
                mcs_RecordsRequested = Convert.ToInt32(sb_mcs.ToString(1, 4));
                mcs_RecordsReturned  = Convert.ToInt32(sb_mcs.ToString(5, 4));
                mcs_NotFinished      = Convert.ToInt32(sb_mcs.ToString(9, 1));
            }
            return(true);
        }