Example #1
0
        private async Task queueRecentMatchPages(string gamertag, int pages)
        {
            _logger.LogInformation($"Queueing {gamertag}'s recent matches");

            var queueMessages = new QueueEvent[pages];

            for (var i = 0; i < pages; i++)
            {
                queueMessages[i] = new QueueEvent
                {
                    Type    = QueueEventTypes.CacheRecentMatches,
                    Payload = new MatchHistoryPayload
                    {
                        Gamertag = gamertag,
                        Page     = i + 1,
                    },
                };
            }

            var tasks        = new List <Task>();
            var chunkyChunks = queueMessages.Split(10);

            foreach (var chunk in chunkyChunks)
            {
                tasks.Add(_sqsClient.SendMessageBatchAsync(chunk));
            }

            _logger.LogInformation($"{gamertag} has {pages} pages of recent matches over {tasks.Count} tasks");

            await Task.WhenAll(tasks.ToArray());
        }
Example #2
0
        /// <summary>
        /// Activates the next Event and keeps the queue running until it is empty
        /// </summary>
        private void NextQueueEvent()
        {
            // if the queue is empty, stop
            if (_queue.Count <= 0)
            {
                Running = false;
                OnQueueFinished?.Invoke();
                return;
            }

            Running = true;

            // get the next event and remove it from the queue
            QueueEvent evt = _queue[0];

            _queue.RemoveAt(0);

            // set the timer to the duration of the event so it can trigger the next one after this is finished and invoke the event
            _queueTimer.Duration      = evt.Data.Duration;
            _queueTimer.OnTimeElapsed = NextQueueEvent;
            evt.Action?.Invoke(evt.Data);

            // Start the timer
            _queueTimer.Reset();
            _queueTimer.Start();
        }
Example #3
0
        public void BuildRoom()
        {
            // Game Objects
            this.objects = new Dictionary <byte, Dictionary <int, GameObject> > {
                [(byte)LoadOrder.Platform]     = new Dictionary <int, GameObject>(),
                [(byte)LoadOrder.Enemy]        = new Dictionary <int, GameObject>(),
                [(byte)LoadOrder.Item]         = new Dictionary <int, GameObject>(),
                [(byte)LoadOrder.TrailingItem] = new Dictionary <int, GameObject>(),
                [(byte)LoadOrder.Character]    = new Dictionary <int, GameObject>(),
                [(byte)LoadOrder.Projectile]   = new Dictionary <int, GameObject>()
            };

            // Object Coordination and Cleanup
            this.markedForAddition = new List <GameObject>();
            this.markedForRemoval  = new List <GameObject>();

            // Build Tilemap with Correct Dimensions
            short xCount, yCount;

            RoomGenerate.DetectRoomSize(Systems.handler.levelContent.data.rooms[roomID], out xCount, out yCount);

            this.tilemap = new TilemapLevel(xCount, yCount);

            // Additional Components
            this.colors      = new ColorToggles();
            this.trackSys    = new TrackSystem();
            this.roomExits   = new RoomExits();
            this.queueEvents = new QueueEvent(this);

            // Generate Room Content (Tiles, Objects)
            RoomGenerate.GenerateRoom(this, Systems.handler.levelContent, roomID);

            // Prepare the Full Track System
            this.trackSys.SetupTrackSystem();
        }
Example #4
0
 private async Task StoreCommand(QueueEvent <CommandRequestWrapper> request)
 {
     if (this.storage != null)
     {
         // optionaly store the command/response so it can later be retrieved by the client (because the command was queued with no direct response)
         await this.storage.SaveAsync(request.Item.Data).AnyContext();
     }
 }
Example #5
0
        public override async Task <bool> Handle(QueueEvent <CommandRequestWrapper> request, CancellationToken cancellationToken)
        {
            if (request?.Item?.Data?.Command != null)
            {
                using (this.logger.BeginScope(new Dictionary <string, object>
                {
                    [LogPropertyKeys.CorrelationId] = request.Item.Data.CorrelationId
                }))
                {
                    // as this handler is called inside a singleton scope (due to CommandRequestQueueProcessor:ProcessItems)
                    // any ctor injections are also singleton. We need scoped commandhandlers (mediator default), so
                    // that is achieved by creating a scope explicity
                    using (var scope = this.serviceScopeFactory.CreateScope())
                    {
                        this.logger.LogInformation($"{{LogKey:l}} command request dequeued (name={request.Item.Data.Command.GetType().PrettyName()}, id={request.Item.Data.Command?.Id}, type=queue)", LogKeys.AppCommand);

                        var mediator = scope.ServiceProvider.GetService <IMediator>(); // =scoped
                        try
                        {
                            request.Item.Data.Started = DateTimeOffset.UtcNow;
                            await this.StoreCommand(request).AnyContext();

                            // TODO: use for new tracer scope request.Item.Data.ParentSpanId
                            var response = await mediator.Send(request.Item.Data.Command, cancellationToken).AnyContext(); // handler will be scoped too

                            request.Item.Data.Completed = DateTimeOffset.UtcNow;
                            request.Item.Data.Status    = CommandRequestStatus.Finished;

                            if (response != null)
                            {
                                var jResponse = JObject.FromObject(response);
                                if (!jResponse.GetValueByPath <bool>("cancelled"))
                                {
                                    var resultToken = jResponse.SelectToken("result") ?? jResponse.SelectToken("Result");
                                    request.Item.Data.Response = resultToken?.ToObject <object>();
                                }
                                else
                                {
                                    request.Item.Data.Status            = CommandRequestStatus.Cancelled;
                                    request.Item.Data.StatusDescription = jResponse.GetValueByPath <string>("cancelledReason");
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            request.Item.Data.Status            = CommandRequestStatus.Failed;
                            request.Item.Data.StatusDescription = ex.GetFullMessage();

                            this.logger.LogCritical(ex, ex.Message);
                        }

                        await this.StoreCommand(request).AnyContext();
                    }
                }
            }

            return(true);
        }
Example #6
0
    public QueueEvent CreateQueueEvent(string name, MyEventHandler listener)
    {
        QueueEvent ret = null;

        ret = new QueueEvent(name, listener, QueueEventFinished, DeleteEvent);
        queue_events.Add(ret);

        return(ret);
    }
Example #7
0
        private void AddQueueEvent(QueueEvent.Type queueType, int minSeconds = 0, int maxSeconds = 0, int bnetError = 0, GameServerInfo gsInfo = null)
        {
            QueueEvent item        = new QueueEvent(queueType, minSeconds, maxSeconds, bnetError, gsInfo);
            object     queueEvents = this.m_queueEvents;

            lock (queueEvents)
            {
                this.m_queueEvents.Enqueue(item);
            }
        }
Example #8
0
    public void PushEventForced(QueueEvent ev)
    {
        if (ev != null)
        {
            curr_events.Add(ev);

            ev.CallOnEventStart();

            ev.OnStart();

            last_pushed = ev;
        }
    }
Example #9
0
    public void ClearEvents()
    {
        for (int i = 0; i < curr_events.Count;)
        {
            QueueEvent curr_event = curr_events[i];

            curr_event.OnFinish();

            curr_event.CallOnEventFinish();
        }

        curr_events.Clear();
    }
Example #10
0
    public void PushEvent(QueueEvent ev, bool start_with_last = false)
    {
        if (ev != null)
        {
            if (start_with_last)
            {
                ev.PushWithLastEvent();
            }

            events_to_push.Add(ev);

            last_pushed = ev;
        }
    }
Example #11
0
        public QueueEvent GetQueueEvent()
        {
            QueueEvent result      = null;
            object     queueEvents = this.m_queueEvents;

            lock (queueEvents)
            {
                if (this.m_queueEvents.Count > 0)
                {
                    result = this.m_queueEvents.Dequeue();
                }
            }
            return(result);
        }
Example #12
0
        public override async Task <bool> Handle(QueueEvent <CountriesExportData> request, CancellationToken cancellationToken)
        {
            using (var scope = this.tracer?.BuildSpan("process export", LogKey, SpanKind.Internal).Activate(this.logger))
            {
                await Task.Run(() => this.logger.LogInformation($"{{LogKey:l}} countries data {request.Item.Data.Timestamp:o} (id={request.Item.Id}, type={this.GetType().PrettyName()})", LogKey), cancellationToken).AnyContext();

                if (RandomGenerator.GenerateInt(0, 100) % 3 == 0) // divides by 3 and checks for the remainder. A number that is divisable by 3 has no remainder (and thus ==0 and the exception will be thrown)
                {
                    throw new NaosException("Oops, the export processing randomly failed");
                }

                return(true);
            }
        }
Example #13
0
        public QueueEvent GetQueueEvent()
        {
            QueueEvent         result      = null;
            Queue <QueueEvent> queueEvents = this.m_queueEvents;

            lock (queueEvents)
            {
                if (this.m_queueEvents.get_Count() > 0)
                {
                    result = this.m_queueEvents.Dequeue();
                }
            }
            return(result);
        }
Example #14
0
        private void AddQueueEvent(QueueEvent.Type queueType, int minSeconds = 0, int maxSeconds = 0, int bnetError = 0, GameServerInfo gsInfo = null)
        {
            QueueEvent queueEvent   = new QueueEvent(queueType, minSeconds, maxSeconds, bnetError, gsInfo);
            object     mQueueEvents = this.m_queueEvents;

            Monitor.Enter(mQueueEvents);
            try
            {
                this.m_queueEvents.Enqueue(queueEvent);
            }
            finally
            {
                Monitor.Exit(mQueueEvents);
            }
        }
Example #15
0
        // ######################## FUNCTIONALITY ######################## //
        /// <summary>
        /// Adds a new Event to the Queue. If the queue was empty before, it is executed immediately
        /// </summary>
        /// <param name="action">Delegate for starting the event</param>
        /// <param name="data">Data object derived from EventData containing all the information the event needs</param>
        public void AddEvent(Action <EventData> action, EventData data)
        {
            // create the event and add it to the queue
            QueueEvent evt = new QueueEvent()
            {
                Action = action,
                Data   = data
            };

            _queue.Add(evt);

            // if the queue is not running we need to start it
            if (_autoplay && !Running)
            {
                NextQueueEvent();
            }
        }
Example #16
0
        public void AddQueueEvent(QueueEvent qEvent)
        {
            switch (qEvent)
            {
            case QueueEvent.Enqueue:
                this.counters.CurrentQueueLength.Increment();
                break;

            case QueueEvent.Dequeue:
                this.counters.CurrentQueueLength.Decrement();
                break;
            }
            if (this.queueLength.AddValue(this.counters.CurrentQueueLength.RawValue))
            {
                this.UpdateQueueSizePercentileCounters();
            }
        }
Example #17
0
        public QueueEvent GetQueueEvent()
        {
            QueueEvent queueEvent   = null;
            object     mQueueEvents = this.m_queueEvents;

            Monitor.Enter(mQueueEvents);
            try
            {
                if (this.m_queueEvents.Count > 0)
                {
                    queueEvent = this.m_queueEvents.Dequeue();
                }
            }
            finally
            {
                Monitor.Exit(mQueueEvents);
            }
            return(queueEvent);
        }
Example #18
0
    /// <summary>
    /// 增加一个延迟事件到编辑器更新队列中
    /// </summary>
    /// <param name="handler"></param>
    /// <param name="delay"></param>
    /// <param name="frameDelay">是否使用帧延时,使用帧延时,则 delay 被当作帧数处理</param>
    public static void QueueDelayEvent <T0, T1, T2, T3>(Action <T0, T1, T2, T3> handler, T0 arg0, T1 arg1, T2 arg2, T3 arg3, float delay, string name = null, bool frameDelay = false)
    {
        if (name != null)
        {
            var n = update.GetInvocationList();
            foreach (var i in n)
            {
                var qe = i.Target as QueueEvent;
                if (qe == null || qe.name == null || qe.name != name)
                {
                    continue;
                }
                qe.Set(handler, timeSinceStartup, delay, name, arg0, arg1, arg2, arg3, frameDelay);
                return;
            }
        }

        var e = new QueueEvent(handler, timeSinceStartup, delay, name, 4, arg0, arg1, arg2, arg3, frameDelay);

        update += e.Update;
    }
        public async Task PublishAsync(
            string queueName,
            QueueEvent @event,
            CancellationToken cancellationToken = default)
        {
            var eventName   = @event.GetType().Name.Replace(_QUEUEEVENTSUFFIX, string.Empty);
            var jsonMessage = JsonConvert.SerializeObject(@event);
            var body        = Encoding.UTF8.GetBytes(jsonMessage);

            var message = new Message
            {
                MessageId = Guid.NewGuid().ToString(),
                Body      = body,
                Label     = eventName,
            };

            var client = _connection.CreateClient(queueName);

            cancellationToken.ThrowIfCancellationRequested();

            await client.SendAsync(message);
        }
Example #20
0
    public void UpdateEvents()
    {
        if (curr_events.Count > 0)
        {
            for (int i = 0; i < curr_events.Count;)
            {
                QueueEvent curr_event = curr_events[i];

                if (!curr_event.GetFinished())
                {
                    curr_event.OnUpdate();

                    ++i;
                }
                else
                {
                    curr_event.OnFinish();

                    curr_event.CallOnEventFinish();

                    curr_events.RemoveAt(i);
                }
            }
        }
        else
        {
            if (events_to_push.Count > 0)
            {
                bool first = true;
                for (int i = 0; i < events_to_push.Count;)
                {
                    QueueEvent curr_event = events_to_push[i];

                    bool add = false;

                    if (first)
                    {
                        add = true;

                        first = false;
                    }
                    else if (curr_event.GetPushWithLastEvent())
                    {
                        add = true;
                    }

                    if (add)
                    {
                        curr_events.Add(curr_event);

                        events_to_push.RemoveAt(i);

                        curr_event.CallOnEventStart();

                        curr_event.OnStart();
                    }
                    else
                    {
                        break;
                    }
                }
            }
        }
    }
Example #21
0
        void manager_UnhandledEvent(object sender, ManagerEvent e)
        {
            log.Debug("New unhandled event received: " + e.GetType().Name);
            LineControl lc = null;

            //StateServer
            switch (e.GetType().Name)
            {
            case "AGIExecEvent":
                AGIExecEvent agievent = e as AGIExecEvent;
                break;

            case "AlarmClearEvent":
                AlarmClearEvent alarmclear = e as AlarmClearEvent;
                break;

            case "AlarmEvent":
                AlarmEvent alarmevent = e as AlarmEvent;
                break;

            case "AsyncAGIEvent":
                AsyncAGIEvent asyncagievent = e as AsyncAGIEvent;
                break;

            case "BridgeEvent":
                BridgeEvent bridgeevent = e as BridgeEvent;
                break;

            case "CdrEvent":
                CdrEvent cdrevent = e as CdrEvent;
                break;

            case "ChannelReloadEvent":
                ChannelReloadEvent channelreload = e as ChannelReloadEvent;
                break;

            case "ChannelUpdateEvent":
                ChannelUpdateEvent channelupdate = e as ChannelUpdateEvent;
                break;

            case "ConnectEvent":
                ConnectEvent connectevent = e as ConnectEvent;
                break;

            case "ConnectionStateEvent":
                ConnectionStateEvent connectionstate = e as ConnectionStateEvent;
                break;

            case "DBGetResponseEvent":
                DBGetResponseEvent dbget = e as DBGetResponseEvent;
                log.Debug("DBGet response: " + dbget.ToString());
                switch (dbget.Family)
                {
                case "DND":
                    ss.SetLineControl(setLineControlDND(dbget.Key, true));
                    break;

                case "CF":
                    ss.SetLineControl(setLineControlForward(dbget.Key, dbget.Val));
                    break;
                }
                break;

            case "DialEvent":
                DialEvent dial = e as DialEvent;
                log.Debug("Dial event: " + dial.ToString());
                break;

            case "DisconnectEvent":
                DisconnectEvent disconnect = e as DisconnectEvent;
                log.Debug("Disconnect event: " + disconnect.ToString());
                break;

            case "DNDStateEvent":
                DNDStateEvent dndstate = e as DNDStateEvent;
                log.Debug("DND state event: " + dndstate.ToString());
                break;

            case "ExtensionStatusEvent":
                ExtensionStatusEvent extensionstatus = e as ExtensionStatusEvent;
                log.Debug("Extension status event: " + extensionstatus.ToString() + ", status: " + extensionstatus.Status + ", hint: " + extensionstatus.Hint);
                ss.SetLineControl(getLineControlFromExtensionStatusEvent(extensionstatus));
                break;

            case "FaxReceivedEvent":
                FaxReceivedEvent faxreceived = e as FaxReceivedEvent;
                break;

            case "HangupEvent":
                HangupEvent hangup = e as HangupEvent;
                log.Debug("Hangup event: " + hangup.ToString() + " callerid: " + hangup.CallerId + " calleridnum: " + hangup.CallerIdNum);
                //line control
                if (channels.Contains(hangup.Channel))
                {
                    lc = getLineControl((string)channels[hangup.Channel]);
                    int hi = 0;
                    LineControlConnection[] newLCC = null;
                    if (lc.lineControlConnection.Length > 1)
                    {
                        newLCC = new LineControlConnection[lc.lineControlConnection.Length - 1];
                        foreach (LineControlConnection hlcc in lc.lineControlConnection)
                        {
                            if (hlcc.callid != hangup.Channel)
                            {
                                newLCC[hi] = hlcc;
                                hi++;
                            }
                        }
                    }
                    lc.lineControlConnection = newLCC;
                    ss.SetLineControl(lc);
                    channels.Remove(hangup.Channel);
                }

                //missed calls
                callToFind = hangup.UniqueId.Substring(0, 6) + "," + hangup.UniqueId.Substring(6);
                Call mCall = missedCalls.Find(FindCall);
                if (mCall != null)
                {
                    log.Debug("Missed call finded for callid: " + hangup.UniqueId);
                    AddCallLogs(mCall.callee, mCall);
                    if (missedCalls.Remove(mCall))
                    {
                        log.Debug("Call " + mCall.callId + " successfully removed from missedcall cache");
                    }
                    else
                    {
                        log.Debug("Call " + mCall.callId + " cannot be removed from missedcall cache");
                    }
                }
                break;

            case "HoldedCallEvent":
                HoldedCallEvent holdedcall = e as HoldedCallEvent;
                break;

            case "HoldEvent":
                HoldEvent holdevent = e as HoldEvent;
                break;

            case "JabberEvent":
                JabberEvent jabberevent = e as JabberEvent;
                break;

            case "JitterBufStatsEvent":
                JitterBufStatsEvent jitter = e as JitterBufStatsEvent;
                break;

            case "JoinEvent":
                JoinEvent join = e as JoinEvent;
                break;

            case "LeaveEvent":
                LeaveEvent leave = e as LeaveEvent;
                break;

            case "LinkEvent":
                LinkEvent link = e as LinkEvent;
                log.Debug("Link event: " + link.ToString());
                lc = getLineControl(link.CallerId1);
                if (lc != null)
                {
                    foreach (LineControlConnection linklcc in lc.lineControlConnection)
                    {
                        if (linklcc.callid == link.Channel1)
                        {
                            linklcc.contact = link.CallerId2;
                            ss.SetLineControl(lc);
                            break;
                        }
                    }
                }
                lc = getLineControl(link.CallerId2);
                if (lc != null)
                {
                    foreach (LineControlConnection linklcc in lc.lineControlConnection)
                    {
                        if (linklcc.callid == link.Channel2)
                        {
                            linklcc.contact = link.CallerId1;
                            ss.SetLineControl(lc);
                            break;
                        }
                    }
                }
                break;

            case "LogChannelEvent":
                LogChannelEvent logchannel = e as LogChannelEvent;
                break;

            case "ManagerEvent":
                ManagerEvent managerevent = e;
                break;

            case "MeetmeEndEvent":
                MeetmeEndEvent meetmeend = e as MeetmeEndEvent;
                break;

            case "MeetmeJoinEvent":
                MeetmeJoinEvent meetmejoin = e as MeetmeJoinEvent;
                break;

            case "MeetmeLeaveEvent":
                MeetmeLeaveEvent meetmeleave = e as MeetmeLeaveEvent;
                break;

            case "MeetmeMuteEvent":
                MeetmeMuteEvent meetmemute = e as MeetmeMuteEvent;
                break;

            case "MeetmeStopTalkingEvent":
                MeetmeStopTalkingEvent meetmestoptalking = e as MeetmeStopTalkingEvent;
                break;

            case "MeetmeTalkingEvent":
                MeetmeTalkingEvent meetmetalking = e as MeetmeTalkingEvent;
                break;

            case "MeetmeTalkRequestEvent":
                MeetmeTalkRequestEvent meetmetalkrequest = e as MeetmeTalkRequestEvent;
                break;

            case "MessageWaitingEvent":
                MessageWaitingEvent messagewaiting = e as MessageWaitingEvent;
                log.Debug("Message waiting event: " + messagewaiting.ToString());
                lc = getLineControl(messagewaiting.Mailbox.Substring(0, messagewaiting.Mailbox.IndexOf("@")));
                if (lc != null)
                {
                    if (messagewaiting.Waiting > 0)
                    {
                        lc.mwiOn = true;
                    }
                    else
                    {
                        lc.mwiOn = false;
                    }
                    ss.SetLineControl(lc);
                }
                break;

            case "MobileStatusEvent":
                MobileStatusEvent mobilestatus = e as MobileStatusEvent;
                break;

            case "ModuleLoadReportEvent":
                ModuleLoadReportEvent moduleload = e as ModuleLoadReportEvent;
                break;

            case "MonitorStartEvent":
                MonitorStartEvent monitorstart = e as MonitorStartEvent;
                break;

            case "MonitorStopEvent":
                MonitorStopEvent monitorstop = e as MonitorStopEvent;
                break;

            case "NewAccountCodeEvent":
                NewAccountCodeEvent newaccountcode = e as NewAccountCodeEvent;
                break;

            case "NewCallerIdEvent":
                NewCallerIdEvent newcallerid = e as NewCallerIdEvent;
                log.Debug("New caller id envent: " + newcallerid.ToString());
                break;

            case "NewChannelEvent":
                NewChannelEvent newchannel = e as NewChannelEvent;
                log.Debug("New Channel event: " + newchannel.ToString());
                CommandAction   ca = new CommandAction("core show channel " + newchannel.Channel);
                CommandResponse cr = (CommandResponse)manager.SendAction(ca, 10000);
                log.Debug("Channel info: " + cr.ToString());
                string dn = newchannel.CallerIdNum;
                log.Debug("Retreive call information...");
                bool callerIdUnknown = true;
                if (newchannel.CallerIdNum != "<unknown>")
                {
                    callerIdUnknown = false;
                }
                else
                {
                    foreach (string s in cr.Result)
                    {
                        if (s.Contains("Caller ID:"))
                        {
                            dn = s.Substring(s.LastIndexOf(" "));
                            break;
                        }
                    }
                }
                Call newOutboundCall = getOutboundCallFromChannelInfo(cr.Result, callerIdUnknown);
                if (newOutboundCall != null)
                {
                    Call missedCall = newOutboundCall;
                    AddCallLogs(dn, newOutboundCall);
                    dnToFind = newOutboundCall.callee;
                    if (linecontrols.Find(FindLineControl) != null)
                    {
                        log.Debug("This call will be put in missedcall cache: " + missedCall.callId);
                        missedCall.type = CallType.missed;
                        missedCalls.Add(missedCall);
                    }
                }
                break;

            case "NewExtenEvent":
                NewExtenEvent newexten = e as NewExtenEvent;
                log.Debug("New exten event: " + newexten.ToString());
                string   channel      = "";
                char[]   splitter     = { '/' };
                string[] splitchannel = newexten.Channel.Split(splitter);
                splitter[0]  = '-';
                splitchannel = splitchannel[1].Split(splitter);
                channel      = splitchannel[0];
                //DND?
                if (newexten.Extension == Properties.Settings.Default.FeatureCodeDNDToggle && newexten.Application == "Playback")
                {
                    switch (newexten.AppData)
                    {
                    case "do-not-disturb&activated":
                        log.Debug("Successfully activate dnd for channel: " + channel);
                        ss.SetLineControl(setLineControlDND(channel, true));
                        break;

                    case "do-not-disturb&de-activated":
                        log.Debug("Successfully deactivate dnd for channel: " + channel);
                        ss.SetLineControl(setLineControlDND(channel, false));
                        break;
                    }
                }
                //Forward all?
                else if (newexten.Extension.Contains(Properties.Settings.Default.FeatureCodeCallForwardAllActivate) && newexten.Application == "Playback" && newexten.AppData == "call-fwd-unconditional&for&extension")
                {
                    string forward = newexten.Extension.Substring(Properties.Settings.Default.FeatureCodeCallForwardAllActivate.Length);
                    log.Debug("Call forward all from channel: " + channel + " to " + forward);
                    ss.SetLineControl(setLineControlForward(channel, forward));
                }
                // UnForwardAll
                else if (newexten.Extension == Properties.Settings.Default.FeatureCodeCallForwardAllDeactivate && newexten.Application == "Playback" && newexten.AppData == "call-fwd-unconditional&de-activated")
                {
                    log.Debug("Call unforward all from channel: " + channel);
                    ss.SetLineControl(setLineControlForward(channel, ""));
                }
                break;

            case "NewStateEvent":
                NewStateEvent newstate = e as NewStateEvent;
                log.Debug("New State event: " + newstate.ToString());
                LineControl             newstateLc   = getLineControl(newstate.CallerId);
                LineControlConnection[] newStateLccs = null;
                int i = 0;
                if (newstateLc.lineControlConnection != null)
                {
                    bool isContained = false;
                    foreach (LineControlConnection elcc in newstateLc.lineControlConnection)
                    {
                        if (elcc.callid == newstate.Channel)
                        {
                            isContained  = true;
                            newStateLccs = newstateLc.lineControlConnection;
                            break;
                        }
                        i++;
                    }
                    if (!isContained)
                    {
                        i            = 0;
                        newStateLccs = new LineControlConnection[newstateLc.lineControlConnection.Length + 1];
                        foreach (LineControlConnection newstateLcc in newstateLc.lineControlConnection)
                        {
                            newStateLccs[i] = newstateLcc;
                            i++;
                        }
                    }
                }
                else
                {
                    newStateLccs    = new LineControlConnection[1];
                    newStateLccs[0] = new LineControlConnection();
                }
                try
                {
                    switch (newstate.State)
                    {
                    case "Up":
                        //received call?
                        callToFind = newstate.UniqueId;
                        Call rCall = missedCalls.Find(FindCall);
                        if (rCall != null)
                        {
                            log.Debug("Missed call finded: " + callToFind + ", this call will be received");
                            rCall.type = CallType.received;
                            AddCallLogs(rCall.callee, rCall);
                            missedCalls.Remove(rCall);
                        }
                        if (newStateLccs != null)
                        {
                            if (!channels.Contains(newstate.Channel))
                            {
                                channels.Add(newstate.Channel, newstate.CallerId);
                            }
                            newStateLccs[i].callid        = newstate.Channel;
                            newStateLccs[i].remoteState   = Wybecom.TalkPortal.CTI.Proxy.ConnectionState.established;
                            newStateLccs[i].state         = Wybecom.TalkPortal.CTI.Proxy.ConnectionState.established;
                            newStateLccs[i].terminalState = TerminalState.talking;
                        }
                        break;

                    case "Ringing":
                        if (newStateLccs != null)
                        {
                            if (!channels.Contains(newstate.Channel))
                            {
                                channels.Add(newstate.Channel, newstate.CallerId);
                            }
                            newStateLccs[i].callid        = newstate.Channel;
                            newStateLccs[i].remoteState   = Wybecom.TalkPortal.CTI.Proxy.ConnectionState.established;
                            newStateLccs[i].state         = Wybecom.TalkPortal.CTI.Proxy.ConnectionState.alerting;
                            newStateLccs[i].terminalState = TerminalState.ringing;
                        }
                        break;

                    case "Ring":
                        if (newStateLccs != null)
                        {
                            if (!channels.Contains(newstate.Channel))
                            {
                                channels.Add(newstate.Channel, newstate.CallerId);
                            }
                            newStateLccs[i].callid        = newstate.Channel;
                            newStateLccs[i].remoteState   = Wybecom.TalkPortal.CTI.Proxy.ConnectionState.alerting;
                            newStateLccs[i].state         = Wybecom.TalkPortal.CTI.Proxy.ConnectionState.dialing;
                            newStateLccs[i].terminalState = TerminalState.inuse;
                        }
                        break;
                    }
                }
                catch (Exception stateException)
                {
                    log.Debug("NewState exception: " + stateException.Message);
                }
                if (newstateLc != null)
                {
                    newstateLc.lineControlConnection = newStateLccs;
                    ss.SetLineControl(newstateLc);
                }
                break;

            case "OriginateResponseEvent":
                OriginateResponseEvent originateresponse = e as OriginateResponseEvent;
                break;

            case "ParkedCallEvent":
                ParkedCallEvent parkedcall = e as ParkedCallEvent;
                break;

            case "ParkedCallGiveUpEvent":
                ParkedCallGiveUpEvent parkedcallgiveup = e as ParkedCallGiveUpEvent;
                break;

            case "ParkedCallsCompleteEvent":
                ParkedCallsCompleteEvent parkedcallscomplete = e as ParkedCallsCompleteEvent;
                break;

            case "ParkedCallTimeOutEvent":
                ParkedCallTimeOutEvent parkedcalltimeout = e as ParkedCallTimeOutEvent;
                break;

            case "PeerEntryEvent":
                log.Debug("SipAction: one peer entry event received, " + e.ToString());
                PeerEntryEvent peerentry = e as PeerEntryEvent;
                peers.Add(peerentry);
                ss.SetLineControl(getLineControlFromPeerEntry(peerentry));
                break;

            case "PeerlistCompleteEvent":
                log.Debug("SipAction: peer list completed " + e.ToString());
                PeerlistCompleteEvent peerlistcomplete = e as PeerlistCompleteEvent;
                acs.setPeers(peers);
                break;

            case "PeerStatusEvent":
                PeerStatusEvent peerstatus = e as PeerStatusEvent;
                log.Debug("Peer status: " + peerstatus.ToString());
                break;

            case "PRIEvent":
                PRIEvent pri = e as PRIEvent;
                break;

            case "RegistryEvent":
                RegistryEvent registry = e as RegistryEvent;
                break;

            case "ReloadEvent":
                ReloadEvent reload = e as ReloadEvent;
                break;

            case "RenameEvent":
                RenameEvent rename = e as RenameEvent;
                break;

            case "ResponseEvent":
                ResponseEvent response = e as ResponseEvent;
                break;

            case "RTCPReceivedEvent":
                RTCPReceivedEvent rtcpreceived = e as RTCPReceivedEvent;
                break;

            case "RTCPSentEvent":
                RTCPSentEvent rtcpsent = e as RTCPSentEvent;
                break;

            case "RTPReceiverStatEvent":
                RTPReceiverStatEvent rtpreceiver = e as RTPReceiverStatEvent;
                break;

            case "RTPSenderStatEvent":
                RTPSenderStatEvent rtpsender = e as RTPSenderStatEvent;
                break;

            case "ShowDialPlanCompleteEvent":
                ShowDialPlanCompleteEvent showdialplan = e as ShowDialPlanCompleteEvent;
                break;

            case "ShutdownEvent":
                ShutdownEvent shutdown = e as ShutdownEvent;
                break;

            case "StatusCompleteEvent":
                StatusCompleteEvent statuscomplete = e as StatusCompleteEvent;
                break;

            case "StatusEvent":
                StatusEvent status = e as StatusEvent;
                break;

            case "TransferEvent":
                TransferEvent transfer = e as TransferEvent;
                break;

            case "UnholdEvent":
                UnholdEvent unhold = e as UnholdEvent;
                break;

            case "UnknownEvent":
                UnknownEvent unknown = e as UnknownEvent;
                break;

            case "UnlinkEvent":
                UnlinkEvent unlink = e as UnlinkEvent;
                log.Debug("Unlink event : " + unlink.ToString());
                LineControlConnection[] lccs = null;
                i  = 0;
                lc = getLineControl(unlink.CallerId1);
                if (lc != null)
                {
                    if (lc.lineControlConnection.Length > 1)
                    {
                        lccs = new LineControlConnection[lc.lineControlConnection.Length - 1];
                        foreach (LineControlConnection linklcc in lc.lineControlConnection)
                        {
                            if (linklcc.callid != unlink.Channel1)
                            {
                                lccs[i] = linklcc;
                                i++;
                                break;
                            }
                        }
                    }
                    else
                    {
                        lc.lineControlConnection = null;
                    }
                    ss.SetLineControl(lc);
                }
                i  = 0;
                lc = getLineControl(unlink.CallerId2);
                if (lc != null)
                {
                    if (lc.lineControlConnection.Length > 1)
                    {
                        lccs = new LineControlConnection[lc.lineControlConnection.Length - 1];
                        foreach (LineControlConnection linklcc in lc.lineControlConnection)
                        {
                            if (linklcc.callid != unlink.Channel2)
                            {
                                lccs[i] = linklcc;
                                i++;
                                break;
                            }
                        }
                    }
                    else
                    {
                        lc.lineControlConnection = null;
                    }
                    ss.SetLineControl(lc);
                }
                break;

            case "UnparkedCallEvent":
                UnparkedCallEvent unparked = e as UnparkedCallEvent;
                break;

            case "UserEvent":
                UserEvent user = e as UserEvent;
                break;

            case "VarSetEvent":
                VarSetEvent varset = e as VarSetEvent;
                break;

            case "ZapShowChannelsCompleteEvent":
                ZapShowChannelsCompleteEvent zapshowchannelscomplete = e as ZapShowChannelsCompleteEvent;
                break;

            case "ZapShowChannelsEvent":
                ZapShowChannelsEvent zapshowchannels = e as ZapShowChannelsEvent;
                break;
            }
            //ACDConnector
            switch (e.GetType().Name)
            {
            case "AgentCallbackLoginEvent":
                AgentCallbackLoginEvent agentcallbacklogin = e as AgentCallbackLoginEvent;
                break;

            case "AgentCallbackLogoffEvent":
                AgentCallbackLogoffEvent agentcallbacklogoff = e as AgentCallbackLogoffEvent;
                break;

            case "AgentCalledEvent":
                AgentCalledEvent agentcalled = e as AgentCalledEvent;
                break;

            case "AgentCompleteEvent":
                AgentCompleteEvent agentcomplete = e as AgentCompleteEvent;
                break;

            case "AgentConnectEvent":
                AgentConnectEvent agentconnect = e as AgentConnectEvent;
                break;

            case "AgentDumpEvent":
                AgentDumpEvent agentdump = e as AgentDumpEvent;
                break;

            case "AgentLoginEvent":
                AgentLoginEvent agentlogin = e as AgentLoginEvent;
                break;

            case "AgentLogoffEvent":
                AgentLogoffEvent agentlogoff = e as AgentLogoffEvent;
                break;

            case "AgentsCompleteEvent":
                AgentsCompleteEvent agentscomplete = e as AgentsCompleteEvent;
                break;

            case "AgentsEvent":
                AgentsEvent agentevent = e as AgentsEvent;
                break;

            case "QueueCallerAbandonEvent":
                QueueCallerAbandonEvent queuecallerabandon = e as QueueCallerAbandonEvent;
                break;

            case "QueueEntryEvent":
                QueueEntryEvent queueentry = e as QueueEntryEvent;
                break;

            case "QueueEvent":
                QueueEvent queue = e as QueueEvent;
                break;

            case "QueueMemberEvent":
                QueueMemberEvent queuemember = e as QueueMemberEvent;
                break;

            case "QueueMemberPausedEvent":
                QueueMemberPausedEvent queuememberpaused = e as QueueMemberPausedEvent;
                break;

            case "QueueMemberPenaltyEvent":
                QueueMemberPenaltyEvent queuememberpenalty = e as QueueMemberPenaltyEvent;
                break;

            case "QueueMemberRemovedEvent":
                QueueMemberRemovedEvent queuememberremoved = e as QueueMemberRemovedEvent;
                break;

            case "QueueMemberStatusEvent":
                QueueMemberStatusEvent queuememberstatus = e as QueueMemberStatusEvent;
                break;

            case "QueueParamsEvent":
                QueueParamsEvent queueparams = e as QueueParamsEvent;
                break;

            case "QueueStatusCompleteEvent":
                QueueStatusCompleteEvent queuestatuscomplete = e as QueueStatusCompleteEvent;
                break;
            }
        }
Example #22
0
 private void OnController3Stoped(QueueEvent ev)
 {
     controller_3_moving = false;
 }
Example #23
0
 public QueueItem(QueueEvent method)
 {
     this.method = method;
 }
Example #24
0
 private void OnSelectingGamepadsLoad(QueueEvent ev)
 {
     ControllerSelectionUI.Instance.SetSelectingGamepads(true);
 }
Example #25
0
 /// <summary>
 /// Add a method to be queued. The method will be called when the event (traveling at c) has reached the camera.
 /// </summary>
 /// <param name="method">The method to be called</param>
 public void QueueMethod(QueueEvent method)
 {
     eventQueue.Add(new QueueItem(method));
 }
        /// <summary>
        /// Deserialize the message
        /// </summary>
        /// <param name="map">An <see cref="OSDMap"/> containing the data</param>
        public override void Deserialize(OSDMap map)
        {
            Sequence = map["id"].AsInteger();
            OSDArray arrayEvents = (OSDArray)map["events"];

            MessageEvents = new QueueEvent[arrayEvents.Count];

            for (int i = 0; i < arrayEvents.Count; i++)
            {
                OSDMap eventMap = (OSDMap)arrayEvents[i];
                QueueEvent ev = new QueueEvent();

                ev.MessageKey = eventMap["message"].AsString();
                ev.EventMessage = MessageUtils.DecodeEvent(ev.MessageKey, (OSDMap)eventMap["body"]);
                MessageEvents[i] = ev;
            }
        }
        public static long Solve(int[] a, int[] b, int[] c, int[] d)
        {
            SortedDictionary <int, QueueEvent> events = new SortedDictionary <int, QueueEvent>();
            QueueEvent evt;

            for (int i = 0; i < a.Length; i++)
            {
                if (!events.TryGetValue(a[i], out evt))
                {
                    evt          = new QueueEvent();
                    events[a[i]] = evt;
                }

                evt.NewShots++;
            }

            for (int i = 0; i < b.Length; i++)
            {
                if (!events.TryGetValue(b[i], out evt))
                {
                    evt          = new QueueEvent();
                    events[b[i]] = evt;
                }

                evt.LeaveShots++;
            }

            for (int i = 0; i < c.Length; i++)
            {
                if (!events.TryGetValue(c[i], out evt))
                {
                    evt          = new QueueEvent();
                    events[c[i]] = evt;
                }

                evt.NewPlayers++;
            }

            for (int i = 0; i < d.Length; i++)
            {
                if (!events.TryGetValue(d[i], out evt))
                {
                    evt          = new QueueEvent();
                    events[d[i]] = evt;
                }

                evt.LeavePlayers++;
            }

            int result  = 0;
            int shots   = 0;
            int players = 0;

            foreach (var kv in events)
            {
                evt      = kv.Value;
                result  += evt.NewShots * (players + evt.NewPlayers) + shots * evt.NewPlayers;
                shots   += evt.NewShots - evt.LeaveShots;
                players += evt.NewPlayers - evt.LeavePlayers;
            }

            return(result);
        }