Example #1
0
        public EnmityEventSource(ILogger logger) : base(logger)
        {
            // this.memory = new EnmityMemory(logger);
            if (FFXIVRepository.GetLanguage() == FFXIV_ACT_Plugin.Common.Language.Chinese)
            {
                memoryCandidates = new List <EnmityMemory>()
                {
                    new EnmityMemory50(logger)
                };
            }
            else if (FFXIVRepository.GetLanguage() == FFXIV_ACT_Plugin.Common.Language.Korean)
            {
                memoryCandidates = new List <EnmityMemory>()
                {
                    new EnmityMemory50(logger)
                };
            }
            else
            {
                memoryCandidates = new List <EnmityMemory>()
                {
                    new EnmityMemory52(logger), new EnmityMemory50(logger)
                };
            }

            RegisterEventTypes(new List <string> {
                EnmityTargetDataEvent, EnmityAggroListEvent,
            });
        }
 private void PickMemoryCandidates(FFXIVRepository repository)
 {
     if (repository.GetLanguage() == FFXIV_ACT_Plugin.Common.Language.Chinese)
     {
         memoryCandidates = new List <EnmityMemory>()
         {
             new EnmityMemory55(container)
         };
     }
     else if (repository.GetLanguage() == FFXIV_ACT_Plugin.Common.Language.Korean)
     {
         memoryCandidates = new List <EnmityMemory>()
         {
             new EnmityMemory52(container)
         };
     }
     else
     {
         memoryCandidates = new List <EnmityMemory>()
         {
             new EnmityMemory60(container)
         };
     }
 }
        public MiniParseEventSource(ILogger logger) : base(logger)
        {
            this.Name = "MiniParse";

            // FileChanged isn't actually raised by this event source. That event is generated in MiniParseOverlay directly.
            RegisterEventTypes(new List <string> {
                CombatDataEvent,
                FileChangedEvent,
                LogLineEvent,
                ImportedLogLinesEvent,
            });

            // These events need to deliver cached values to new subscribers.
            RegisterCachedEventTypes(new List <string> {
                ChangePrimaryPlayerEvent,
                ChangeZoneEvent,
                OnlineStatusChangedEvent,
                PartyChangedEvent,
            });

            RegisterEventHandler("getLanguage", (msg) => {
                var lang = FFXIVRepository.GetLanguage();
                return(JObject.FromObject(new
                {
                    language = lang.ToString("g"),
                    languageId = lang.ToString("d"),
                }));
            });

            ActGlobals.oFormActMain.BeforeLogLineRead += LogLineHandler;
            NetworkParser.OnOnlineStatusChanged       += (o, e) =>
            {
                var obj = new JObject();
                obj["type"]      = OnlineStatusChangedEvent;
                obj["target"]    = e.Target;
                obj["rawStatus"] = e.Status;
                obj["status"]    = StatusMap.ContainsKey(e.Status) ? StatusMap[e.Status] : "Unknown";

                DispatchAndCacheEvent(obj);
            };

            FFXIVRepository.RegisterPartyChangeDelegate((partyList, partySize) => DispatchPartyChangeEvent());

            InitializeEnmityEventSource();
        }
        public MiniParseEventSource(TinyIoCContainer container) : base(container)
        {
            this.Name       = "MiniParse";
            this.repository = container.Resolve <FFXIVRepository>();

            // FileChanged isn't actually raised by this event source. That event is generated in MiniParseOverlay directly.
            RegisterEventTypes(new List <string> {
                CombatDataEvent,
                FileChangedEvent,
                LogLineEvent,
                ImportedLogLinesEvent,
                BroadcastMessageEvent,
            });

            // These events need to deliver cached values to new subscribers.
            RegisterCachedEventTypes(new List <string> {
                ChangePrimaryPlayerEvent,
                ChangeZoneEvent,
                OnlineStatusChangedEvent,
                PartyChangedEvent,
            });

            RegisterEventHandler("getLanguage", (msg) =>
            {
                var lang = repository.GetLanguage();
                return(JObject.FromObject(new
                {
                    language = lang.ToString("g"),
                    languageId = lang.ToString("d"),
                }));
            });

            RegisterEventHandler("getCombatants", (msg) =>
            {
                List <uint> ids = new List <uint>();

                if (msg["ids"] != null)
                {
                    foreach (var id in ((JArray)msg["ids"]))
                    {
                        ids.Add(id.ToObject <uint>());
                    }
                }

                List <string> names = new List <string>();

                if (msg["names"] != null)
                {
                    foreach (var name in ((JArray)msg["names"]))
                    {
                        names.Add(name.ToString());
                    }
                }

                List <string> props = new List <string>();

                if (msg["props"] != null)
                {
                    foreach (var prop in ((JArray)msg["props"]))
                    {
                        props.Add(prop.ToString());
                    }
                }

                var combatants = GetCombatants(ids, names, props);
                return(JObject.FromObject(new
                {
                    combatants
                }));
            });

            RegisterEventHandler("saveData", (msg) =>
            {
                var key = msg["key"]?.ToString();
                if (key == null)
                {
                    return(null);
                }

                Config.OverlayData[key] = msg["data"];
                return(null);
            });

            RegisterEventHandler("loadData", (msg) =>
            {
                var key = msg["key"]?.ToString();
                if (key == null)
                {
                    return(null);
                }

                if (!Config.OverlayData.ContainsKey(key))
                {
                    return(null);
                }

                var ret     = new JObject();
                ret["key"]  = key;
                ret["data"] = Config.OverlayData[key];
                return(ret);
            });

            RegisterEventHandler("say", (msg) =>
            {
                var text = msg["text"]?.ToString();
                if (text == null)
                {
                    return(null);
                }

                ActGlobals.oFormActMain.TTS(text);
                return(null);
            });

            RegisterEventHandler("broadcast", (msg) =>
            {
                if (!msg.ContainsKey("msg") || !msg.ContainsKey("source"))
                {
                    Log(LogLevel.Error, "Called broadcast handler without specifying a source or message (\"source\" or \"msg\" property are missing).");
                    return(null);
                }

                if (msg["source"].Type != JTokenType.String)
                {
                    Log(LogLevel.Error, "The source passed to the broadcast handler must be a string!");
                    return(null);
                }

                DispatchEvent(JObject.FromObject(new
                {
                    type   = BroadcastMessageEvent,
                    source = msg["source"],
                    msg    = msg["msg"],
                }));

                return(null);
            });

            try
            {
                InitFFXIVIntegration();
            } catch (FileNotFoundException)
            {
                // The FFXIV plugin hasn't been loaded.
            }

            ActGlobals.oFormActMain.BeforeLogLineRead += LogLineHandler;
            container.Resolve <NetworkParser>().OnOnlineStatusChanged += (o, e) =>
            {
                var obj = new JObject();
                obj["type"]      = OnlineStatusChangedEvent;
                obj["target"]    = e.Target;
                obj["rawStatus"] = e.Status;
                obj["status"]    = StatusMap.ContainsKey(e.Status) ? StatusMap[e.Status] : "Unknown";

                DispatchAndCacheEvent(obj);
            };
        }
        public MiniParseEventSource(ILogger logger) : base(logger)
        {
            this.Name = "MiniParse";

            // FileChanged isn't actually raised by this event source. That event is generated in MiniParseOverlay directly.
            RegisterEventTypes(new List <string> {
                CombatDataEvent,
                FileChangedEvent,
                LogLineEvent,
                ImportedLogLinesEvent,
            });

            // These events need to deliver cached values to new subscribers.
            RegisterCachedEventTypes(new List <string> {
                ChangePrimaryPlayerEvent,
                ChangeZoneEvent,
                OnlineStatusChangedEvent,
                PartyChangedEvent,
            });

            RegisterEventHandler("getLanguage", (msg) => {
                var lang = FFXIVRepository.GetLanguage();
                return(JObject.FromObject(new
                {
                    language = lang.ToString("g"),
                    languageId = lang.ToString("d"),
                }));
            });

            RegisterEventHandler("getCombatants", (msg) => {
                List <uint> ids = new List <uint>();

                if (msg["ids"] != null)
                {
                    foreach (var id in ((JArray)msg["ids"]))
                    {
                        ids.Add(id.ToObject <uint>());
                    }
                }

                List <string> names = new List <string>();

                if (msg["names"] != null)
                {
                    foreach (var name in ((JArray)msg["names"]))
                    {
                        names.Add(name.ToString());
                    }
                }

                List <string> props = new List <string>();

                if (msg["props"] != null)
                {
                    foreach (var prop in ((JArray)msg["props"]))
                    {
                        props.Add(prop.ToString());
                    }
                }

                var combatants = GetCombatants(ids, names, props);
                return(JObject.FromObject(new
                {
                    combatants
                }));
            });

            RegisterEventHandler("saveData", (msg) => {
                var key = msg["key"].ToString();
                if (key == null)
                {
                    return(null);
                }

                Config.OverlayData[key] = msg["data"];
                return(null);
            });

            RegisterEventHandler("loadData", (msg) => {
                var key = msg["key"].ToString();
                if (key == null)
                {
                    return(null);
                }

                if (!Config.OverlayData.ContainsKey(key))
                {
                    return(null);
                }

                var ret     = new JObject();
                ret["key"]  = key;
                ret["data"] = Config.OverlayData[key];
                return(ret);
            });

            foreach (var propName in DefaultCombatantFields)
            {
                CachedCombatantPropertyInfos.Add(propName,
                                                 typeof(FFXIV_ACT_Plugin.Common.Models.Combatant).GetProperty(propName));
            }

            ActGlobals.oFormActMain.BeforeLogLineRead += LogLineHandler;
            NetworkParser.OnOnlineStatusChanged       += (o, e) =>
            {
                var obj = new JObject();
                obj["type"]      = OnlineStatusChangedEvent;
                obj["target"]    = e.Target;
                obj["rawStatus"] = e.Status;
                obj["status"]    = StatusMap.ContainsKey(e.Status) ? StatusMap[e.Status] : "Unknown";

                DispatchAndCacheEvent(obj);
            };

            FFXIVRepository.RegisterPartyChangeDelegate((partyList, partySize) => DispatchPartyChangeEvent());
        }