public Task SendRequest(Eleon.Modding.CmdId cmdID, object data)
        {
            (var trackingId, var task) = _requestTracker.GetNewTaskCompletionSource <object>();

            SendRequest(cmdID, trackingId, data);

            return(task);
        }
 public void SendRequest(Eleon.Modding.CmdId cmdId, ushort seqNr, object data)
 {
     ModProtocol.Package p = new ModProtocol.Package(cmdId, 0, seqNr, data);
     lock (clients) {
         foreach (ModProtocol con in clients)
         {
             con.AddToSendQueue(p);
         }
     }
 }
        private void SendRequest(Eleon.Modding.CmdId cmdID, ushort seqNr, object data)
        {
            var newFormat = DateTime.Now.ToString("R") + " - " + "SendRequest: Command {0} SeqNr: {1}";

            _traceSource.TraceEvent(TraceEventType.Information, 1, newFormat, cmdID, seqNr);
            //$$_traceSource.TraceEvent(TraceEventType.Information, 1, "SendRequest: Command {0} SeqNr: {1}", cmdID, seqNr);
            if (_client != null)
            {
                _client.Send(cmdID, (ushort)seqNr, data);
            }
            else
            {
                DebugLog("SendRequest: _client is null");
            }
        }
        private void OnClient_GameEventReceived(EPMConnector.ModProtocol.Package p)
        {
            try
            {
                DebugLog("OnClient_GameEventReceived: Command {0} SeqNr: {1}", p.cmd, p.seqNr);

                if (p.cmd == Eleon.Modding.CmdId.Event_Error)
                {
                    Eleon.Modding.ErrorInfo eInfo = (Eleon.Modding.ErrorInfo)p.data;
                    Eleon.Modding.CmdId     cmdId = (Eleon.Modding.CmdId)p.seqNr;
                    DebugLog("Event_Error - ErrorType {0}, CmdId {1}", eInfo.errorType, cmdId);
                }

                if (!_requestTracker.TryHandleEvent(p))
                {
                    if (p.data == null)
                    {
                        DebugLog("Empty Package cmd:{0}, seqnr:{1}", p.cmd, p.seqNr);
                        //System.Diagnostics.Debugger.Break();
                        return;
                    }

                    switch (p.cmd)
                    {
                    case Eleon.Modding.CmdId.Event_Playfield_Loaded:
                        ProcessEvent_Playfield_Loaded((Eleon.Modding.PlayfieldLoad)p.data);
                        break;

                    case Eleon.Modding.CmdId.Event_Playfield_Unloaded:
                        ProcessEvent_Playfield_Unloaded((Eleon.Modding.PlayfieldLoad)p.data);
                        break;

                    case Eleon.Modding.CmdId.Event_Playfield_List:
                        //ProcessEvent_Playfield_List((Eleon.Modding.PlayfieldList)p.data);
                        break;

                    case Eleon.Modding.CmdId.Event_Playfield_Stats:
                        //ProcessEvent_Playfield_Stats((Eleon.Modding.PlayfieldStats)p.data);
                        break;

                    case Eleon.Modding.CmdId.Event_Dedi_Stats:
                        ProcessEvent_Dedi_Stats((Eleon.Modding.DediStats)p.data);
                        break;

                    case Eleon.Modding.CmdId.Event_GlobalStructure_List:
                        ProcessEvent_GlobalStructure_List((Eleon.Modding.GlobalStructureList)p.data);
                        break;

                    case Eleon.Modding.CmdId.Event_Structure_BlockStatistics:
                        ProcessEvent_Structure_BlockStatistics((Eleon.Modding.IdStructureBlockInfo)p.data);
                        break;

                    case Eleon.Modding.CmdId.Event_Player_Connected:
                        ProcessEvent_Player_Connected(entityId: ((Eleon.Modding.Id)p.data).id);
                        break;

                    case Eleon.Modding.CmdId.Event_Player_Disconnected:
                        ProcessEvent_Player_Disconnected(entityId: ((Eleon.Modding.Id)p.data).id);
                        break;

                    case Eleon.Modding.CmdId.Event_Player_ChangedPlayfield:
                        ProcessEvent_Player_ChangedPlayfield((Eleon.Modding.IdPlayfield)p.data);
                        break;

                    case Eleon.Modding.CmdId.Event_Player_Info:
                        ProcessEvent_Player_Info((Eleon.Modding.PlayerInfo)p.data);
                        break;

                    case Eleon.Modding.CmdId.Event_Player_List:
                        //ProcessEvent_Player_List((Eleon.Modding.IdList)p.data);
                        break;

                    case Eleon.Modding.CmdId.Event_Player_Inventory:
                        ProcessEvent_Player_Inventory((Eleon.Modding.Inventory)p.data);
                        break;

                    case Eleon.Modding.CmdId.Event_Player_Credits:
                        ProcessEvent_Player_Credits((Eleon.Modding.IdCredits)p.data);
                        break;

                    case Eleon.Modding.CmdId.Event_Player_ItemExchange:
                        ProcessEvent_Player_ItemExchange((Eleon.Modding.ItemExchangeInfo)p.data);
                        break;

                    case Eleon.Modding.CmdId.Event_Player_DisconnectedWaiting:
                        ProcessEvent_Player_DisconnectedWaiting((Eleon.Modding.Id)p.data);
                        break;

                    case Eleon.Modding.CmdId.Event_Entity_PosAndRot:
                        ProcessEvent_Entity_PosAndRot((Eleon.Modding.IdPositionRotation)p.data);
                        break;

                    case Eleon.Modding.CmdId.Event_Faction_Changed:
                        ProcessEvent_Faction_Changed((Eleon.Modding.FactionChangeInfo)p.data);
                        break;

                    case Eleon.Modding.CmdId.Event_Get_Factions:
                        ProcessEvent_Get_Factions((Eleon.Modding.FactionInfoList)p.data);
                        break;

                    case Eleon.Modding.CmdId.Event_Statistics:
                        ProcessEvent_Statistics((Eleon.Modding.StatisticsParam)p.data);
                        break;

                    case Eleon.Modding.CmdId.Event_NewEntityId:
                        // from Request_NewEntityId
                        DebugLog("Event_NewEntityId - New ID: {0}", ((Eleon.Modding.Id)p.data).id);
                        break;

                    case Eleon.Modding.CmdId.Event_AlliancesAll:
                        ProcessEvent_AlliancesAll((Eleon.Modding.AlliancesTable)p.data);
                        break;

                    case Eleon.Modding.CmdId.Event_AlliancesFaction:
                        ProcessEvent_AlliancesFaction((Eleon.Modding.AlliancesFaction)p.data);
                        break;

                    case Eleon.Modding.CmdId.Event_ChatMessage:
                        ProcessEvent_ChatMessage((Eleon.Modding.ChatInfo)p.data);
                        break;

                    case Eleon.Modding.CmdId.Event_BannedPlayers:
                        ProcessEvent_BannedPlayers((Eleon.Modding.BannedPlayerData)p.data);
                        break;

                    case Eleon.Modding.CmdId.Event_Ok:
                        DebugLog("Event_Ok - seqnr {0}", p.seqNr);
                        break;

                    case Eleon.Modding.CmdId.Event_Error:
                    {
                        Eleon.Modding.ErrorInfo eInfo = (Eleon.Modding.ErrorInfo)p.data;
                        Eleon.Modding.CmdId     cmdId = (Eleon.Modding.CmdId)p.seqNr;
                        DebugOutput("Event_Error - ErrorType {0}, CmdId {1}", eInfo.errorType, cmdId);
                        BreakIfDebugBuild();
                    }
                    break;

                    case Eleon.Modding.CmdId.Event_TraderNPCItemSold:
                        ProcessEvent_TraderNPCItemSold((Eleon.Modding.TraderNPCItemSoldInfo)p.data);
                        break;

                    case Eleon.Modding.CmdId.Event_Player_GetAndRemoveInventory:
                        ProcessEvent_Player_GetAndRemoveInventory((Eleon.Modding.Inventory)p.data);
                        break;

                    case Eleon.Modding.CmdId.Event_Playfield_Entity_List:
                        ProcessEvent_Playfield_Entity_List((Eleon.Modding.PlayfieldEntityList)p.data);
                        break;

                    case Eleon.Modding.CmdId.Event_ConsoleCommand:
                        ProcessEvent_ConsoleCommand((Eleon.Modding.ConsoleCommandInfo)p.data);
                        break;

                    case Eleon.Modding.CmdId.Event_PdaStateChange:
                        ProcessEvent_PdaStateChange((Eleon.Modding.PdaStateInfo)p.data);
                        break;

                    case Eleon.Modding.CmdId.Event_GameEvent:
                        ProcessEvent_GameEvent((Eleon.Modding.GameEventData)p.data);
                        break;

                    case Eleon.Modding.CmdId.Event_DialogButtonIndex:
                        // We don't do anything with this here as this is from other mods.
                        break;

                    default:
                        DebugOutput("(1) Unknown package cmd {0}", p.cmd);
                        BreakIfDebugBuild();
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                var newFormat = DateTime.Now.ToString("R") + " - " + "OnClient_GameEventReceived Exception: {0} ({1})";
                _traceSource.TraceEvent(TraceEventType.Error, 1, newFormat, ex.Message, p.cmd);
                //$$_traceSource.TraceEvent(TraceEventType.Error, 1, "OnClient_GameEventReceived Exception: {0}", ex.Message);
                BreakIfDebugBuild();
            }
        }
 private void SendRequest(Eleon.Modding.CmdId cmdID, ushort seqNr, object data)
 {
     _traceSource.TraceEvent(TraceEventType.Information, 1, "SendRequest: Command {0} SeqNr: {1}", cmdID, seqNr);
     _client.Send(cmdID, (ushort)seqNr, data);
 }