public void ProcessMsg(object obj, StanMsgHandlerArgs args)
                {
                    if (args.Message.Redelivered)
                    {
                        Log("Received redelivered message: " + args.Message.Sequence);
                    }

                    if (sw == null)
                    {
                        sw = new Stopwatch();
                        sw.Start();
                    }

                    try
                    {
                        args.Message.Ack();
                    }
                    catch (Exception e)
                    {
                        Log("Subscriber Ack Exception: {0}", e.Message);
                    }

                    counter++;
                    if (counter % 500 == 0)
                    {
                        Log("Subscriber Received {0} msgs at {1:0} msgs/sec.", counter, counter / sw.Elapsed.TotalSeconds);
                    }
                }
Ejemplo n.º 2
0
        private void EventReceived(object sender, StanMsgHandlerArgs args)
        {
            try
            {
                // extract event-type and payload from the message
                // Event-type is embedded in the message:
                //   <event-type>#<value>|<value>|<value>
                string message       = Encoding.UTF8.GetString(args.Message.Data);
                string eventTypeName = message.Split('#').First();
                string eventData     = message.Substring(message.IndexOf('#') + 1);

                // determine event CLR type
                string fullEventTypeName = $"Store.OrdersQueryService.Events.{eventTypeName}";
                Type   eventType         = Type.GetType(fullEventTypeName, true);

                // Call event-handler
                dynamic e = JsonSerializer.Deserialize(eventData, eventType);
                Handle(e);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error: {ex.Message}");
                if (ex.InnerException != null)
                {
                    Console.WriteLine($"Error: {ex.InnerException.Message}");
                }
            }
        }
        //private void DBTableWatcher_VehicleChange(object sender, EventArgs e)
        //{
        //    ObjCacheManager.updateVehicle();
        //}

        private void ProcCurrentAlarm(object sender, StanMsgHandlerArgs handler)
        {
            //List<sc.ALARM> alarms = getCurrentAlarmFromRedis();
            List <sc.ALARM> alarms = AlarmBLL.loadSetAlarm();

            ObjCacheManager.updateAlarm(alarms);
            CurrentAlarmChange?.Invoke(this, alarms);
        }
        public void PingCheckInfo(object sender, StanMsgHandlerArgs handler)
        {
            var bytes = handler.Message.Data;

            sc.ProtocolFormat.OHTMessage.PING_CHECK_INFO ping_info = sc.BLL.LineBLL.Convert2Object_PingCheckInfo(bytes);

            app.ObjCacheManager.putPingCheckInfo(ping_info);
        }
        private void ProcLineInfo(object sender, StanMsgHandlerArgs e)
        {
            var   bytes         = e.Message.Data;
            var   line_info_gpb = BLL.LineBLL.Convert2Object_LineInfo(bytes);
            ALINE line          = scApp.getEQObjCacheManager().getLine();

            line.Put(line_info_gpb);
        }
        public void MTLMTSInfo(object sender, StanMsgHandlerArgs handler)
        {
            var bytes = handler.Message.Data;

            sc.ProtocolFormat.OHTMessage.MTL_MTS_INFO mtlmts_info = sc.BLL.LineBLL.Convert2Object_MTLMTSInfo(bytes);

            app.ObjCacheManager.putMTL_MTSCheckInfo(mtlmts_info);
        }
        public void ProcTipMessageInfo(object sender, StanMsgHandlerArgs handler)
        {
            var bytes = handler.Message.Data;

            //var vehicle_obj_info = sc.BLL.VehicleBLL.Convert2Object_VehicleInfo(bytes);
            // var vh_obj = ZeroFormatterSerializer.Deserialize<AVEHICLE>(bytes);
            sc.ProtocolFormat.OHTMessage.TIP_MESSAGE_COLLECTION msg_collection = sc.BLL.LineBLL.Convert2Object_TipMsgInfoCollection(bytes);

            app.ObjCacheManager.putTipMessageInfos(msg_collection);
        }
        public void OnlineCheckInfo(object sender, StanMsgHandlerArgs handler)
        {
            var bytes = handler.Message.Data;

            //var vehicle_obj_info = sc.BLL.VehicleBLL.Convert2Object_VehicleInfo(bytes);
            // var vh_obj = ZeroFormatterSerializer.Deserialize<AVEHICLE>(bytes);
            sc.ProtocolFormat.OHTMessage.ONLINE_CHECK_INFO online_info = sc.BLL.LineBLL.Convert2Object_OnlineCheckInfo(bytes);

            app.ObjCacheManager.putOnlineCheckInfo(online_info);
        }
        public void SystemLogInfo(object sender, StanMsgHandlerArgs handler)
        {
            var bytes = handler.Message.Data;

            //var vehicle_obj_info = sc.BLL.VehicleBLL.Convert2Object_VehicleInfo(bytes);
            // var vh_obj = ZeroFormatterSerializer.Deserialize<AVEHICLE>(bytes);
            sc.ProtocolFormat.OHTMessage.TRANSFER_INFO transfer_info = sc.BLL.LineBLL.Convert2Object_TransferInfo(bytes);

            app.ObjCacheManager.putTransferInfo(transfer_info);
        }
Ejemplo n.º 10
0
        private async void MessageReceived(object sender, StanMsgHandlerArgs args)
        {
            var message = ParseMessage(args.Message.Data);

            _monitor?.Information(message);

            _storingData.WaitOne(); //из разных потоков нельзя обращаться к одному DbContext - синхронизируем
            await _repository.Add(message);

            _storingData.Set();
        }
        public void ProcVehicleInfo(object sender, StanMsgHandlerArgs handler)
        {
            var bytes = handler.Message.Data;

            //var workItem = new BackgroundWorkItem
            //    (app, bytes);
            //app.BackgroundWork_ProcessVhPositionUpdate.triggerBackgroundWork("ProcVehicleInfo", workItem);

            sc.ProtocolFormat.OHTMessage.VEHICLE_INFO vh_info = sc.BLL.VehicleBLL.Convert2Object_VehicleInfo(bytes);

            app.ObjCacheManager.PutVehicle(vh_info);
        }
Ejemplo n.º 12
0
        private void EventReceived(object sender, StanMsgHandlerArgs args)
        {
            try
            {
                // extract event-type and payload from the message
                // Event-type is embedded in the message:
                //   <event-type>#<value>|<value>|<value>
                string message       = Encoding.UTF8.GetString(args.Message.Data);
                string eventTypeName = message.Split('#').First();
                string eventData     = message.Substring(message.IndexOf('#') + 1);

                // skip already handled events based on last handled sequence-number
                ulong sequenceNumber = args.Message.Sequence;
                ulong?lastSeqNr      = GetLastSequenceNumber();
                if (lastSeqNr.HasValue)
                {
                    if (sequenceNumber <= lastSeqNr)
                    {
                        return;
                    }
                }

                // determine event CLR type
                string fullEventTypeName = $"Store.ShippingService.Events.{eventTypeName}";
                Type   eventType         = Type.GetType(fullEventTypeName, true);

                // handle event
                dynamic e = JsonSerializer.Deserialize(eventData, eventType);
                Handle(e);

                // update progress
                UpdateLastSequenceNumber(sequenceNumber);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error: {ex.Message}");
                if (ex.InnerException != null)
                {
                    Console.WriteLine($"Error: {ex.InnerException.Message}");
                }
            }
        }
Ejemplo n.º 13
0
 void LogMsgHandler(object obj, StanMsgHandlerArgs handler)
 {
     _log.Trace(new { direction = "Subscriber", subject = handler.Message.Subject, data = System.Text.Encoding.UTF8.GetString(handler.Message.Data) });
 }
 internal void OnIncomingMessage(object _, StanMsgHandlerArgs e)
 => InvokeObservers(e.Message);
Ejemplo n.º 15
0
 private void onReceived(object sender, StanMsgHandlerArgs args)
 {
     Console.WriteLine("Received seq #{0}: {1}", args.Message.Sequence, System.Text.Encoding.UTF8.GetString(args.Message.Data));
 }
        private void AMS_EVENT_HANDLER(object sender, StanMsgHandlerArgs e)
        {
            var    bytes             = e.Message.Data;
            string sillegalInfoValue = System.Text.Encoding.Default.GetString(bytes);

            string[] eventInfo    = sillegalInfoValue.Split(',');
            string   vh_id        = eventInfo[0];
            string   illegal_code = eventInfo[1];
            string   time         = eventInfo[2];
            string   messageValue = eventInfo[3];

            switch (illegal_code)
            {
            case SCAppConstants.REDIS_EVENT_CODE_ADVANCE_NOTICE_OBSTRUCT_VH:

                break;

            case SCAppConstants.REDIS_EVENT_CODE_VEHICLE_IDEL_WARNING:
                string[]       idel_warning_info        = getMessageList(messageValue);
                string         current_section          = idel_warning_info[0];
                string         section_last_update_time = idel_warning_info[1];
                VHActionStatus action_status;
                Enum.TryParse(idel_warning_info[2], out action_status);

                bool isWarning = bool.Parse(idel_warning_info[3]);
                if (isWarning)
                {
                    if (action_status != VHActionStatus.NoCommand)
                    {
                        AVEHICLE vh = app.VehicleBLL.cache.getVehicle(vh_id);

                        //app.VehicleBLL.DoIdleVehicleHandle_InAction(vh.HAS_CST == 1 ?
                        //                                            VhLoadCSTStatus.Exist : VhLoadCSTStatus.NotExist);
                    }
                    else
                    {
                        //TODO 要加入回Home點的動作
                        //app.VehicleBLL.DoIdleVehicleHandle_NoAction(vh_id);
                    }
                    bcf.App.BCFApplication.onWarningMsg
                        ($"{vh_id} is idle for a long time,current sec id [{current_section}].");
                }
                else
                {
                    bcf.App.BCFApplication.onInfoMsg
                        ($"{vh_id} resume the move.");
                }
                break;

            case SCAppConstants.REDIS_EVENT_CODE_VEHICLE_LOADUNLOAD_TOO_LONG_WARNING:
                string[] loadunload_toolong_info = getMessageList(messageValue);
                string   mcs_cmd           = loadunload_toolong_info[0];
                string   current_sec_id    = loadunload_toolong_info[1];
                string   recent_tran_event = loadunload_toolong_info[1];
                bcf.App.BCFApplication.onWarningMsg
                    ($"{vh_id} is {recent_tran_event} for a long time,current sec id [{current_sec_id}].");
                break;

            case SCAppConstants.REDIS_EVENT_CODE_EARTHQUAKE_ON:
                string[] earthquake_info = getMessageList(messageValue);
                bool     isHappend       = bool.Parse(earthquake_info[0]);
                ALINE    line            = app.getEQObjCacheManager().getLine();
                line.IsEarthquakeHappend = isHappend;
                if (isHappend)
                {
                    bcf.App.BCFApplication.onErrorMsg("An earthquake has occurred !!!");
                    app.VehicleService.PauseAllVehicleByNormalPause();
                }
                else
                {
                    app.VehicleService.ResumeAllVehicleByNormalPause();
                }
                break;

            case SCAppConstants.REDIS_EVENT_CODE_ADVANCE_NOTICE_OBSTRUCTED_VH:
                string[] obstructed_vh_info = getMessageList(messageValue);
                string   obstructed_vh      = vh_id;
                string   obstruct_vh        = obstructed_vh_info[0];
                app.VehicleService.Send.Pause(obstructed_vh, PauseEvent.Pause, PauseType.Normal);
                break;

            case SCAppConstants.REDIS_EVENT_CODE_NOTICE_OBSTRUCTED_VH_CONTINUE:
                string _obstructed_vh = vh_id;
                app.VehicleService.Send.Pause(_obstructed_vh, PauseEvent.Continue, PauseType.Normal);
                break;

            case SCAppConstants.REDIS_EVENT_CODE_NOTICE_THE_VH_NEEDS_TO_CHANGE_THE_PATH:
                string need_change_the_path_vh = vh_id;
                //尚未實作
                break;

            default:
                break;
            }
        }
        private void AMS_EVENT_HANDLER(object sender, StanMsgHandlerArgs e)
        {
            var    bytes             = e.Message.Data;
            string sillegalInfoValue = System.Text.Encoding.Default.GetString(bytes);

            string[] eventInfo    = sillegalInfoValue.Split(',');
            string   vh_id        = eventInfo[0];
            string   illegal_code = eventInfo[1];
            string   time         = eventInfo[2];
            string   messageValue = eventInfo[3];

            switch (illegal_code)
            {
            case SCAppConstants.REDIS_EVENT_CODE_ILLEGAL_ENTRY_BLOCK_ZONE:
                string[] Illegal_Entry_Section = getMessageList(messageValue);
                List <BLOCKZONEQUEUE> queues   = app.MapBLL.loadNonReleaseBlockQueueBySecIds(Illegal_Entry_Section.ToList());
                foreach (BLOCKZONEQUEUE queue in queues)
                {
                    //app.VehicleService.PAUSE_REQ
                    //    (queue.CAR_ID.Trim(),
                    //    ProtocolFormat.OHTMessage.PauseEvent.Pause,
                    //    ProtocolFormat.OHTMessage.PauseType.OhxC);
                }
                //     bcf.App.BCFApplication.onWarningMsg($"{vh_id} illegal entry block zone:{messageValue}");
                break;

            case SCAppConstants.REDIS_EVENT_CODE_ADVANCE_NOTICE_OBSTRUCT_VH:
                if (System.Threading.Interlocked.Exchange(ref ADVANCE_NOTICE_OBSTRUCT_SyncPoint, 1) == 0)
                {
                    try
                    {
                        string   blocked_vh_id    = vh_id;
                        string[] obstacles_vh_ids = getMessageList(messageValue);
                        foreach (string obstacles_vh in obstacles_vh_ids)
                        {
                            //app.VehicleBLL.whenVhObstacle(blocked_vh);
                            app.VehicleBLL.whenVhObstacle(obstacles_vh, blocked_vh_id);
                        }
                    }
                    catch (Exception ex)
                    {
                        NLog.LogManager.GetCurrentClassLogger().Error(ex, "Exception:");
                    }
                    finally
                    {
                        System.Threading.Interlocked.Exchange(ref ADVANCE_NOTICE_OBSTRUCT_SyncPoint, 0);
                    }
                }

                break;

            case SCAppConstants.REDIS_EVENT_CODE_VEHICLE_IDEL_WARNING:
                string[]       idel_warning_info        = getMessageList(messageValue);
                string         current_section          = idel_warning_info[0];
                string         section_last_update_time = idel_warning_info[1];
                VHActionStatus action_status;
                Enum.TryParse(idel_warning_info[2], out action_status);

                bool isWarning = bool.Parse(idel_warning_info[3]);
                if (isWarning)
                {
                    if (action_status != VHActionStatus.NoCommand)
                    {
                        AVEHICLE vh = app.VehicleBLL.getVehicleByID(vh_id);

                        app.VehicleBLL.DoIdleVehicleHandle_InAction(vh.HAS_CST == 1 ?
                                                                    VhLoadCSTStatus.Exist : VhLoadCSTStatus.NotExist);
                    }
                    else
                    {
                        //TODO 要加入回Home點的動作
                        //app.VehicleBLL.DoIdleVehicleHandle_NoAction(vh_id);
                    }
                    bcf.App.BCFApplication.onWarningMsg
                        ($"{vh_id} is idle for a long time,current sec id [{current_section}].");
                }
                else
                {
                    bcf.App.BCFApplication.onInfoMsg
                        ($"{vh_id} resume the move.");
                }
                break;

            case SCAppConstants.REDIS_EVENT_CODE_VEHICLE_LOADUNLOAD_TOO_LONG_WARNING:
                string[] loadunload_toolong_info = getMessageList(messageValue);
                string   mcs_cmd           = loadunload_toolong_info[0];
                string   current_sec_id    = loadunload_toolong_info[1];
                string   recent_tran_event = loadunload_toolong_info[1];
                bcf.App.BCFApplication.onWarningMsg
                    ($"{vh_id} is {recent_tran_event} for a long time,current sec id [{current_sec_id}].");
                break;

            case SCAppConstants.REDIS_EVENT_CODE_EARTHQUAKE_ON:
                string[] earthquake_info = getMessageList(messageValue);
                bool     isHappend       = bool.Parse(earthquake_info[0]);
                ALINE    line            = app.getEQObjCacheManager().getLine();
                line.IsEarthquakeHappend = isHappend;
                if (isHappend)
                {
                    bcf.App.BCFApplication.onErrorMsg("An earthquake has occurred !!!");
                    app.VehicleService.PauseAllVehicleByOHxCPause();
                }
                else
                {
                    app.VehicleService.ResumeAllVehicleByOhxCPause();
                }
                break;

            case SCAppConstants.REDIS_EVENT_CODE_ADVANCE_NOTICE_OBSTRUCTED_VH:
                string[] obstructed_vh_info = getMessageList(messageValue);
                string   obstructed_vh      = vh_id;
                string   obstruct_vh        = obstructed_vh_info[0];
                app.VehicleService.OHxCPauseRequest(obstructed_vh, PauseEvent.Pause, SCAppConstants.OHxCPauseType.Obstacle);
                break;

            case SCAppConstants.REDIS_EVENT_CODE_NOTICE_OBSTRUCTED_VH_CONTINUE:
                string _obstructed_vh = vh_id;
                app.VehicleService.OHxCPauseRequest(_obstructed_vh, PauseEvent.Continue, SCAppConstants.OHxCPauseType.Obstacle);
                break;

            case SCAppConstants.REDIS_EVENT_CODE_NOTICE_THE_VH_NEEDS_TO_CHANGE_THE_PATH:
                string need_change_the_path_vh = vh_id;
                app.VehicleService.VhicleChangeThePath(vh_id, true);
                break;

            case SCAppConstants.REDIS_EVENT_CODE_NOTICE_BLOCKING_RELEASE_TIMEOUT:
                string[] block_release_timeout_info = getMessageList(messageValue);
                string   block_id                 = block_release_timeout_info[1];
                string   block_status             = block_release_timeout_info[2];
                string   block_status_change_time = block_release_timeout_info[3];
                DateTime dt_status_change_time    = default(DateTime);
                DateTime.TryParseExact
                    (block_status_change_time,
                    ibg3k0.sc.App.SCAppConstants.TimestampFormat_17,
                    System.Globalization.CultureInfo.InvariantCulture,
                    System.Globalization.DateTimeStyles.None, out dt_status_change_time);

                AVEHICLE blocking_release_timeout_vh = app.VehicleBLL.cache.getVhByID(vh_id);
                if (blocking_release_timeout_vh != null)
                {
                    app.LineService.ProcessAlarmReport(
                        blocking_release_timeout_vh.NODE_ID, blocking_release_timeout_vh.VEHICLE_ID, blocking_release_timeout_vh.Real_ID, "",
                        SCAppConstants.SystemAlarmCode.OHT_Issue.OHTBlockingRelaseTimeout,
                        ProtocolFormat.OHTMessage.ErrorStatus.ErrSet);
                }
                bcf.App.BCFApplication.onWarningMsg
                    ($"vh:{vh_id} blocking time out,block id:{block_id}, block status{block_status}, block time:{dt_status_change_time.ToString(SCAppConstants.DateTimeFormat_22)}.");
                break;

            default:
                break;
            }
        }
Ejemplo n.º 18
0
 private void onReceived(object sender, StanMsgHandlerArgs args)
 {
     Console.WriteLine("Received sequence:{0}, redelivered:{1}, message:{2}", args.Message.Sequence, args.Message.Redelivered, System.Text.Encoding.UTF8.GetString(args.Message.Data));
     args.Message.Ack();
 }
        private void AMS_EVENT_HANDLER(object sender, StanMsgHandlerArgs e)
        {
            var    bytes             = e.Message.Data;
            string sillegalInfoValue = System.Text.Encoding.Default.GetString(bytes);

            string[] eventInfo    = sillegalInfoValue.Split(',');
            string   vh_id        = eventInfo[0];
            string   illegal_code = eventInfo[1];
            string   time         = eventInfo[2];
            string   messageValue = eventInfo[3];

            switch (illegal_code)
            {
            case SCAppConstants.REDIS_EVENT_CODE_ILLEGAL_ENTRY_BLOCK_ZONE:
                string[] Illegal_Entry_Section = getMessageList(messageValue);
                List <BLOCKZONEQUEUE> queues   = app.MapBLL.loadNonReleaseBlockQueueBySecIds(Illegal_Entry_Section.ToList());
                foreach (BLOCKZONEQUEUE queue in queues)
                {
                    //app.VehicleService.PAUSE_REQ
                    //    (queue.CAR_ID.Trim(),
                    //    ProtocolFormat.OHTMessage.PauseEvent.Pause,
                    //    ProtocolFormat.OHTMessage.PauseType.OhxC);
                }
                //     bcf.App.BCFApplication.onWarningMsg($"{vh_id} illegal entry block zone:{messageValue}");
                break;

            case SCAppConstants.REDIS_EVENT_CODE_ADVANCE_NOTICE_OBSTRUCT_VH:


                break;

            case SCAppConstants.REDIS_EVENT_CODE_VEHICLE_IDEL_WARNING:
                string[]       idel_warning_info        = getMessageList(messageValue);
                string         current_section          = idel_warning_info[0];
                string         section_last_update_time = idel_warning_info[1];
                VHActionStatus action_status;
                Enum.TryParse(idel_warning_info[2], out action_status);

                bool isWarning = bool.Parse(idel_warning_info[3]);
                if (isWarning)
                {
                    if (action_status != VHActionStatus.NoCommand)
                    {
                        AVEHICLE vh = app.VehicleBLL.getVehicleByID(vh_id);

                        app.VehicleBLL.DoIdleVehicleHandle_InAction(vh.HAS_CST == 1 ?
                                                                    VhLoadCarrierStatus.Exist : VhLoadCarrierStatus.NotExist);
                    }
                    else
                    {
                        //TODO 要加入回Home點的動作
                        //app.VehicleBLL.DoIdleVehicleHandle_NoAction(vh_id);
                    }
                    bcf.App.BCFApplication.onWarningMsg
                        ($"{vh_id} is idle for a long time,current sec id [{current_section}].");
                }
                else
                {
                    bcf.App.BCFApplication.onInfoMsg
                        ($"{vh_id} resume the move.");
                }
                break;

            case SCAppConstants.REDIS_EVENT_CODE_VEHICLE_LOADUNLOAD_TOO_LONG_WARNING:
                string[] loadunload_toolong_info = getMessageList(messageValue);
                string   mcs_cmd           = loadunload_toolong_info[0];
                string   current_sec_id    = loadunload_toolong_info[1];
                string   recent_tran_event = loadunload_toolong_info[1];
                bcf.App.BCFApplication.onWarningMsg
                    ($"{vh_id} is {recent_tran_event} for a long time,current sec id [{current_sec_id}].");
                break;

            case SCAppConstants.REDIS_EVENT_CODE_EARTHQUAKE_ON:
                string[] earthquake_info = getMessageList(messageValue);
                bool     isHappend       = bool.Parse(earthquake_info[0]);
                ALINE    line            = app.getEQObjCacheManager().getLine();
                line.IsEarthquakeHappend = isHappend;
                if (isHappend)
                {
                    bcf.App.BCFApplication.onErrorMsg("An earthquake has occurred !!!");
                    app.VehicleService.PauseAllVehicleByOHxCPause();
                }
                else
                {
                    app.VehicleService.ResumeAllVehicleByOhxCPause();
                }
                break;

            case SCAppConstants.REDIS_EVENT_CODE_ADVANCE_NOTICE_OBSTRUCTED_VH:
                string[] obstructed_vh_info = getMessageList(messageValue);
                string   obstructed_vh      = vh_id;
                string   obstruct_vh        = obstructed_vh_info[0];
                app.VehicleService.OHxCPauseRequest(obstructed_vh, PauseEvent.Pause, SCAppConstants.OHxCPauseType.Obstacle);
                break;

            case SCAppConstants.REDIS_EVENT_CODE_NOTICE_OBSTRUCTED_VH_CONTINUE:
                string _obstructed_vh = vh_id;
                app.VehicleService.OHxCPauseRequest(_obstructed_vh, PauseEvent.Continue, SCAppConstants.OHxCPauseType.Obstacle);
                break;

            case SCAppConstants.REDIS_EVENT_CODE_NOTICE_THE_VH_NEEDS_TO_CHANGE_THE_PATH:
                string need_change_the_path_vh = vh_id;
                app.VehicleService.VhicleChangeThePath(vh_id, true);
                break;

            default:
                break;
            }
        }