Beispiel #1
0
 private void OnToMonitoringCallStateChanged(object sender)
 {
     if (_To.CallId == -1)
     {
         State = FunctionState.Error;
     }
 }
Beispiel #2
0
        public void To(int id)
        {
            if (_State == FunctionState.Idle)
            {
                Debug.Assert(id < Tlf.NumDestinations);

                TlfPosition   to = Top.Tlf[id];
                FunctionState st = FunctionState.Error;

                if (to.IsTop)
                {
                    _To = new TlfIaPosition(to);
                    _To.Listen();

                    if (_To.State == TlfState.Out)
                    {
                        _To.TlfPosStateChanged += OnToMonitoringCallStateChanged;
                        st = FunctionState.Executing;

                        Top.WorkingThread.Enqueue("SetSnmp", delegate()
                        {
                            string snmpString = Top.Cfg.PositionId + "_" + "LISTEN" + "_" + _To.Literal;
                            General.SafeLaunchEvent(SetSnmpString, this, new SnmpStringMsg <string, string>(Settings.Default.TlfFacilityOid, snmpString));
                        });
                    }
                }

                State = st;
            }
        }
        /// <summary>
        /// Sets the state of functions 13 to 20 of a locomotive
        /// XpressNet 3.6 and later
        /// </summary>
        /// <param name="address">Address of the locomotive (0 - 9999)</param>
        /// <param name="f13">Function 9</param>
        /// <param name="f14">Function 10</param>
        /// <param name="f15">Function 11</param>
        /// <param name="f16">Function 12</param>
        public SetFunctionOperationInstruction_Group4Message(int address, FunctionState f13, FunctionState f14, FunctionState f15, FunctionState f16, FunctionState f17, FunctionState f18, FunctionState f19, FunctionState f20)
            : base(PacketHeaderType.LocomotiveFunction)
        {
            Payload.Add(Convert.ToByte(PacketIdentifier.LocomotiveFunctionRequest.SetFunctionOperationInstruction_Group4));

            byte[] data = new byte[3];

            if (address >= XpressNetConstants.MIN_LOCO_ADDRESS && address <= XpressNetConstants.MAX_LOCO_ADDRESS)
            {
                ValueConverter.LocoAddress(address, out data[0], out data[1]);
            }
            else
            {
                throw new XpressNetProtocolViolationException("Number out of bounds");
            }

            data[2] = 0x00;

            if (f20 == FunctionState.On)
            {
                data[2] += 128;
            }

            if (f19 == FunctionState.On)
            {
                data[2] += 64;
            }

            if (f18 == FunctionState.On)
            {
                data[2] += 32;
            }

            if (f17 == FunctionState.On)
            {
                data[2] += 16;
            }

            if (f16 == FunctionState.On)
            {
                data[2] += 8;
            }

            if (f15 == FunctionState.On)
            {
                data[2] += 4;
            }

            if (f14 == FunctionState.On)
            {
                data[2] += 2;
            }

            if (f13 == FunctionState.On)
            {
                data[2] += 1;
            }

            Payload.AddRange(data);
        }
Beispiel #4
0
        public void Cancel(int call)
        {
            if (call == -1)
            {
                if (_To != null)
                {
                    _To.TlfPosStateChanged -= OnToMonitoringCallStateChanged;
                    _To.HangUp(0);
                    _To.Dispose();
                    _To = null;
                }

                State = FunctionState.Idle;
            }
            else
            {
                TlfIaPosition from;

                if (_Froms.TryGetValue(call, out from))
                {
                    from.TlfPosStateChanged -= OnFromMonitoringCallStateChanged;
                    from.Reject(SipAgent.SIP_NOT_ACCEPTABLE_HERE);
                    from.Dispose();

                    _Froms.Remove(call);
                }
            }
        }
Beispiel #5
0
        /// <summary>
        /// Invoked once a pseudo class has been found in the token enumerator.
        /// </summary>
        /// <param name="token">The token.</param>
        void OnPseudoClassFunction(CssToken token)
        {
            if (function.Finished(token))
            {
                var sel = function.Produce();

                if (IsNested && function is NotFunctionState)
                {
                    sel = null;
                }

                state    = State.Data;
                ready    = true;
                function = null;

                if (sel != null)
                {
                    Insert(sel);
                }
                else
                {
                    valid = false;
                }
            }
        }
Beispiel #6
0
        /// <summary>
        /// Invoked once a colon has been found in the token enumerator.
        /// </summary>
        /// <param name="token">The token.</param>
        void OnPseudoClass(CssToken token)
        {
            state = State.Data;
            ready = true;

            if (token.Type == CssTokenType.Colon)
            {
                state = State.PseudoElement;
                return;
            }
            else if (token.Type == CssTokenType.Function)
            {
                function = GetPseudoFunction(token);

                if (function != null)
                {
                    ready = false;
                    state = State.PseudoClassFunction;
                    return;
                }
            }
            else if (token.Type == CssTokenType.Ident)
            {
                var sel = GetPseudoSelector(token);

                if (sel != null)
                {
                    Insert(sel);
                    return;
                }
            }

            valid = false;
        }
Beispiel #7
0
        public bool Permit(IAcSession user, FunctionState function, IManagedObject data)
        {
            if (function == null)
            {
                throw new ArgumentNullException("function");
            }
            // 如果非托管
            if (!function.IsManaged)
            {
                return(true);
            }
            if (!user.Identity.IsAuthenticated)
            {
                return(false);
            }
            if (user.IsDeveloper())
            {
                return(true);
            }
            var functionIDs = user.AccountPrivilege.AuthorizedFunctionIDs;

            if (!functionIDs.Contains(function.Id))
            {
                return(false);
            }
            if (data != null)
            {
                // TODO:验证实体级权限。anycmd 1.0版本暂不支持,后续版本支持
            }
            return(true);
        }
Beispiel #8
0
        public void To(uint prefix, string dst, string number)
        {
            if (_State == FunctionState.Idle)
            {
                FunctionState st = FunctionState.Error;

                if (prefix == Cd40Cfg.INT_DST)
                {
                    _To = new TlfIaPosition(prefix, dst);
                    _To.Listen();

                    if (_To.State == TlfState.Out)
                    {
                        _To.TlfPosStateChanged += OnToMonitoringCallStateChanged;
                        st = FunctionState.Executing;

                        Top.WorkingThread.Enqueue("SetSnmp", delegate()
                        {
                            string snmpString = Top.Cfg.PositionId + "_" + "LISTEN" + "_" + _To.Number;
                            General.SafeLaunchEvent(SetSnmpString, this, new SnmpStringMsg <string, string>(Settings.Default.TlfFacilityOid, snmpString));
                        });
                    }
                }

                State = st;
            }
        }
Beispiel #9
0
 /// <summary>
 /// Do the preparatives to execute the pick up with AID:
 /// Only allows captures from prefix 0 (TA users)
 /// makes the subscription to get information about destination to be pickUp'd
 /// </summary>
 /// <param name="id">destination data to be pickUp'd</param>
 /// <returns></returns>
 public void Prepare(uint prefix, string dst, string number, string lit)
 {
     if (_State == FunctionState.Idle)
     {
         if (prefix != 0)
         {
             State = FunctionState.Error;
             _Logger.Error(String.Format("TlfPickUp:Prepare AID error target is prefix {0}", prefix));
         }
         else
         {
             _Target = Top.Tlf.SearchTlfPosition(prefix, dst, number, lit, true);
             if (_Target != null)
             {
                 PrepareCommon();
             }
             else
             {
                 _Logger.Error(String.Format("TlfPickUp:Prepare AID error target is null"));
             }
         }
     }
     else
     {
         _Logger.Error(String.Format("TlfPickUp:Prepare AID error state: {0}", _State));
     }
 }
Beispiel #10
0
        public void EventGridException(
            string hubName,
            string functionName,
            FunctionState functionState,
            string instanceId,
            string details,
            Exception exception,
            string reason,
            long latencyMs)
        {
            FunctionType functionType = FunctionType.Orchestrator;
            bool         isReplay     = false;

            EtwEventSource.Instance.EventGridNotificationException(
                hubName,
                LocalAppName,
                LocalSlotName,
                functionName,
                functionState,
                ExtensionVersion,
                instanceId,
                details,
                exception.Message,
                reason,
                functionType,
                ExtensionVersion,
                isReplay,
                latencyMs);

            this.logger.LogError(
                "{instanceId}: Function '{functionName} ({functionType})', failed to send a '{functionState}' notification event to Azure Event Grid. Exception message: {exceptionMessage}. Details: {details}. HubName: {hubName}. AppName: {appName}. SlotName: {slotName}. ExtensionVersion: {extensionVersion}. SequenceNumber: {sequenceNumber}. Latency: {latencyMs} ms.",
                instanceId, functionName, functionType, functionState, exception.Message, details, hubName, LocalAppName, LocalSlotName, ExtensionVersion, this.sequenceNumber++, latencyMs);
        }
        public bool Permit(IAcSession user, FunctionState function, IManagedObject data)
        {
            if (function == null)
            {
                throw new ArgumentNullException("function");
            }
            // 如果非托管
            if (!function.IsManaged)
            {
                return true;
            }
            if (!user.Identity.IsAuthenticated)
            {
                return false;
            }
            if (user.IsDeveloper())
            {
                return true;
            }
            var functionIDs = user.AccountPrivilege.AuthorizedFunctionIDs;

            if (!functionIDs.Contains(function.Id))
            {
                return false;
            }
            if (data != null)
            {
                // TODO:验证实体级权限。anycmd 1.0版本暂不支持,后续版本支持
            }
            return true;
        }
Beispiel #12
0
        /// <summary>
        /// Al establecerse la llamada y terminar con exito la captura se envia el mensaje
        /// al target
        /// </summary>
        /// <param name="sender"></param>
        private void OnCapturedCallStateChanged(object sender)
        {
            TlfPosition tlf = (TlfPosition)sender;

            try
            {
                if (tlf.State == TlfState.Set)
                {
                    _Captured.TlfPosStateChanged -= OnCapturedCallStateChanged;
                    SipAgent.SendInstantMessage(_Target.Channels[0].AccId, _Target.Uri, PickUpTag + Top.Cfg.PositionId + Resources.HasCaptured + _Captured.Literal, _UseProxy);
                    _Ringing.Remove(_Captured.Pos);
                    foreach (int pos in _Ringing.Keys)
                    {
                        Top.Tlf[pos].State = TlfState.Idle;
                    }
                    _Ringing.Clear();
                    _Target.TlfPosStateChanged -= OnTargetCallStateChanged;
                    _Target.State = TlfState.Idle; // se pasa a reposo al terminar la captura, no al entrar los ringing
                    _Target       = null;
                    _TargetUris   = null;
                    State         = FunctionState.Idle;
                    Top.WorkingThread.Enqueue("SetSnmp", delegate()
                    {
                        string snmpString = Top.Cfg.PositionId + "_" + "CAPTURED" + "_" + _Captured.Literal;
                        General.SafeLaunchEvent(SetSnmpString, this, new SnmpStringMsg <string, string>(Settings.Default.TlfFacilityOid, snmpString));
                    });
                }
            }
            catch (Exception exc)
            {
                _Logger.Error("OnCapturedCallStateChanged exception {0}", exc.Message);
            }
        }
Beispiel #13
0
 /// <summary>
 /// Cancel the pickUp process
 /// If this cancellation is due to changes in _target, then its state is not changed
 /// otherwise is set back to Idle.
 /// </summary>
 /// <param name="changeTargetState"></param>
 /// <returns></returns>
 public bool Cancel(bool changeTargetState = true)
 {
     if (State != FunctionState.Idle)
     {
         State = FunctionState.Idle;
         if (_Target != null)
         {
             _Target.TlfPosStateChanged -= OnTargetCallStateChanged;
             if (_TargetUris != null)
             {
                 foreach (string uri in _TargetUris)
                 {
                     SipAgent.DestroyDialogSubscription(uri);
                 }
             }
             if ((changeTargetState) || (_Target.State == TlfState.InProcess))
             {
                 _Target.State = TlfState.Idle;
             }
             _Target     = null;
             _TargetUris = null;
         }
         if (_Captured != null)
         {
             _Captured = null;
         }
         foreach (int pos in _Ringing.Keys)
         {
             Top.Tlf[pos].State = TlfState.Idle;
         }
         _Ringing.Clear();
         return(true);
     }
     return(false);
 }
Beispiel #14
0
        private void PrepareCommon()
        {
            _TargetUris = _Target.GetUris();
            if (_TargetUris != null)
            {
                _IgnoreNotify = false;
                _Target.State = TlfState.InProcess;
                bool error = false;
                foreach (string uri in _TargetUris)
                {
                    error &= SipAgent.CreateDialogSubscription(_Target.Channels[0].AccId, uri, _UseProxy);
                }
                if (!error)
                {
                    State = FunctionState.Executing;
                    _Target.TlfPosStateChanged += OnTargetCallStateChanged;

                    Top.WorkingThread.Enqueue("SetSnmp", delegate()
                    {
                        string snmpString = Top.Cfg.PositionId + "_" + "CAPTURE" + "_" + _Target.Literal;
                        General.SafeLaunchEvent(SetSnmpString, this, new SnmpStringMsg <string, string>(Settings.Default.TlfFacilityOid, snmpString));
                    });
                }
                else
                {
                    State = FunctionState.Error;
                    _Logger.Error("TlfPickUp::PrepareCommon CreateDialogSubscription error [0]", _Target.Literal);
                }
            }
            else
            {
                State = FunctionState.Error;
                _Logger.Error("TlfPickUp::PrepareCommon target [0] with no path", _Target.Literal);
            }
        }
Beispiel #15
0
            private void Update(FunctionState state)
            {
                var    acDomain  = _set._acDomain;
                var    dicByCode = _set._dicByCode;
                var    dicById   = _set._dicById;
                var    oldState  = dicById[state.Id];
                string oldKey    = oldState.Code;
                string newKey    = state.Code;

                dicById[state.Id] = state;
                CatalogState resource;

                if (!acDomain.CatalogSet.TryGetCatalog(oldState.ResourceTypeId, out resource))
                {
                    throw new ValidationException("意外的功能资源标识" + oldState.ResourceTypeId);
                }
                if (!dicByCode[resource].ContainsKey(newKey))
                {
                    dicByCode[resource].Remove(oldKey);
                    dicByCode[resource].Add(newKey, state);
                }
                else
                {
                    dicByCode[resource][newKey] = state;
                }
            }
Beispiel #16
0
 private void Init()
 {
     if (_initialized)
     {
         return;
     }
     lock (Locker)
     {
         if (_initialized)
         {
             return;
         }
         _acDomain.MessageDispatcher.DispatchMessage(new MemorySetInitingEvent(this));
         _dicByCode.Clear();
         _dicById.Clear();
         var functions = _acDomain.RetrieveRequiredService <IOriginalHostStateReader>().GetAllFunctions();
         foreach (var entity in functions)
         {
             var function = FunctionState.Create(_acDomain, entity);
             _dicById.Add(function.Id, function);
             if (!_dicByCode.ContainsKey(function.Resource))
             {
                 _dicByCode.Add(function.Resource, new Dictionary <functionCode, FunctionState>(StringComparer.OrdinalIgnoreCase));
             }
             if (!_dicByCode[function.Resource].ContainsKey(function.Code))
             {
                 _dicByCode[function.Resource].Add(function.Code, function);
             }
         }
         _initialized = true;
         _acDomain.MessageDispatcher.DispatchMessage(new MemorySetInitializedEvent(this));
     }
 }
        private void OnPseudoClass(CssSelectorToken token)
        {
            _state = State.Data;
            _ready = true;

            if (token.Type == CssTokenType.Colon)
            {
                _state = State.PseudoElement;
                return;
            }
            else if (token.Type == CssTokenType.Function)
            {
                if (pseudoClassFunctions.TryGetValue(token.Data, out var creator))
                {
                    _state    = State.Function;
                    _function = creator.Invoke(this);
                    _ready    = false;
                    return;
                }
            }
            else if (token.Type == CssTokenType.Ident)
            {
                var sel = _pseudoClassSelector.Create(token.Data);

                if (sel != null)
                {
                    Insert(sel);
                    return;
                }
            }

            _valid = false;
        }
        /// <summary>
        /// Sets the state of functions 5 to 8 of a locomotive
        /// </summary>
        /// <param name="address">Address of the locomotive (0 - 9999)</param>
        /// <param name="f5">Function 5</param>
        /// <param name="f6">Function 6</param>
        /// <param name="f7">Function 7</param>
        /// <param name="f8">Function 8</param>
        public SetFunctionOperationInstruction_Group2Message(int address, FunctionState f5, FunctionState f6, FunctionState f7, FunctionState f8)
            : base(PacketHeaderType.LocomotiveFunction)
        {
            Payload.Add(Convert.ToByte(PacketIdentifier.LocomotiveFunctionRequest.SetFunctionOperationInstruction_Group2));

            byte[] data = new byte[3];

            if (address >= XpressNetConstants.MIN_LOCO_ADDRESS && address <= XpressNetConstants.MAX_LOCO_ADDRESS)
                ValueConverter.LocoAddress(address, out data[0], out data[1]);
            else
                throw new XpressNetProtocolViolationException("Number out of bounds");

            data[2] = 0x00;

            if (f8 == FunctionState.On)
                data[2] += 8;

            if (f7 == FunctionState.On)
                data[2] += 4;

            if (f6 == FunctionState.On)
                data[2] += 2;

            if (f5 == FunctionState.On)
                data[2] += 1;

            Payload.AddRange(data);
        }
        public void EventGridFailed(
            string hubName,
            string functionName,
            FunctionState functionState,
            string instanceId,
            string details,
            HttpStatusCode statusCode,
            string reason,
            long latencyMs)
        {
            FunctionType functionType = FunctionType.Orchestrator;

            EtwEventSource.Instance.EventGridNotificationFailed(
                hubName,
                LocalAppName,
                LocalSlotName,
                functionName,
                functionState,
                instanceId,
                details,
                (int)statusCode,
                reason,
                functionType,
                ExtensionVersion,
                IsReplay: false,
                latencyMs);

            this.logger.LogError(
                "{instanceId}: Function '{functionName} ({functionType})' failed to send a '{functionState}' notification event to Azure Event Grid. Status code: {statusCode}. Details: {details}. HubName: {hubName}. AppName: {appName}. SlotName: {slotName}. ExtensionVersion: {extensionVersion}. SequenceNumber: {sequenceNumber}. Latency: {latencyMs} ms.",
                instanceId, functionName, functionType, functionState, (int)statusCode, details, hubName,
                LocalAppName, LocalSlotName, ExtensionVersion, this.sequenceNumber++, latencyMs);
        }
Beispiel #20
0
        public void Reset(ListenPickUpMsg msg)
        {
            //if (_State != msg.State)
            {
                if (msg.State != FunctionState.Error)
                {
                    switch (msg.State)
                    {
                    case FunctionState.Executing:
                        if (string.IsNullOrEmpty(msg.OtherDst))
                        {
                            StateDescription = Resources.ForwardDescription + " " + msg.Dst;
                        }
                        else
                        {
                            StateDescription = Resources.ForwardDescription + " " + msg.OtherDst + " " +
                                               Resources.From + " " + msg.Dst;
                        }
                        break;

                    case FunctionState.Idle:
                    case FunctionState.Ready:
                        if (!StateDescription.Contains(Resources.RemoteForwardDescription))
                        {
                            StateDescription = "";
                        }
                        break;
                    }
                }
                State = msg.State;
            }
        }
        public void EventGridSuccess(
            string hubName,
            string functionName,
            FunctionState functionState,
            string version,
            string instanceId,
            string details,
            HttpStatusCode statusCode,
            string reason,
            long latencyMs)
        {
            FunctionType functionType = FunctionType.Orchestrator;
            bool         isReplay     = false;

            EtwEventSource.Instance.EventGridNotificationCompleted(
                hubName,
                LocalAppName,
                LocalSlotName,
                functionName,
                functionState,
                version,
                instanceId,
                details,
                statusCode,
                reason,
                functionType,
                ExtensionVersion,
                isReplay,
                latencyMs);

            this.logger.LogInformation(
                "{instanceId}: Function '{functionName} ({functionType})', sent a '{functionState}' notification event to Azure Event Grid. Status code: {statusCode}. Details: {details}. HubName: {hubName}. AppName: {appName}. SlotName: {slotName}. ExtensionVersion: {extensionVersion}. SequenceNumber: {sequenceNumber}. Latency: {latencyMs} ms.",
                instanceId, functionName, functionType, functionState, statusCode, details, hubName, LocalAppName, LocalSlotName, ExtensionVersion, this.sequenceNumber++, latencyMs);
        }
Beispiel #22
0
        public void To(int id)
        {
            _FirstTransferTryKO      = false;
            _ToTransfer              = null;
            _FromTransferDisplayName = "";
            if (_State == FunctionState.Idle)
            {
                List <TlfPosition> activeCalls = Top.Tlf.ActiveCalls;
                FunctionState      st          = FunctionState.Error;

                if (activeCalls.Count == 1)
                {
                    if ((activeCalls[0].State == TlfState.Set) || (activeCalls[0].State == TlfState.Conf))
                    {
                        TlfPosition tlf = activeCalls[0];
                        TlfPosition to  = Top.Tlf[id];

                        bool transferDone = false;
                        if (Top.Tlf[id].State == TlfState.Idle)
                        {
                            string toUri = to.Uri;
                            if (TlfManager.GetDisplayName(to.Uri) == null && to.Literal.Length > 0)
                            {
                                //Si to.Uri no tiene display name se añade el Literal como display name en la transferencia directa
                                toUri = "\"" + to.Literal + "\" " + to.Uri;
                            }
                            SipAgent.TransferCall(tlf.CallId, -1, toUri, null);

                            transferDone = true;
                        }
                        else if (Top.Tlf[id].State == TlfState.Hold)
                        {
                            SipAgent.HoldCall(activeCalls[0].CallId);
                            System.Threading.Thread.Sleep(50);
                            SipAgent.TransferCall(tlf.CallId, to.CallId, null, "\"" + to.Literal + "\"");
                            transferDone             = true;
                            _ToTransfer              = to;
                            _FromTransferDisplayName = "\"" + tlf.Literal + "\"";
                        }
                        if (transferDone)
                        {
                            _Logger.Debug("Iniciando transferencia...");
                            Top.Sip.TlfTransferStatus += OnTransferStatus;
                            AssociateCall              = tlf;

                            st = FunctionState.Executing;

                            Top.WorkingThread.Enqueue("SetSnmp", delegate()
                            {
                                string snmpString = Top.Cfg.PositionId + "_" + "TRANSFER" + "_" + tlf.Literal;
                                General.SafeLaunchEvent(SetSnmpString, this, new SnmpStringMsg <string, string>(Settings.Default.TlfFacilityOid, snmpString));
                            });
                        }
                    }
                }

                State = st;
            }
        }
Beispiel #23
0
 public void Reset()
 {
     if (_State != FunctionState.Idle)
     {
         ResetDescription();
         State = FunctionState.Idle;
     }
 }
Beispiel #24
0
 public void Reset(ListenPickUpMsg msg)
 {
     if (_State != msg.State)
     {
         StateDescription = msg.State == FunctionState.Executing ? Resources.ListenToStateDescription + " " + msg.Dst : "";
         State            = msg.State;
     }
 }
Beispiel #25
0
 public void Reset(FunctionState st)
 {
     if ((_State == FunctionState.Ready) || (_State == FunctionState.Executing))
     {
         _AssociatePosition = -1;
         State = st;
     }
 }
Beispiel #26
0
 private void SetNewState(FunctionState newState)
 {
     if (CurState == newState)
     {
         return;
     }
     PreState = CurState;
     CurState = newState;
 }
Beispiel #27
0
        public bool TryGetFunction(Guid functionId, out FunctionState function)
        {
            if (!_initialized)
            {
                Init();
            }
            Debug.Assert(functionId != Guid.Empty);

            return(_dicById.TryGetValue(functionId, out function));
        }
Beispiel #28
0
        public bool TryGetUiView(FunctionState function, out UiViewState view)
        {
            if (!_initialized)
            {
                Init();
            }
            if (function == null || function == FunctionState.Empty)
            {
                throw new ArgumentNullException("function");
            }

            return(_viewDicByFunction.TryGetValue(function, out view));
        }
Beispiel #29
0
    // אינטראקציית נתינת אנרג'ייזר לפקמן
    IEnumerator GivePacManEnergizer()
    {
        functionGivePacManEnergizer    = FunctionState.middle;                                            // סימון שהפונקציה החלה כדי שתבוצע רק פעם אחת
        ClickToMove.clickEnabled       = false;                                                           // הפסקת אפשרות השחקן להזזת הדמות הראשית
        PickDropObject.PickDropEnabled = false;                                                           // הפסקת אפשרות השחקן להרמת/הנחת אוביקטים
        transform.LookAt(PacMan.transform);                                                               // הסטת מבט הדמות הראשית לאוביקט
        CameraController.angleCurrent  = 180f;                                                            // סיבוב המצלמה ביחס לדמות הראשית כך שהבועות יראו היטב
        PacManCanvas.enabled           = false;                                                           // הסתרת הבועה
        PacManAnimator.applyRootMotion = false;                                                           // הפסקת הגדרה שאנימציה מזיזה את פקמן, כי בהמשך הוא צריך לנוע באמצעות הסוכן
        PacManAnimator.SetTrigger("idle");                                                                // העברת אנימציה למצב עמידה בבטלה
        PacMan.transform.Find("PacMan").transform.localPosition = Vector3.zero;                           // איפוס המיקום של פקמן, שהשתנה בעקבות אנימציית הסיבוב
        PacMan.transform.Find("PacMan").transform.localRotation = Quaternion.Euler(0, 180, 0);            // סיבוב פקמן ב 180 מעלות
        PacManCanvas.transform.localPosition = new Vector3(0, PacManCanvas.transform.localPosition.y, 0); // הזזת הבועה מעל פקמן
        GhostAnimator.enabled         = false;                                                            // הפסקת אנימציה של רוח הרפאים
        Ghost.transform.localRotation = Quaternion.Euler(0, 60, 0);                                       // קביעת מיקום רוח הרפאים
        PacManText.text      = ReverseString("הוא בדיוק מה שהייתי צריך\nתודה רבה על האנרג'ייזר!");        // הגדרת הטקסט
        PacManCanvas.enabled = true;                                                                      // הצגת הבועה
        yield return(new WaitForSeconds(timeDialogBubbleAppears));                                        // השהייה

        PacManCanvas.enabled = false;                                                                     // הסתרת הבועה
        Destroy(Energizer);                                                                               // השמדת הפטריה
        GhostAnimator.enabled = true;                                                                     // ביטול הפסקת אנימציה של רוח הרפאים
        yield return(new WaitForSeconds(3f));                                                             // השהייה

        Destroy(Ghost);                                                                                   // השמדת רוח הרפאים
        audioPacManGhost.Play();                                                                          // ניגון קול השמדת רוח הרפאים
        yield return(new WaitForSeconds(3));                                                              // השהייה

        PacMan.transform.Find("PacMan").transform.localRotation = Quaternion.identity;                    // ביטול סיבוב פקמן ב 180 מעלות
//      PacMan.transform.Find("PacMan").eulerAngles = Vector3.zero;
//      PacMan.transform.Find("PacMan").rotation = Quaternion.identity;
        yield return(new WaitForSeconds(3));                                                  // השהייה

        PacManText.text      = ReverseString("ולחזור למשחק שלי\nגם אני רוצה לצאת מפה");       // הגדרת הטקסט
        PacManCanvas.enabled = true;                                                          // הצגת הבועה
        yield return(new WaitForSeconds(timeDialogBubbleAppears));                            // השהייה

        PacManText.text = ReverseString("גברת פפר פקמן\nאני רוצה לחזור לאשתי");               // הגדרת הטקסט
        yield return(new WaitForSeconds(timeDialogBubbleAppears));                            // השהייה

        PacManText.text = ReverseString("באה מפיצה שחסר בה משולש\nאומרים שההשראה לצורה שלי"); // הגדרת הטקסט
        yield return(new WaitForSeconds(timeDialogBubbleAppears));                            // השהייה

        PacManText.text = ReverseString("בצורה המיוחדת שיש לי\nאשמח לעזור לך");               // הגדרת הטקסט
        yield return(new WaitForSeconds(timeDialogBubbleAppears));                            // השהייה

        PacManCanvas.enabled           = false;                                               // הסתרת הבועה
        ClickToMove.clickEnabled       = true;                                                // ביטול הפסקת אפשרות השחקן להזזת הדמות הראשית
        PickDropObject.PickDropEnabled = true;                                                // ביטול הפסקת אפשרות השחקן להרמת/הנחת אוביקטים
        functionGivePacManEnergizer    = FunctionState.end;                                   // סימון שהפונקציה הסתיימה כדי להמשיך לשלב הבא
    }
Beispiel #30
0
        private FunctionState[] _GetGroup1FunctionMapping(List <Func> functionList)
        {
            var functionsInGroup = 5;

            FunctionState[] functionMapping = new FunctionState[functionsInGroup];

            for (var cursor = 0; cursor < functionsInGroup; cursor++)
            {
                var function = functionList.FirstOrDefault(o => o.FunctionIndex == cursor);
                functionMapping[cursor] = function != null ? (function.State == FuncStates.On ? FunctionState.On : FunctionState.Off) : FunctionState.Off;
            }

            return(functionMapping);
        }
        private async Task SendNotificationAsync(
            EventGridEvent[] eventGridEventArray,
            string hubName,
            string functionName,
            string version,
            string instanceId,
            string reason,
            FunctionState functionState)
        {
            string        json      = JsonConvert.SerializeObject(eventGridEventArray);
            StringContent content   = new StringContent(json, Encoding.UTF8, "application/json");
            Stopwatch     stopWatch = Stopwatch.StartNew();

            // Details about the Event Grid REST API
            // https://docs.microsoft.com/en-us/rest/api/eventgrid/
            using (HttpResponseMessage result = await httpClient.PostAsync(this.config.EventGridTopicEndpoint, content))
            {
                var body = await result.Content.ReadAsStringAsync();

                if (result.IsSuccessStatusCode)
                {
                    this.config.TraceHelper.EventGridSuccess(
                        hubName,
                        functionName,
                        functionState,
                        version,
                        instanceId,
                        body,
                        result.StatusCode,
                        reason,
                        stopWatch.ElapsedMilliseconds);
                }
                else
                {
                    this.config.TraceHelper.EventGridFailed(
                        hubName,
                        functionName,
                        functionState,
                        version,
                        instanceId,
                        body,
                        result.StatusCode,
                        reason,
                        stopWatch.ElapsedMilliseconds);
                }
            }
        }
 public void EventGridNotificationFailed(
     string TaskHub,
     string AppName,
     string SlotName,
     string FunctionName,
     FunctionState FunctionState,
     string InstanceId,
     string Details,
     int StatusCode,
     string Reason,
     FunctionType FunctionType,
     string ExtensionVersion,
     bool IsReplay,
     long LatencyMs)
 {
     this.WriteEvent(211, TaskHub, AppName, SlotName, FunctionName, FunctionState, InstanceId, Details, StatusCode, Reason, FunctionType, ExtensionVersion, IsReplay, LatencyMs);
 }
Beispiel #33
0
 public static FunctionTr Create(FunctionState function)
 {
     if (function == null)
     {
         return null;
     }
     return new FunctionTr(function.AcDomain)
     {
         AppSystemId = function.AppSystem.Id,
         AppSystemCode = function.AppSystem.Code,
         AppSystemName = function.AppSystem.Name,
         Code = function.Code,
         CreateOn = function.CreateOn,
         Description = function.Description,
         DeveloperId = function.DeveloperId,
         Id = function.Id,
         IsManaged = function.IsManaged,
         IsEnabled = function.IsEnabled,
         ResourceCode = function.Resource.Code,
         ResourceTypeId = function.Resource.Id,
         ResourceName = function.Resource.Name,
         SortCode = function.SortCode
     };
 }