/// <summary> /// Executes command and returns result back. /// </summary> /// <param name="commandCallParams">Command to execute</param> public void ProcessCommand(CordovaCommandCall commandCallParams) { if (commandCallParams == null) { throw new ArgumentNullException("commandCallParams"); } try { BaseCommand bc = CommandFactory.CreateByServiceName(commandCallParams.Service, commandCallParams.Namespace); if (bc == null) { this.OnCommandResult(commandCallParams.CallbackId, new PluginResult(PluginResult.Status.CLASS_NOT_FOUND_EXCEPTION)); return; } EventHandler <PluginResult> OnCommandResultHandler = delegate(object o, PluginResult res) { if (res.CallbackId == null || res.CallbackId == commandCallParams.CallbackId) { this.OnCommandResult(commandCallParams.CallbackId, res); if (!res.KeepCallback) { bc.RemoveResultHandler(commandCallParams.CallbackId); } } }; //bc.OnCommandResult += OnCommandResultHandler; bc.AddResultHandler(commandCallParams.CallbackId, OnCommandResultHandler); EventHandler <ScriptCallback> OnCustomScriptHandler = delegate(object o, ScriptCallback script) { this.InvokeScriptCallback(script); }; bc.OnCustomScript += OnCustomScriptHandler; ThreadStart methodInvokation = () => { try { bc.InvokeMethodNamed(commandCallParams.CallbackId, commandCallParams.Action, commandCallParams.Args); } catch (Exception ex) { Debug.WriteLine("ERROR: Exception in ProcessCommand :: " + ex.Message); bc.RemoveResultHandler(commandCallParams.CallbackId); bc.OnCustomScript -= OnCustomScriptHandler; Debug.WriteLine("ERROR: failed to InvokeMethodNamed :: " + commandCallParams.Action + " on Object :: " + commandCallParams.Service); this.OnCommandResult(commandCallParams.CallbackId, new PluginResult(PluginResult.Status.INVALID_ACTION)); return; } }; new Thread(methodInvokation).Start(); } catch (Exception ex) { // ERROR Debug.WriteLine(String.Format("ERROR: Unable to execute command :: {0}:{1}:{2} ", commandCallParams.Service, commandCallParams.Action, ex.Message)); this.OnCommandResult(commandCallParams.CallbackId, new PluginResult(PluginResult.Status.ERROR)); return; } }
/// <summary> /// Executes command and returns result back. /// </summary> /// <param name="commandCallParams">Command to execute</param> public void ProcessCommand(CordovaCommandCall commandCallParams) { if (commandCallParams == null) { throw new ArgumentNullException("commandCallParams"); } try { BaseCommand bc = CommandFactory.CreateByServiceName(commandCallParams.Service, commandCallParams.Namespace); if (bc == null) { this.OnCommandResult(commandCallParams.CallbackId, new PluginResult(PluginResult.Status.CLASS_NOT_FOUND_EXCEPTION)); return; } // TODO: consider removing custom script functionality at all since we already marked it as absolute (see BaseCommand) EventHandler <ScriptCallback> OnCustomScriptHandler = delegate(object o, ScriptCallback script) { this.InvokeScriptCallback(script); }; EventHandler <PluginResult> OnCommandResultHandler = delegate(object o, PluginResult res) { if (res.CallbackId == null || res.CallbackId == commandCallParams.CallbackId) { this.OnCommandResult(commandCallParams.CallbackId, res); if (!res.KeepCallback) { bc.RemoveResultHandler(commandCallParams.CallbackId); bc.OnCustomScript -= OnCustomScriptHandler; } } }; //bc.OnCommandResult += OnCommandResultHandler; bc.AddResultHandler(commandCallParams.CallbackId, OnCommandResultHandler); bc.OnCustomScript += OnCustomScriptHandler; Windows.System.Threading.ThreadPool.RunAsync((workItem) => { try { bc.InvokeMethodNamed(commandCallParams.CallbackId, commandCallParams.Action, commandCallParams.Args); commands.Add(bc); } catch (Exception ex) { Debug.WriteLine("ERROR: Exception in ProcessCommand :: " + ex.Message); bc.RemoveResultHandler(commandCallParams.CallbackId); bc.OnCustomScript -= OnCustomScriptHandler; Debug.WriteLine("ERROR: failed to InvokeMethodNamed :: " + commandCallParams.Action + " on Object :: " + commandCallParams.Service); this.OnCommandResult(commandCallParams.CallbackId, new PluginResult(PluginResult.Status.INVALID_ACTION)); return; } }); } catch (Exception ex) { // ERROR Debug.WriteLine(String.Format("ERROR: Unable to execute command :: {0}:{1}:{2} ", commandCallParams.Service, commandCallParams.Action, ex.Message)); this.OnCommandResult(commandCallParams.CallbackId, new PluginResult(PluginResult.Status.ERROR)); return; } }
/// <summary> /// Executes command and returns result back. /// </summary> /// <param name="commandCallParams">Command to execute</param> public void ProcessCommand(CordovaCommandCall commandCallParams) { if (commandCallParams == null) { throw new ArgumentNullException("commandCallParams"); } try { BaseCommand bc = CommandFactory.CreateByServiceName(commandCallParams.Service); if (bc == null) { this.OnCommandResult(commandCallParams.CallbackId, new PluginResult(PluginResult.Status.CLASS_NOT_FOUND_EXCEPTION)); return; } EventHandler <PluginResult> OnCommandResultHandler = delegate(object o, PluginResult res) { if (res.CallbackId == null || res.CallbackId == commandCallParams.CallbackId) { this.OnCommandResult(commandCallParams.CallbackId, res); if (!res.KeepCallback) { bc.RemoveResultHandler(commandCallParams.CallbackId); } } }; //bc.OnCommandResult += OnCommandResultHandler; bc.AddResultHandler(commandCallParams.CallbackId, OnCommandResultHandler); EventHandler <ScriptCallback> OnCustomScriptHandler = delegate(object o, ScriptCallback script) { this.InvokeScriptCallback(script); }; bc.OnCustomScript += OnCustomScriptHandler; ThreadStart methodInvokation = () => { try { bc.InvokeMethodNamed(commandCallParams.CallbackId, commandCallParams.Action, commandCallParams.Args); } catch (Exception ex) { Debug.WriteLine("ERROR: Exception in ProcessCommand :: " + ex.Message); bc.RemoveResultHandler(commandCallParams.CallbackId); bc.OnCustomScript -= OnCustomScriptHandler; Debug.WriteLine("ERROR: failed to InvokeMethodNamed :: " + commandCallParams.Action + " on Object :: " + commandCallParams.Service); this.OnCommandResult(commandCallParams.CallbackId, new PluginResult(PluginResult.Status.INVALID_ACTION)); return; } }; //if ((bc is File) || (bc is Accelerometer)) //{ // // Due to some issues with the IsolatedStorage in current version of WP8 SDK we have to run all File Api commands synchronously. // // TODO: test this in WP8 RTM // methodInvokation.Invoke(); //} //else //{ // new Thread(methodInvokation).Start(); //} new Thread(methodInvokation).Start(); } catch (Exception ex) { // ERROR Debug.WriteLine(String.Format("ERROR: Unable to execute command :: {0}:{1}:{3} ", commandCallParams.Service, commandCallParams.Action, ex.Message)); this.OnCommandResult(commandCallParams.CallbackId, new PluginResult(PluginResult.Status.ERROR)); return; } }