public PlantronicsManager(IStatusManager statusManager, IInteractionManager interactionManager, INotificationService notificationService, ITraceContext traceContext) { _statusManager = statusManager; _interactionManager = interactionManager; _traceContext = traceContext; _notificationService = notificationService; m_sessionComManager = new SessionComManagerClass(); m_sessionManagerEvents = m_sessionComManager as ISessionCOMManagerEvents_Event; m_comSession = m_sessionComManager.Register("Interaction Client Plantronics AddIn"); // Now check if our plugin session was created if (m_comSession != null) { // detect devices added/removed m_sessionManagerEvents.DeviceStateChanged += OnDeviceStateChanged; //Get current Device m_device = m_comSession.ActiveDevice; // if we have a device register for events if (m_device != null) { // Register for device events RegisterEvents(); } } }
/** * Remove all of the event listeners and release the COM objects */ private static void CleanUp() { DetachDevice(); if (m_comSession != null) { if (m_sessionEvents != null) { // release session events Marshal.ReleaseComObject(m_sessionEvents); m_sessionEvents = null; } // unregister session m_sessionComManager.UnRegister(m_comSession); Marshal.ReleaseComObject(m_comSession); m_comSession = null; } if (m_sessionComManager != null) { Marshal.ReleaseComObject(m_sessionComManager); m_sessionComManager = null; } allSockets.Clear(); if (server != null) { server.Dispose(); } }
private static void InitializePlantronics() { try { m_sessionComManager = new SessionComManagerClass(); Console.WriteLine("Session Manager created"); m_sessionManagerEvents = m_sessionComManager as ISessionCOMManagerEvents_Event; if (m_sessionManagerEvents != null) { m_sessionManagerEvents.DeviceStateChanged += m_sessionComManager_DeviceStateChanged; Console.WriteLine("Attached to session manager events"); } else { Console.WriteLine("Error: Unable to attach to session manager events"); } //////////////////////////////////////////////////////////////////////////////////////// // register session to spokes m_comSession = m_sessionComManager.Register("COM Session"); if (m_comSession != null) { // attach to session call events m_sessionEvents = m_comSession.CallEvents as ICOMCallEvents_Event; if (m_sessionEvents != null) { m_sessionEvents.CallStateChanged += m_sessionEvents_CallStateChanged; Console.WriteLine("Attached to session call events"); } else { Console.WriteLine("Error: Unable to attach to session call events"); } // Attach to active device and print all device information m_activeDevice = m_comSession.ActiveDevice; AttachDevice(); } else { Console.WriteLine("Error: Unable to register session"); } } catch (Exception ex) { Console.WriteLine("Error: " + ex.Message); Console.Read(); } }
private static void InitializePlantronics() { try { m_sessionComManager = new SessionComManagerClass(); Console.WriteLine("Session Manager created"); m_sessionManagerEvents = m_sessionComManager as ISessionCOMManagerEvents_Event; if (m_sessionManagerEvents != null) { m_sessionManagerEvents.DeviceStateChanged += m_sessionComManager_DeviceStateChanged; Console.WriteLine("Attached to session manager events"); } else { Console.WriteLine("Error: Unable to attach to session manager events"); } //////////////////////////////////////////////////////////////////////////////////////// // register session to spokes m_comSession = m_sessionComManager.Register("COM Session"); if (m_comSession != null) { // attach to session call events m_sessionEvents = m_comSession.CallEvents as ICOMCallEvents_Event; if (m_sessionEvents != null) { m_sessionEvents.CallStateChanged += m_sessionEvents_CallStateChanged; Console.WriteLine("Attached to session call events"); } else { Console.WriteLine("Error: Unable to attach to session call events"); } // Attach to active device and print all device information m_activeDevice = m_comSession.ActiveDevice; AttachDevice(); } else Console.WriteLine("Error: Unable to register session"); } catch (Exception ex) { Console.WriteLine("Error: " + ex.Message); Console.Read(); } }
/// <summary> /// Instruct Spokes object to disconnect from Spokes runtime engine and unregister its /// session in Spokes. /// </summary> public void Disconnect() { DetachDevice(); try { if (m_comSession != null) { if (m_sessionEvents != null) { // release session events m_sessionEvents.CallRequested -= m_sessionEvents_CallRequested; m_sessionEvents.CallStateChanged -= m_sessionEvents_CallStateChanged; Marshal.ReleaseComObject(m_sessionEvents); m_sessionEvents = null; } // unregister session if (m_sessionEvents != null) { m_sessionManagerEvents.DeviceStateChanged -= m_sessionComManager_DeviceStateChanged; } m_sessionComManager.UnRegister(m_comSession); Marshal.ReleaseComObject(m_comSession); m_comSession = null; } if (m_sessionComManager != null) { Marshal.ReleaseComObject(m_sessionComManager); m_sessionComManager = null; } } catch (Exception e) { DebugPrint(MethodInfo.GetCurrentMethod().Name, "Exception caught in disconnect: " + e.ToString()); } }
/// <summary> /// Instruct Spokes object to connect to Spokes runtime engine and register itself /// so that it can begin to communicate with the attached Plantronics device. /// </summary> /// <param name="SessionName">Optional name of your appplication's session within Spokes runtime engine. If omitted it will default to "COM Session".</param> public bool Connect(string SessionName = "COM Session") { if (!IsSpokesInstalled()) { DebugPrint(MethodInfo.GetCurrentMethod().Name, "FATAL ERROR: cannot connect if Spokes COMSessionManager/SessionCOMManager class is not registered! Spokes not installed (or wrong major version installed for this Spokes Wrapper)!"); return false; // cannot connect if Spokes COM SessionManager class is not registered! Spokes not installed! } if (isConnected) return true; DeviceCapabilities = new SpokesDeviceCaps(false, false, false, false, false, false, false); // we don't yet know what the capabilities are OnCapabilitiesChanged(EventArgs.Empty); bool success = false; try { //////////////////////////////////////////////////////////////////////////////////////// // create session manager, and attach to session manager events m_sessionComManager = new SessionComManagerClass(); m_sessionManagerEvents = m_sessionComManager as ISessionCOMManagerEvents_Event; if (m_sessionManagerEvents != null) { m_sessionManagerEvents.CallStateChanged += m_sessionComManager_CallStateChanged; m_sessionManagerEvents.DeviceStateChanged += m_sessionComManager_DeviceStateChanged; } else success = false; //////////////////////////////////////////////////////////////////////////////////////// // register session to spokes m_comSession = m_sessionComManager.Register(SessionName); if (m_comSession != null) { // attach to session call events m_sessionEvents = m_comSession.CallEvents as ICOMCallEvents_Event; if (m_sessionEvents != null) { m_sessionEvents.CallRequested += m_sessionEvents_CallRequested; m_sessionEvents.CallStateChanged += m_sessionEvents_CallStateChanged; } else success = false; //////////////////////////////////////////////////////////////////////////////////////// // Attach to active device and print all device information // and registers for proximity (if supported by device) AttachDevice(); success = true; } } catch (System.Exception e) { success = false; throw new Exception("Failed to connect to Spokes", e); } return success; }