/// <summary> /// Calls the Javascript method /// </summary> /// <param name="javascriptMethod">The name of the Javascript method</param> /// <param name="callback">Callback function</param> /// <param name="parameters">Javascript method parameters</param> public void Call(string javascriptMethod, ExternalCallCallback callback, params object[] parameters) { if (!_registered) { if (!_registerRequestSent) { if (null == _queue) { _queue = new Queue <ExternalCallParams>(); } //_queue.Enqueue(new ExternalCallParams(JavascriptRegistrationMethod, _id, new object[] { gameObject.name })); // gameObject.transform.path?? _callbacks[_id] = RegistrationCallback; string path = GameObjectUtil.HierarchyAsString(gameObject); #if DEBUG if (DebugMode) { Debug.Log(string.Format(@"The path is ""{0}""", path)); } #endif Application.ExternalCall(string.Format("{0}.{1}", JavascriptConnectorObject, JavascriptRegistrationMethod), _id, new object[] { path, "Callback", "DeepLink" }); _registerRequestSent = true; } } _id++; _queue.Enqueue(new ExternalCallParams(javascriptMethod, _id, parameters)); if (null != callback) { _callbacks[_id] = callback; } if (_registered || Application.isEditor) { ProcessQueue(); } }
void Callback(string value) // ReSharper restore UnusedMember.Local { //_signal.Emit(param); string[] parts = value.Split(CallbackStringSeparator); if (parts.Length != 2) { throw new Exception("parts length is not 2"); } int id; try { id = Convert.ToInt32(parts[0]); } catch (Exception ex) { throw new Exception("parts[0] is not an integer: " + ex); } if (!_callbacks.ContainsKey(id)) { return; // no callback. The call had no callback defined. } //throw new Exception(string.Format("callbacks dictionary doesn't contain id={0}", id)); ExternalCallCallback callback = _callbacks[id]; callback(parts[1]); _callbacks.Remove(id); if (_callbacks.Count == 0) { _id = 0; // reset } }
/// <summary> /// Calls the Javascript method /// </summary> /// <param name="javascriptMethod">The name of the Javascript method</param> /// <param name="callback">Callback function</param> /// <param name="parameters">Javascript method parameters</param> public void Call(string javascriptMethod, ExternalCallCallback callback, params object[] parameters) { if (!_registered) { if (!_registerRequestSent) { if (null == _queue) _queue = new Queue<ExternalCallParams>(); //_queue.Enqueue(new ExternalCallParams(JavascriptRegistrationMethod, _id, new object[] { gameObject.name })); // gameObject.transform.path?? _callbacks[_id] = RegistrationCallback; string path = GameObjectUtil.HierarchyAsString(gameObject); #if DEBUG if (DebugMode) { Debug.Log(string.Format(@"The path is ""{0}""", path)); } #endif Application.ExternalCall(string.Format("{0}.{1}", JavascriptConnectorObject, JavascriptRegistrationMethod), _id, new object[] { path, "Callback", "DeepLink" }); _registerRequestSent = true; } } _id++; _queue.Enqueue(new ExternalCallParams(javascriptMethod, _id, parameters)); if (null != callback) _callbacks[_id] = callback; if (_registered || Application.isEditor) { ProcessQueue(); } }