コード例 #1
0
        public void ProcessCue(CueRequest req)
        {
            Resolver        resolver;
            ResolverRequest request;

            lock (__lockObj)
            {
                SignalDbRecord signalDbRecord = DbEngine.Get <SignalDbRecord>(req.Id);
                Cue            cue            = req.Cue;
                ActionType     action         = new ActionType
                {
                    CueId   = cue.CueId,
                    Status  = StatusType.New,
                    IsValid = true,
                    Time    = DateTime.UtcNow
                };

                action.Variables = cue.Variables;

                if (signalDbRecord.Actions == null)
                {
                    signalDbRecord.Actions = new System.Collections.Generic.Dictionary <string, ActionType>();
                }

                resolver = signalDbRecord.Signal.Cues[cue.CueId].Resolver;
                request  = new ResolverRequest();

                try
                {
                    ValidateCue(signalDbRecord, cue);

                    request.Id       = cue.Id;
                    request.ActionId = req.ActionId;
                    request.CueId    = cue.CueId;

                    signalDbRecord.Status = StatusType.Received;
                }
                catch (Exception e)
                {
                    // TODO : Check for "Terminal" Status As Well.
                    if (signalDbRecord.Status != StatusType.Received)
                    {
                        signalDbRecord.Status = StatusType.Invalid;
                    }
                    action.Status        = StatusType.Error;
                    action.StatusMessage = e.Message;
                }

                signalDbRecord.Actions.Add(req.ActionId, action);
                signalDbRecord  = DbEngine.Update <SignalDbRecord>(signalDbRecord, true);
                request.Signal  = signalDbRecord.Signal;
                request.Actions = signalDbRecord.Actions;
                request.Trace   = signalDbRecord.Trace;
            }

            Logger.Info($"Sending To Resolver [{resolver.Name}].  {JsonTools.Serialize(request)}");
            SendToResolver(resolver, request);
        }
コード例 #2
0
        public virtual void SendToResolver(Resolver resolver, ResolverRequest request)
        {
            IResolver res    = AssemblyLoader.Load <IResolver>(resolver.Name);
            Status    status = new Status();

            if (res != null)
            {
                status = res.ProcessRequest(request);
                status.SendToChannels = resolver.Notify;
            }
            else
            {
                status.Id             = request.Id;
                status.ActionId       = request.ActionId;
                status.NewStatus      = StatusType.Error;
                status.Message        = $"Resolver [{resolver.Name}] Does Not Exist.";
                status.SendToChannels = resolver.Notify;
            }

            ProcessStatus(status);
        }