Beispiel #1
0
        public OCRTestServer(IPAddress ipAddress,
                             int port,
                             string ocrMessagePrefix,
                             string testSenderName)
        {
            Logger = new MessageLog();

            // Set the IPAddress and Port values
            _ipAddress = ipAddress;
            _testPort  = port;

            _shutDownTokenSrc = new CancellationTokenSource();
            _shutDownToken    = _shutDownTokenSrc.Token;

            _testSenderName = testSenderName;

            _listenerReady = new AutoResetEvent(false);
            _rxReady       = new AutoResetEvent(false);

            _msgUtils = new OCRMessageUtils(ocrMessagePrefix,
                                            testSenderName
                                            );
            _isRunning   = false;
            _isConnected = false;
        }
Beispiel #2
0
        private void Send(object messageObj)
        {
            MemoryStream ms = null;

            if (messageObj != null)
            {
                ms = OCRMessageUtils.writeMessage(messageObj);
            }

            if (ms != null)
            {
                _ocrMsgStream.Write(ms.ToArray(),
                                    0,
                                    ms.ToArray().Length
                                    );
            }
        }
Beispiel #3
0
 public void SendNewEventResponse(object messageObj, string caseID)
 {
     // Send an OCR_NEW_EVENT_RESPONSE message
     Send(OCRMessageUtils
          .NewEventResponseMessage(((Messages.ocr_new_event
                                     .message
                                     )messageObj
                                    ).body
                                   .payload
                                   .EventID,
                                   ((Messages.ocr_new_event
                                     .message
                                     )messageObj
                                   ).body
                                   .payload
                                   .LaneID,
                                   caseID
                                   )
          );
 }
Beispiel #4
0
        public OCRMonitor(IPAddress ipAddress,
                          int port,
                          bool connectAsListener,
                          string ocrMessagePrefix,
                          string cargoSenderName)
        {
            // Set the IPAddress and Port values
            _ipAddress         = ipAddress;
            _ocrPort           = port;
            _connectAsListener = connectAsListener;

            _shutDownTokenSrc = new CancellationTokenSource();
            _shutDownToken    = _shutDownTokenSrc.Token;

            _listenerReady = new AutoResetEvent(false);
            _ocrRxReady    = new AutoResetEvent(false);

            _msgUtils = new OCRMessageUtils(ocrMessagePrefix,
                                            cargoSenderName
                                            );
            _isRunning   = false;
            _isConnected = false;
        }
Beispiel #5
0
        public OCRMonitor(IPAddress ipAddress,
                          int port,
                          bool connectAsListener,
                          string ocrMessagePrefix,
                          string cargoSenderName)
        {
            // Set the IPAddress and Port values
            _ipAddress = ipAddress;
            _ocrPort = port;
            _connectAsListener = connectAsListener;

            _shutDownTokenSrc = new CancellationTokenSource();
            _shutDownToken = _shutDownTokenSrc.Token;

            _listenerReady = new AutoResetEvent(false);
            _ocrRxReady = new AutoResetEvent(false);

            _msgUtils = new OCRMessageUtils(ocrMessagePrefix,
                                            cargoSenderName
                                           );
            _isRunning = false;
            _isConnected = false;
        }
Beispiel #6
0
 private void SendACK(string guid)
 {
     Send(OCRMessageUtils.AckMessage(guid));
 }
Beispiel #7
0
        private void OCRMessageRespond(object messageObj,
                                       OCRMessageType msgType)
        {
            try
            {
                string msgName = OCRMessageUtils.MessageName(msgType);

                switch (msgType)
                {
                case OCRMessageType.OCR_MASTER:
                    SendACK(((Messages.ocr_master.message)messageObj).body.guid);
                    // Let event subscribers know we received and ACK'd an OCR_MASTER message.
                    if (NotifyRxOCR_MASTER != null)
                    {
                        NotifyRxOCR_MASTER(messageObj, msgName);
                    }
                    break;

                case OCRMessageType.OCR_ULD:
                    SendACK(((Messages.ocr_uld.message)messageObj).body.guid);
                    // Let event subscribers know we received and ACK'd an OCR_ULD message.
                    if (NotifyRxOCR_ULD != null)
                    {
                        NotifyRxOCR_ULD(messageObj, msgName);
                    }
                    break;

                case OCRMessageType.OCR_NEW_EVENT:
                    SendACK(((Messages.ocr_new_event.message)messageObj).body.guid);
                    // Let event subscribers know we received and ACK'd an OCR_NEW_EVENT message.
                    if (NotifyRxOCR_NEW_EVENT != null)
                    {
                        NotifyRxOCR_NEW_EVENT(messageObj, msgName);
                    }
                    break;

                case OCRMessageType.REGISTER:
                    Send(OCRMessageUtils.RegisteredMessage());
                    // Let event subscribers know we received and ACK'd a REGISTER message.
                    if (NotifyRxREGISTER != null)
                    {
                        NotifyRxREGISTER(messageObj, msgName);
                    }
                    break;

                case OCRMessageType.UNREGISTER:
                    Send(OCRMessageUtils.UnregisteredMessage());
                    // Let event subscribers know we received and ACK'd an UNREGISTER message.
                    if (NotifyRxUNREGISTER != null)
                    {
                        NotifyRxUNREGISTER(messageObj, msgName);
                    }

                    Shutdown();
                    break;

                case OCRMessageType.PING:
                    SendACK(((Messages.ocr_ping.message)messageObj).body.guid);
                    // Let event subscribers know we received and ACK'd a PING message.
                    if (NotifyRxPING != null)
                    {
                        NotifyRxPING(messageObj, msgName);
                    }
                    break;

                case OCRMessageType.ACK:
                    // Received Ack Message, no response necessary
                    // Let event subscribers know we received an ACK message.
                    if (NotifyRxACK != null)
                    {
                        NotifyRxACK(messageObj, msgName);
                    }
                    break;

                case OCRMessageType.NACK:
                    // Received Nack Message, no response necessary
                    // Let event subscribers know we received an NACK message.
                    if (NotifyRxNACK != null)
                    {
                        NotifyRxNACK(messageObj, msgName);
                    }
                    break;

                default:
                    // If something is unrecognized or corrupt,
                    // just ignore it per the ICD.
                    break;
                }
            }
            catch (Exception) //XML parser and ProcessMasterMessage will throw in invalid message
            {
                // bury any exceptions
            }
        }
Beispiel #8
0
        public void ProcessOCRMessage(string msgString)
        {
            string guidString = null;

            // Don't allow shutdown while still processing a message
            try
            {
                lock (this)
                {
                    OCRMessageType messageType = OCRMessageUtils
                                                 .GetMessageInfo(msgString,
                                                                 out guidString
                                                                 );
                    object ocrMessage = null;

                    switch (messageType)
                    {
                    case OCRMessageType.OCR_MASTER:
                        ocrMessage = new Messages.ocr_master.message();
                        break;

                    case OCRMessageType.OCR_ULD:
                        ocrMessage = new Messages.ocr_uld.message();
                        break;

                    case OCRMessageType.OCR_NEW_EVENT:
                        ocrMessage = new Messages.ocr_new_event.message();
                        break;

                    case OCRMessageType.REGISTER:
                        ocrMessage = new Messages.ocr_register.message();
                        break;

                    case OCRMessageType.UNREGISTER:
                        ocrMessage = new Messages.ocr_unregister.message();
                        break;

                    case OCRMessageType.PING:
                        ocrMessage = new Messages.ocr_ping.message();
                        break;

                    case OCRMessageType.ACK:
                        ocrMessage = new Messages.ocr_ack.message();
                        break;

                    default:
                        // If something is unrecognized or corrupt,
                        // just ignore it per the ICD
                        break;
                    }

                    OCRMessageRespond(DeserializeToTypedMessage(ocrMessage, msgString), messageType);
                }
            }
            catch (Exception) //XML parser and ProcessMasterMessage will throw in invalid message
            {
                // Per the ICD, if something is corrupt or unrecognized,
                // just NACK it.
                SendNACK(guidString);
            }
        }