Ejemplo n.º 1
0
        // ----------------------------------------------------------
        //
        public void procParsing()
        {
            Utility.Utility.LogWrite("procParsing");

            m_read_rawdata.initObj();
            while (m_pool_orderinput_rawdata.pop(ref m_read_rawdata)) // pop from pool list
            {
                Utility.Utility.LogWrite("m_read_rawdata : " + m_read_rawdata);
                // set ref
                ObjOrderInputSerialRawDataBuf buf_obj = m_read_rawdata;
                if (null != buf_obj)
                {
                    // notify
                    sendMyNotify(SerialPortOrderInput.SERIAL_PORT_NOTIFY_WHAT.RAW_DATA_STREAM, buf_obj);

                    // parsing
                    SerialPortOrderInput serial_port = m_read_rawdata.m_caller_serial_port;
                    if (null != serial_port)
                    {
                        ParserOrderInputBase parser = serial_port.getOrderParser();

                        Utility.Utility.LogWrite("procParsing parser : " + parser);

                        if (null != parser) // 파서가 지정되어 있을때만 파싱 요청한다
                        {
                            Utility.Utility.LogWrite("buf_obj.m_data_buf : " + System.Text.Encoding.Default.GetString(buf_obj.m_data_buf));
                            serial_port.saveRawDataToParsing(buf_obj.m_data_buf, 0, buf_obj.m_data_len);
                        }
                    }

                    // reset read object
                    buf_obj.initObj();
                }
            }
        }
Ejemplo n.º 2
0
        // ----------------------------------------------------------
        //
        private void onNotifyOrderInputSerialPort(object _sender, object _what, object _obj)
        {
            Utility.Utility.LogWrite("onNotifyOrderInputSerialPort");

            switch ((SerialPortOrderInput.SERIAL_PORT_NOTIFY_WHAT)_what)
            {
            case SerialPortOrderInput.SERIAL_PORT_NOTIFY_WHAT.RAW_DATA_STREAM:
            {
                Utility.Utility.LogWrite("case SerialPortOrderInput.SERIAL_PORT_NOTIFY_WHAT.RAW_DATA_STREAM:");
                // 받은 데이터를 풀에 저장해 둔다
                SerialPortOrderInput.SerialRawDataBufInfo src = (SerialPortOrderInput.SerialRawDataBufInfo)_obj;
                int src_offset = src.offset;
                int remain_len = src.len;
                while (0 < remain_len)
                {
                    Utility.Utility.LogWrite("while안");
                    ObjOrderInputSerialRawDataBuf des = m_pool_orderinput_rawdata.create();         // push to pool list
                    if (null != des)
                    {
                        Utility.Utility.LogWrite("if 안");
                        des.m_caller_serial_port = src.caller_serial;

                        int copy_len = (remain_len < des.m_data_buf.Length ? remain_len : des.m_data_buf.Length);

                        if (0 < copy_len)
                        {
                            Utility.Utility.LogWrite("copylen if 안");
                            System.Array.Copy(src.buf, src_offset, des.m_data_buf, 0, copy_len);
                        }
                        des.m_data_len = copy_len;

                        // set remain length
                        src_offset += copy_len;
                        remain_len -= copy_len;
                    }
                }
            }
            break;

            case SerialPortOrderInput.SERIAL_PORT_NOTIFY_WHAT.ORDER_OBJECT:

                Utility.Utility.LogWrite("case SerialPortOrderInput.SERIAL_PORT_NOTIFY_WHAT.ORDER_OBJECT:");
                sendMyNotify(_what, _obj);
                break;

            default:
                sendMyNotify(_what, _obj);
                break;
            }
        }
Ejemplo n.º 3
0
 // ----------------------------------------------------------
 //
 public ControllerOrderInput()
 {
     m_pool_orderinput_rawdata = new KnPooledQueue <ObjOrderInputSerialRawDataBuf>(POOL_CAPACITY);
     m_read_rawdata            = new ObjOrderInputSerialRawDataBuf();
 }