/////////////////////////////////////////////////////////////////////// #region Callback Methods private ReturnCode InterruptCallback( Interpreter interpreter, /* NOTE: Parent interpreter. */ InterruptType interruptType, IClientData clientData, ref Result error ) /* throw */ { // // NOTE: If the are no callback arguments configured, just skip it // and return success. // StringList arguments = CallbackArguments; if (arguments == null) /* NOTE: Disabled? */ { return(ReturnCode.Ok); } Interpreter debugInterpreter = this.interpreter; if (debugInterpreter == null) { error = "debugger interpreter not available"; return(ReturnCode.Error); } // // NOTE: *WARNING* This is a cross-interpreter call, do NOT dispose // the parent interpreter because we do not own it. This is // guaranteed by using the NoDispose object flag (indirectly) // here. // ICallback callback = CommandCallback.Create( MarshalFlags.Default, CallbackFlags.Default, ObjectFlags.Callback, ByRefArgumentFlags.None, debugInterpreter, clientData, null, new StringList( arguments), ref error); if (callback == null) { return(ReturnCode.Error); } try { callback.FireEventHandler(this, RuntimeOps.GetInterruptEventArgs(interpreter, interruptType, clientData) as EventArgs); return(ReturnCode.Ok); } catch (Exception e) { error = e; } return(ReturnCode.Error); }
/////////////////////////////////////////////////////////////////////// #region Private Download Event Handlers #region Download Data Event Handlers private static void DownloadDataAsyncCompleted( object sender, DownloadDataCompletedEventArgs e ) { try { if (e == null) { return; } ICallback callback = e.UserState as ICallback; if (callback == null) { return; } Uri uri = null; IClientData clientData = callback.ClientData; if (clientData != null) { IAnyPair <WebClient, Uri> anyPair = clientData.Data as IAnyPair <WebClient, Uri>; if (anyPair != null) { WebClient webClient = anyPair.X; if (webClient != null) { webClient.Dispose(); webClient = null; } uri = anyPair.Y; } clientData.Data = null; } /* NO RESULT */ callback.FireEventHandler(sender, e, GetAsyncCompletedArguments( uri, null, null, null, null, e)); } catch (Exception ex) { DebugOps.Complain(ReturnCode.Error, ex); } }
/////////////////////////////////////////////////////////////////////// #region Upload Values Event Handlers private static void UploadValuesAsyncCompleted( object sender, UploadValuesCompletedEventArgs e ) { try { if (e == null) { return; } ICallback callback = e.UserState as ICallback; if (callback == null) { return; } Uri uri = null; string method = null; NameValueCollection collection = null; IClientData clientData = callback.ClientData; if (clientData != null) { IAnyTriplet <WebClient, Uri, IAnyPair <string, NameValueCollection> > anyTriplet = clientData.Data as IAnyTriplet <WebClient, Uri, IAnyPair <string, NameValueCollection> >; if (anyTriplet != null) { WebClient webClient = anyTriplet.X; if (webClient != null) { webClient.Dispose(); webClient = null; } uri = anyTriplet.Y; IAnyPair <string, NameValueCollection> anyPair = anyTriplet.Z; if (anyPair != null) { method = anyPair.X; collection = anyPair.Y; } } clientData.Data = null; } /* NO RESULT */ callback.FireEventHandler(sender, e, GetAsyncCompletedArguments( uri, method, null, collection, null, e)); } catch (Exception ex) { DebugOps.Complain(ReturnCode.Error, ex); } }