コード例 #1
0
ファイル: Broker.cs プロジェクト: soolafsen/EmpyrionAPITools
        public static void HandleGameEvent(CmdId eventId, ushort seqNr, object data)
        {
            var apiEvent = new apiEvent(eventId, seqNr, data);

            log(() => $"receiving event {eventId.ToString()}:{seqNr}");

            Delegate handler;

            if (eventTable.TryGetValue(eventId, out handler))
            {
                handler.DynamicInvoke(new object[] { data });
            }


            if (!commandTracker.ContainsKey(seqNr))
            {
                return;
            }

            var outstandingRequestList = commandTracker[seqNr];

            var firstApplicableRequest = outstandingRequestList.FirstOrDefault(x => x.call.ResponseCmdId == eventId || eventId == CmdId.Event_Error);

            if (firstApplicableRequest == null)
            {
                return;
            }

            outstandingRequestList.Remove(firstApplicableRequest);

            if (outstandingRequestList.Count > 0)
            {
                commandTracker[seqNr] = outstandingRequestList;
            }
            else
            {
                commandTracker.Remove(seqNr);
            }

            if (eventId == CmdId.Event_Error && firstApplicableRequest.errorHandler != null)
            {
                firstApplicableRequest.errorHandler((ErrorInfo)data);
                return;
            }

            firstApplicableRequest.responseHandler(eventId, data);
        }
コード例 #2
0
        public static void HandleGameEvent(CmdId eventId, ushort seqNr, object data)
        {
            var apiEvent = new apiEvent(eventId, seqNr, data);

            Delegate handler;

            if (eventTable.TryGetValue(eventId, out handler))
            {
                handler.DynamicInvoke(new object[] { data });
            }

            var seqNrString = seqNr.ToString();

            if (!commandTracker.Contains(seqNrString))
            {
                return;
            }

            GenericAPICommand outstandingCommand = default(GenericAPICommand);

            lock (commandTracker)
            {
                outstandingCommand = (GenericAPICommand)commandTracker.Get(seqNrString);
                if (eventId == CmdId.Event_Error || outstandingCommand.validateResponse(eventId, seqNr, data))
                {
                    commandTracker.Remove(seqNrString);
                }
                else
                {
                    return;
                }
            }
            if (eventId == CmdId.Event_Error && outstandingCommand.errorHandler != null)
            {
                outstandingCommand.errorHandler((ErrorInfo)data);
            }
            else
            {
                outstandingCommand.responseHandler(eventId, data);
            }
        }