Esempio n. 1
0
        public void Show(string zoneId, ShowOptions options)
        {
            if (!_initialized)
            {
                return;
            }

            if (!ConfigManager.Instance.IsReady())
            {
                if (ConfigManager.Instance.globalIntervals != null)
                {
                    Event.EventManager.sendMediationCappedEvent(Engine.Instance.AppId, null, "global", ConfigManager.Instance.globalIntervals.NextAvailable());
                }
                return;
            }

            Zone zone = ZoneManager.Instance.GetZone(zoneId);

            if (zone == null)
            {
                return;
            }

            Adapter adapter = zone.SelectAdapter();

            if (adapter == null)
            {
                return;
            }

            Utils.LogDebug("Consuming global ad slot");
            ConfigManager.Instance.globalIntervals.Consume();

            if (ConfigManager.Instance.globalIntervals.IsEmpty())
            {
                Utils.LogDebug("Global ad interval list empty");
                ConfigManager.Instance.RequestAdSources();
            }

            EventHandler finishedHandler = null;
            EventHandler skippedHandler  = null;
            EventHandler failedHandler   = null;

            EventHandler closeHandler = null;

            closeHandler = (object sender, EventArgs e) => {
                _isShowing = false;
                adapter.Unsubscribe(Adapter.EventType.adDidClose, closeHandler);

                if (finishedHandler != null)
                {
                    adapter.Unsubscribe(Adapter.EventType.adFinished, finishedHandler);
                }
                if (skippedHandler != null)
                {
                    adapter.Unsubscribe(Adapter.EventType.adSkipped, skippedHandler);
                }
                if (failedHandler != null)
                {
                    adapter.Unsubscribe(Adapter.EventType.error, failedHandler);
                }
            };
            adapter.Subscribe(Adapter.EventType.adDidClose, closeHandler);

            if (options != null)
            {
                if (options.pause)
                {
                    EventHandler showHandler = (object sender, EventArgs e) => {
                        PauseGame();

                        // TODO: GM commented this out, because it does not compile!
//            adapter.Unsubscribe(Adapter.EventType.adWillOpen, showHandler);
                    };
                    adapter.Subscribe(Adapter.EventType.adWillOpen, showHandler);
                }

                finishedHandler = (object sender, EventArgs e) => {
                    _isShowing = false;
                    if (options.resultCallback != null)
                    {
                        options.resultCallback(ShowResult.Finished);
                    }
                    if (options.pause)
                    {
                        ResumeGame();
                    }
                    adapter.Unsubscribe(Adapter.EventType.adFinished, finishedHandler);
                    finishedHandler = null;
                };
                adapter.Subscribe(Adapter.EventType.adFinished, finishedHandler);

                skippedHandler = (object sender, EventArgs e) => {
                    _isShowing = false;
                    if (options.resultCallback != null)
                    {
                        options.resultCallback(ShowResult.Skipped);
                    }
                    if (options.pause)
                    {
                        ResumeGame();
                    }
                    adapter.Unsubscribe(Adapter.EventType.adSkipped, skippedHandler);
                    skippedHandler = null;
                };
                adapter.Subscribe(Adapter.EventType.adSkipped, skippedHandler);

                failedHandler = (object sender, EventArgs e) => {
                    _isShowing = false;
                    if (options.resultCallback != null)
                    {
                        options.resultCallback(ShowResult.Failed);
                    }
                    if (options.pause)
                    {
                        ResumeGame();
                    }
                    adapter.Unsubscribe(Adapter.EventType.error, failedHandler);
                    failedHandler = null;
                };
                adapter.Subscribe(Adapter.EventType.error, failedHandler);
            }

            Event.EventManager.sendMediationShowEvent(AppId, zone.Id, adapter.Id);
            adapter.Show(zone.Id, adapter.Id, options);
            _isShowing = true;
        }