/// <summary> /// Releases the memory used by the sites information. /// </summary> public void Dispose() { i3d_ping_sites_getter_destroy(_ptr); lock (SitesGetter) { SitesGetter.Remove(_ptr); } }
private static void HttpCallback(IntPtr url, I3dSitesGetterWrapper.I3dHttpParsingCallback parsingCallback, IntPtr parsingUserdata, IntPtr userdata) { I3dSitesGetter sitesGetter; if (!SitesGetter.TryGetValue(userdata, out sitesGetter)) { throw new InvalidOperationException("Cannot find I3dSitesGetter instance"); } sitesGetter.StartCoroutine(sitesGetter.GetPayload(url, parsingCallback, parsingUserdata, userdata)); }
private void OnEnable() { _wrapper = new I3dSitesGetterWrapper(); _ptr = _wrapper.Ptr; _wrapper.Init(null, HttpCallback, _ptr); lock (SitesGetter) { SitesGetter.Add(_ptr, this); } }
private void OnDisable() { if (_wrapper != null) { _wrapper.Dispose(); _wrapper = null; } lock (SitesGetter) { SitesGetter.Remove(_ptr); } }
/// <summary> /// Init an instance of the <see cref="I3dSitesGetterWrapper"/> class. /// </summary> public void Init(Action <I3dLogLevel, string> logCallback, I3dHttpGetCallback callback, IntPtr userdata) { _logCallback = logCallback; int code = i3d_ping_sites_getter_create(out _ptr, callback, userdata); I3dErrorValidator.Validate(code); code = i3d_ping_sites_getter_set_logger(_ptr, LogCallback, _ptr); I3dErrorValidator.Validate(code); lock (SitesGetter) { SitesGetter.Add(_ptr, this); } }
private static void LogCallback(IntPtr data, int level, IntPtr log) { I3dSitesGetterWrapper sitesGetter; if (!SitesGetter.TryGetValue(data, out sitesGetter)) { throw new InvalidOperationException("Cannot find I3dSitesGetterWrapper instance"); } if (sitesGetter._logCallback == null) { return; } if (!Enum.IsDefined(typeof(I3dLogLevel), level)) { throw new I3dInvalidLogLevelException(level); } var logLevel = (I3dLogLevel)level; sitesGetter._logCallback(logLevel, new Utf8ByteArray(log).ToString()); }