コード例 #1
0
        internal CSTAEvent_t Read()
        {
            try
            {
                logger.Info("EventReader.Read: read event header...");

                object result;

                if (m_FrameReader.TryReadStruct(typeof(ACSEventHeader_t), out result))
                {
                    ACSEventHeader_t eventHeader = (ACSEventHeader_t)result;

                    logger.Info("EventReader.Read: acsHandle={0};eventClass={1};eventType={2};", eventHeader.acsHandle, eventHeader.eventClass, eventHeader.eventType);

                    switch (eventHeader.eventClass)
                    {
                    case Constants.CSTACONFIRMATION:

                        #region CSTACONFIRMATION

                        int invokeID = m_FrameReader.ReadInt32();

                        logger.Info("EventReader.Read.CSTACONFIRMATION: invokeID={0};", invokeID);

                        logger.Info("EventReader.Read.CSTACONFIRMATION: Getting CSTAConfParser from parserFactory...");
                        ICSTAConfirmationParser cstaConfParser = m_CSTAConfParserFactory.CreateParser(eventHeader.eventType);

                        if (cstaConfParser != null)
                        {
                            CSTAConfirmationEvent cstaConfirmation = cstaConfParser.Parse(m_FrameReader);
                            cstaConfirmation.invokeID = invokeID;

                            CSTAEvent_t cstaEvent = new CSTAEvent_t()
                            {
                                eventHeader = eventHeader,
                                Event       = { cstaConfirmation = cstaConfirmation }
                            };

                            return(cstaEvent);
                        }

                        logger.Info("EventReader.Read.CSTACONFIRMATION: ICSTAConfParserFactory failed to return parser!!");

                        #endregion CSTACONFIRMATION

                        break;

                    case Constants.CSTAUNSOLICITED:

                        #region CSTAUNSOLICITED

                        int xref = m_FrameReader.ReadInt32();

                        logger.Info("EventReader.Read.CSTAUNSOLICITED: xref={0};", xref);

                        logger.Info("EventReader.Read.CSTAUNSOLICITED: Getting CSTAUnsolicitedParser from parserFactory...");
                        ICSTAUnsolicitedParser cstaUnsolicitedParser = m_CSTAUnsolicitedParserFactory.CreateParser(eventHeader.eventType);

                        if (cstaUnsolicitedParser != null)
                        {
                            CSTAUnsolicitedEvent cstaUnsolicited = cstaUnsolicitedParser.Parse(m_FrameReader);

                            cstaUnsolicited.monitorCrossRefId = xref;

                            CSTAEvent_t cstaEvent = new CSTAEvent_t()
                            {
                                eventHeader = eventHeader,
                                Event       = { cstaUnsolicited = cstaUnsolicited }
                            };


                            return(cstaEvent);
                        }

                        logger.Info("EventReader.Read.CSTAUNSOLICITED: ICSTAUnsolicitedParserFactory failed to return parser!!");

                        #endregion CSTAUNSOLICITED

                        break;

                    case Constants.ACSCONFIRMATION:

                        #region ACSCONFIRMATION

                        invokeID = m_FrameReader.ReadInt32();

                        logger.Info("EventReader.Read.ACSCONFIRMATION: invokeID={0};", invokeID);

                        logger.Info("EventReader.Read.ACSCONFIRMATION: Getting ACSConfirmationParser from parserFactory...");
                        IACSConfirmationParser acsConfParser = m_ACSConfParserFactory.CreateParser(eventHeader.eventType);

                        if (acsConfParser != null)
                        {
                            ACSConfirmationEvent acsConfirmation = acsConfParser.Parse(m_FrameReader);
                            acsConfirmation.invokeID = invokeID;

                            CSTAEvent_t cstaEvent = new CSTAEvent_t()
                            {
                                eventHeader = eventHeader,
                                Event       = { acsConfirmation = acsConfirmation }
                            };

                            return(cstaEvent);
                        }

                        logger.Info("EventReader.Read.ACSCONFIRMATION: IACSConfirmationParserFactory failed to return parser!!");

                        #endregion ACSCONFIRMATION

                        break;

                    case Constants.ACSUNSOLICITED:

                        #region ACSUNSOLICITED

                        logger.Info("ACSUNSOLICITED :: Getting ACSUnsolicitedParser from parserFactory...");
                        IACSUnsolicitedParser acsUnsolicitedParser = m_ACSUnsolicitedParserFactory.CreateParser(eventHeader.eventType);

                        if (acsUnsolicitedParser != null)
                        {
                            ACSUnsolicitedEvent acsUnsolicited = acsUnsolicitedParser.Parse(m_FrameReader);

                            CSTAEvent_t cstaEvent = new CSTAEvent_t()
                            {
                                eventHeader = eventHeader,
                                Event       = { acsUnsolicited = acsUnsolicited }
                            };


                            return(cstaEvent);
                        }

                        logger.Info("ACSUNSOLICITED :: IACSUnsolicitedParserFactory failed to return parser!!");

                        #endregion ACSUNSOLICITED

                        break;
                    }
                }
            }
            catch (Exception err)
            {
                logger.Error(string.Format("Error in EventReader.ReadEvent: {0}", err));
            }

            return(null);
        }
コード例 #2
0
        //  [SecurityPermission(SecurityAction.Demand, UnmanagedCode = true)]
        protected void EventCallBack(int lParam)
        {
            if (AcsHandle == 0)
            {
                return;
            }
            try
            {
                const int size = 1040 * 4;
                var       pd   = new PrivateData_t {
                    length = size
                };

                var ptrCsta = Marshal.AllocHGlobal(size);
                var ptrPd   = Marshal.AllocHGlobal(size);
                Marshal.StructureToPtr(pd, ptrPd, true);
                try
                {
                    ushort count;
                    do
                    {
                        var tt = NativeMethods.acsGetEventPoll(AcsHandle, ptrCsta, ref pd.length,
                                                               ptrPd, out count);
                        if (tt == ACSFunctionRet_t.ACSPOSITIVE_ACK)
                        {
                            var cstaEvent = new CSTAEvent_t(ptrCsta);
                            var attEvent  = new ATTEvent_t();

                            if (
                                NativeMethods.attPrivateData(ptrPd, ptrCsta) ==
                                ACSFunctionRet_t.ACSPOSITIVE_ACK)
                            {
                                attEvent = new ATTEvent_t(ptrCsta);
                            }

                            var csta = DeepCopy(cstaEvent);
                            var att  = DeepCopy(attEvent);
                            switch (csta.eventHeader.eventClass)
                            {
                            case EventClass_t.ACSCONFIRMATION:
                                Acsconfirmation(csta.acsConfirmation, csta.eventHeader.eventTypeACS);
                                break;

                            case EventClass_t.ACSUNSOLICITED:
                                Acsunsolicited(csta.acsUnsolicited, csta.eventHeader.eventTypeACS);
                                break;

                            case EventClass_t.CSTACONFIRMATION:
                                Cstaconfirmation(csta.cstaConfirmation, att,
                                                 csta.eventHeader.eventTypeCSTA);
                                break;

                            case EventClass_t.CSTAEVENTREPORT:
                                Cstaeventreport(csta.cstaEventReport, att,
                                                csta.eventHeader.eventTypeCSTA);
                                break;

                            case EventClass_t.CSTAREQUEST:
                                Cstarequest(csta.cstaRequest, att,
                                            csta.eventHeader.eventTypeCSTA);
                                break;

                            case EventClass_t.CSTAUNSOLICITED:
                                Cstaunsolicited(csta.cstaUnsolicited, att,
                                                csta.eventHeader.eventTypeCSTA);
                                break;
                            }
                        }
                        else
                        {
                            if (tt != ACSFunctionRet_t.ACSERR_NOMESSAGE && tt != ACSFunctionRet_t.ACSERR_BADHDL)
                            {
                                Log.Error(new Exeption("acsGetEventPoll", tt));
                            }
                            return;
                        }
                    } while (count > 0);
                }
                catch (Exception ex)
                {
                    Log.Error("EventCallBack", ex);
                }
                finally
                {
                    Marshal.FreeHGlobal(ptrCsta);
                    Marshal.FreeHGlobal(ptrPd);

                    /*  ptrCsta.Free();
                     * ptrPd.Free();
                     */
                }
            }catch (Exception ex)
            {
                Log.Error("EventCallBack", ex);
            }
        }
コード例 #3
0
ファイル: csta.cs プロジェクト: rektifier/TSAPIDemo
 public EventBuffer_t()
 {
     this.evt     = new CSTAEvent_t();
     this.auxData = new Dictionary <string, object>();
 }
コード例 #4
0
ファイル: csta.cs プロジェクト: shizenghua/TSAPIDemo
 public EventBuffer_t()
 {
     this.evt = new CSTAEvent_t();
     this.auxData = new Dictionary<string, object>();
 }