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