コード例 #1
0
        private void InitFFXIVIntegration()
        {
            foreach (var propName in DefaultCombatantFields)
            {
                CachedCombatantPropertyInfos.Add(propName, typeof(Combatant).GetProperty(propName));
            }

            repository.RegisterPartyChangeDelegate((partyList, partySize) => DispatchPartyChangeEvent(partyList, partySize));
            ffxivPluginPresent = true;
        }
コード例 #2
0
        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();
        }
コード例 #3
0
        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());
        }
コード例 #4
0
        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);
            });

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

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

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