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); }
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); } }