public object Call(string method, object[] args, int timeout) { XmlHttpRequest xhr = XmlHttpRequestManager.GetXmlHttpRequest(); Lock l = new Lock(); l.Acquire(); TimedCondition condition = new TimedCondition(l); OnReadyStateChangeHandler handler = new OnReadyStateChangeHandler(xhr, condition); xhr.OnReadyStateChange = (NativeFunction)new VoidDelegate(handler.OnReadyStateChange); xhr.Open("POST", ServerUrl, true, Username, Password); xhr.SetRequestHeader(RpcMethodRequestHeader, method); xhr.Send(Serialize(args)); if (timeout > 0) { try { // wait for timeout milliseconds condition.Await(timeout); } catch (ConditionTimedOutException) { Logging.Debug("Request timed out!!!"); throw new JsonRpcCallTimedOutException(this, method, args, timeout); } } else { // wait indefinitely condition.Await(); } // we have a response from the server, or we couldn't connect Logging.Debug("Status code is: " + xhr.Status); if (xhr.Status == 200) { Logging.Debug("Got 200! Response text is " + xhr.ResponseText); return Deserialize(xhr.ResponseText); } else if (xhr.Status == 0) { Logging.Debug("Request timed out!!!"); throw new JsonRpcCallTimedOutException(this, method, args, 1000); // TODO: Extract into constant of 1000 ms. Also this should be some sort of connection refused exception instead } else { throw GenerateException(xhr.Status, method, args, xhr.ResponseText); } }
public InterfaceEventsSink( OnEmergencyModeChangeHandler onEmergencyModeChangeCallback, OnHomeProviderAvailableHandler onHomeProviderAvailableCallback, OnInterfaceCapabilityAvailableHandler onInterfaceCapabilityAvailableCallback, OnPreferredProvidersChangeHandler onPreferredProvidersChangeCallback, OnReadyStateChangeHandler onReadyStateChangeCallback, OnScanNetworkCompleteHandler onScanNetworkCompleteCallback, OnSetPreferredProvidersCompleteHandler onSetPreferredProvidersCompleteCallback, OnSubscriberInformationChangeHandler onSubscriberInformationChangeCallback, IConnectionPoint connectionPoint) { m_OnEmergencyModeChangeCallback = new WeakReference <OnEmergencyModeChangeHandler>(onEmergencyModeChangeCallback); m_OnHomeProviderAvailableCallback = new WeakReference <OnHomeProviderAvailableHandler>(onHomeProviderAvailableCallback); m_OnInterfaceCapabilityAvailableCallback = new WeakReference <OnInterfaceCapabilityAvailableHandler>(onInterfaceCapabilityAvailableCallback); m_OnPreferredProvidersChangeCallback = new WeakReference <OnPreferredProvidersChangeHandler>(onPreferredProvidersChangeCallback); m_OnReadyStateChangeCallback = new WeakReference <OnReadyStateChangeHandler>(onReadyStateChangeCallback); m_OnScanNetworkCompleteCallback = new WeakReference <OnScanNetworkCompleteHandler>(onScanNetworkCompleteCallback); m_OnSetPreferredProvidersCompleteCallback = new WeakReference <OnSetPreferredProvidersCompleteHandler>(onSetPreferredProvidersCompleteCallback); m_OnSubscriberInformationChangeCallback = new WeakReference <OnSubscriberInformationChangeHandler>(onSubscriberInformationChangeCallback); m_ConnectionPoint = connectionPoint; m_ConnectionPoint.Advise(this, out m_AdviseCookie); }
private void InitializeEventHandlers() { try { // Get the interface m_MbnInterface = m_MbnInterfaceManager.GetInterface(selectedInterfaceId); m_MbnConnection = m_MbnInterface.GetConnection(); m_MbnDeviceServicesContext = m_MbnDeviceServicesManager.GetDeviceServicesContext(m_MbnInterface.InterfaceID); // Register for IMbnConnectionEvents if (m_ConnectionEventsSink == null) { m_OnConnectCompleteEventDelegate = new OnConnectCompleteHandler(ProcessOnConnectComplete); m_OnDisconnectCompleteEventDelegate = new OnDisconnectCompleteHandler(ProcessOnDisconnectComplete); m_ConnectionEventsSink = new ConnectionEventsSink(m_OnConnectCompleteEventDelegate, m_OnDisconnectCompleteEventDelegate, GetMbnConnectionEventsConnectionPoint()); } // Register for IMbnDeviceServicesEvents if (m_DeviceServicesEventsSink == null) { m_OnOpenCommandSessionCompleteEventDelegate = new OnOpenCommandSessionCompleteHandler(ProcessOnOpenCommandSessionComplete); m_OnQueryCommandCompleteEventDelegate = new OnQueryCommandCompleteHandler(ProcessOnQueryCommandComplete); m_OnSetCommandCompleteEventDelegate = new OnSetCommandCompleteHandler(ProcessOnSetCommandComplete); m_OnCloseCommandSessionEventDelegate = new OnCloseCommandSessionCompleteHandler(ProcessOnCloseCommandSessionComplete); m_DeviceServicesEventsSink = new DeviceServicesEventsSink( m_OnOpenCommandSessionCompleteEventDelegate, m_OnQueryCommandCompleteEventDelegate, m_OnCloseCommandSessionEventDelegate, m_OnSetCommandCompleteEventDelegate, GetMbnDeviceServicesEventsConnectionPoint()); } //Register for IMbnRegistrationEvents if (m_RegistrationEventsSink == null) { m_OnRegisterModeAvailableHandlerEventDelegate = new OnRegisterModeAvailableHandler(ProcessOnRegisterModeAvailable); m_OnRegisterStateChangeHandlerEventDelegate = new OnRegisterStateChangeHandler(ProcessOnRegisterStateChange); m_OnPacketServiceStateChangeHandlerEventDelegate = new OnPacketServiceStateChangeHandler(ProcessOnPacketServiceStateChange); m_OnSetRegisterModeCompleteHandlerEventDelegate = new OnSetRegisterModeCompleteHandler(ProcessOnSetRegisterModeComplete); m_RegistrationEventsSink = new RegistrationEventsSink( m_OnRegisterModeAvailableHandlerEventDelegate, m_OnRegisterStateChangeHandlerEventDelegate, m_OnPacketServiceStateChangeHandlerEventDelegate, m_OnSetRegisterModeCompleteHandlerEventDelegate, GetRegisterEventsConnectionPoint()); } if (m_InterfaceEventsSink == null) { OnEmergencyModeChangeHandlerEventDelegate = new OnEmergencyModeChangeHandler(ProcessOnEmergencyModeChange); OnHomeProviderAvailableHandlerEventDelegate = new OnHomeProviderAvailableHandler(ProcessOnHomeProviderAvailable); OnInterfaceCapabilityAvailableHandlerEventDelegate = new OnInterfaceCapabilityAvailableHandler(ProcessOnInterfaceCapabilityAvailable); OnPreferredProvidersChangeHandlerEventDelegate = new OnPreferredProvidersChangeHandler(ProcessOnPreferredProvidersChange); OnReadyStateChangeHandlerEventDelegate = new OnReadyStateChangeHandler(ProcessOnReadyStateChange); OnScanNetworkCompleteHandlerEventDelegate = new OnScanNetworkCompleteHandler(ProcessOnScanNetworkComplete); OnSetPreferredProvidersCompleteHandlerEventDelegate = new OnSetPreferredProvidersCompleteHandler(ProcessOnSetPreferredProvidersComplete); OnSubscriberInformationChangeHandlerEventDelegate = new OnSubscriberInformationChangeHandler(ProcessOnSubscriberInformationChange); m_InterfaceEventsSink = new InterfaceEventsSink( OnEmergencyModeChangeHandlerEventDelegate, OnHomeProviderAvailableHandlerEventDelegate, OnInterfaceCapabilityAvailableHandlerEventDelegate, OnPreferredProvidersChangeHandlerEventDelegate, OnReadyStateChangeHandlerEventDelegate, OnScanNetworkCompleteHandlerEventDelegate, OnSetPreferredProvidersCompleteHandlerEventDelegate, OnSubscriberInformationChangeHandlerEventDelegate, GetInterfaceEventsConnectionPoint()); } } catch (Exception e) { MessageBox.Show(ParseExceptionCode(e)); } }