private void OnPluginLoaded(PluginEvents.LoadCompleteEvent @event) { //Get ORTDP&RTPP plugin ortdp_plugin = @event.Host.EnumPluings().OfType <OsuRTDataProviderPlugin>().FirstOrDefault(); rtpp_plugin = @event.Host.EnumPluings().OfType <RealTimePPDisplayerPlugin>().FirstOrDefault(); if (ortdp_plugin == null) { logger.LogError("Plugin ORTDP is not found and can't able to collect/upload play data. please install ORTDP plugin. just type 'plugins install provider' and restart Sync."); return; } if (rtpp_plugin == null) { logger.LogError("Plugin RTPP is not found and can't able to collect/upload play data. please install RTPP plugin. just type 'plugins install displayer' and restart Sync."); return; } //bind events. ortdp_plugin.ListenerManager.OnStatusChanged += ListenerManager_OnStatusChanged; ortdp_plugin.ListenerManager.OnBeatmapChanged += ListenerManager_OnBeatmapChanged; ortdp_plugin.ListenerManager.OnPlayerChanged += ListenerManager_OnPlayerChanged; ortdp_plugin.ListenerManager.OnErrorStatisticsChanged += ListenerManager_OnErrorStatisticsChanged; //add a shadow display for getting data easy from rtpp plugin. var shadow_displayer_name = "cute_bunny"; Func <int?, DisplayerBase> displayer_creator = new Func <int?, DisplayerBase>(id => displayer); rtpp_plugin.RegisterDisplayer(shadow_displayer_name, displayer_creator); var add_displayer_method = typeof(RealTimePPDisplayerPlugin).GetMethod("AddDisplayer", BindingFlags.NonPublic | BindingFlags.Instance); add_displayer_method.Invoke(rtpp_plugin, new object[] { shadow_displayer_name }); logger.LogInfomation("Plugin is ready."); }
public RtppdApis(Plugin rtppd_plugin) { rtppd = rtppd_plugin as RealTimePPDisplayerPlugin; rtppd.RegisterDisplayer("restful", (id) => m_restfuile_displayers[id ?? 0] = new RestfulDisplayer(id)); }