Bootstrapping Your Development Environment:
Here are some things I assume you are developing with:
- Microsoft Visual Studio 2015
- C#
Here is the shopping list you will need:
- The Plantronics SDK
- NuGet for Microsoft Visual Studio:http://www.nuget.org/
- The TweetSharp libraries - can be installed via NuGet: https://github.com/danielcrenna/tweetsharp
Launch Microsoft Visual Studio
Create a .NET 4.6 C# Console Application project - In this example I created a project called TweetMe
After the project has been created rename the default Program.cs to TweetMe.cs
Adding The Plantronics and TweetSharp Dependencies
Getting TweetSharp
NuGet can be found under the Project menu in Visual Studio. To add TweetSharp to your project, click on the Project menu and select the "NuGet Package Manager" option and go to "Manage NuGet Packages for Sol. Once the NuGet dialog box shows up search for the TweetSharp libraries and add them to your project by installing it.
Add the Plantronics SDK References
You will need to add the Interop.Plantronics reference to the solution.
Once you have the TweetSharp and Plantronics assemblies referenced, your project's reference list should look like this:
Step 1: Initialize Twitter.
The IPlugin interface has three methods that must be implemented Name, Init and Exit, below is a skeleton of what an empty plug-in implementation looks like.
using System; using System.Runtime.InteropServices; using TweetSharp; using Interop.Plantronics; namespace TweetMe { public class TweetMe { //Twitter integration stuff //NOTE: you must get your own keys/tokens in order to make this tweet to your _twitter account! //To do this simply register at the following site: https://dev.twitter.com/apps/new static String twitterConsumerKey = "yourConsumerKey"; static String twitterConsumerSecret = "yourConsumerSecret"; static String twitterAccessToken = "yourAccessToken"; static String twitterAccessTokenSecret = "yourAccessTokenSecret"; static String twitterUserHandle = "yourUserHandle"; static TwitterService _twitter; InitializeTwitter(); } //_twitter initialization private static void InitializeTwitter() { //initialize _twitter _twitter = new TwitterService(twitterConsumerKey, twitterConsumerSecret); _twitter.AuthenticateWith(twitterAccessToken, twitterAccessTokenSecret); } }
Step 2. Add Plantronics Objects
Start to adding the Plantronics objects we will be using to gain access to the headset events..... namespace TweetMe { public class TweetMe { private static COMDevice _device; static ICOMDeviceListenerEvents_Event _devListener; private static ICOMHostCommandExt _command; //Twitter integration stuff //NOTE: you must get your own keys/tokens in order to make this tweet to your _twitter account! //To do this simply register at the following site: https://dev.twitter.com/apps/new static String twitterConsumerKey = "yourConsumerKey"; static String twitterConsumerSecret = "yourConsumerSecret"; static String twitterAccessToken = "yourAccessToken"; static String twitterAccessTokenSecret = "yourAccessTokenSecret"; static String twitterUserHandle = "yourUserHandle"; static TwitterService _twitter; //Get a valid _device COMSessionManager mgr = new COMSessionManager(); COMSession sess; mgr.Register("My Session", out sess); _device = sess.GetActiveDevice(); //Cast HostCommand and init _command. _command = _device.HostCommand as ICOMHostCommandExt; //Cast HostCommand and DeviceListener and init _command and _devListener. _command = _device.HostCommand as ICOMHostCommandExt; _devListener = _device.DeviceListener; _devListener.onHeadsetStateChanged += devListener_HeadsetStateChanged; InitializeTwitter(); } private static void devListener_HeadsetStateChanged(COMDeviceListenerEventArgs args) { } ...
Step 3: Request Proximity
To receive proximity data, you will need to call _command.RequestProximity() after you start listening for headset events..... namespace TweetMe { public class TweetMe { private static COMDevice _device; static ICOMDeviceListenerEvents_Event _devListener; private static ICOMHostCommandExt _command; //Twitter integration stuff //NOTE: you must get your own keys/tokens in order to make this tweet to your _twitter account! //To do this simply register at the following site: https://dev.twitter.com/apps/new static String twitterConsumerKey = "yourConsumerKey"; static String twitterConsumerSecret = "yourConsumerSecret"; static String twitterAccessToken = "yourAccessToken"; static String twitterAccessTokenSecret = "yourAccessTokenSecret"; static String twitterUserHandle = "yourUserHandle"; static TwitterService _twitter; //Get a valid _device COMSessionManager mgr = new COMSessionManager(); COMSession sess; mgr.Register("My Session", out sess); _device = sess.GetActiveDevice(); //Cast HostCommand and init _command. _command = _device.HostCommand as ICOMHostCommandExt; //Cast HostCommand and DeviceListener and init _command and _devListener. _command = _device.HostCommand as ICOMHostCommandExt; _devListener = _device.DeviceListener; _devListener.onHeadsetStateChanged += devListener_HeadsetStateChanged; InitializeTwitter(); RequestProximity(); } private static void RequestProximity() { try { if (_command != null) _command.RequestProximity(); } catch (COMException ex) { Console.WriteLine(ex.Message + "\r\nPlease use a _device that supports proximity."); } } }
Step 4: Tweet!
Now add the code to tweet your headset events!- HeadsetState.Don - Capacitive sensor event that the user is wearing their headset
- HeadsetState.Doff - Capacitive sensor event the user has take off their headset
- Proximity.Near - event that the headset is near the host system
- Proximity.Far - event that the headset is far from the host system (but still in range)
private static void devListener_HeadsetStateChanged(COMDeviceListenerEventArgs args) { switch (args.HeadsetStateChange) { case (DeviceHeadsetStateChange.HeadsetStateChange_Don): SendTweet("At " + DateTime.Now.ToString("H:mm:ss") + " my Plantronics headset sensors told me that " + twitterUserHandle + " is wearing me!"); break; case (DeviceHeadsetStateChange.HeadsetStateChange_Doff): SendTweet("At " + DateTime.Now.ToString("H:mm:ss") + " my Plantronics headset sensors told me that " + twitterUserHandle + " has taken me off."); break; case (DeviceHeadsetStateChange.HeadsetStateChange_Far): SendTweet("At " + DateTime.Now.ToString("H:mm:ss") + " my Plantronics headset sensors told me that " + twitterUserHandle + " is away from their desk."); break; case (DeviceHeadsetStateChange.HeadsetStateChange_Near): SendTweet("At " + DateTime.Now.ToString("H:mm:ss") + " my Plantronics headset sensors told me that " + twitterUserHandle + " is at their desk."); break; default: SendTweet("At " + DateTime.Now.ToString("H:mm:ss") + " the following Plantronics headset event " + args.HeadsetStateChange + " occured for " + twitterUserHandle); break; } } //_twitter send tweet and display status private static void SendTweet(string text) { SendTweetOptions options = new SendTweetOptions {Status = text}; TwitterStatus status = _twitter.SendTweet(options); if (status == null) { Console.WriteLine("Tweet failed, no status returned. (have you added key/token/user etc at top of code?)"); } else { Console.WriteLine("Created a new tweet, id = " + status.Id); } }
The Source Code:
Well there you go... I hope this works for you, if you encounter any problems let me know!Download link: TweetMe.zip
Cheers,
-Cary
Comments
Very cool - I like it. But it really should follow "fluffyflush" and Jari's toaster on twitter.
, the PDC memeber was looking for a Hello World based on the emulator. I pointed him to this blog post, but perhaps there is something we can create that is more specific to people getting up and running using the emulator? Thanks!
HI,
I got problem on running the code that u posted. Actually I got problems running the sample code which Plantronics provided as well. Coz the sample doesn't have main program in C#, how they can run??? Also, even I create a main program and then go to the init(), then when I do the second step... Trying to get the session manager instance, yet it shows the following error: Failed to load Avaya one-X Communicator Plugin from Plantronics.UC.Avaya.dll. Assembly C:Documents and SettingsjacquelineHDesktop28thAugWindowsFormsApplication1WindowsFormsApplication1inDebugPlantronics.UC.Avaya.dll not found
Can any one help me to fit this problem?? Many THX... Cheers
Hello,
This sample code doesn't have a "main" method as an entry point because this code runs as a Spokes plugin.
Writing your own main method and trying to run the code as a stand-alone application can cause all kinds of particularly nasty things to occur. However, the biggest issue is that the majority of the code won't be able to communicate with the spokes service.
The above article covers in great detail all the steps from setting up your development environment, to writing and finally running the plugin. If you follow all the steps above exactly I think you should be able to see your voyager pro tweeting in no time
Concerning the missing assembly error you're seeing, is it possible that you have Plantronics.UC.Avaya.dll added to the references in your project? If so, it's not necessary to add that assembly to the references.
I hope this helps answer your questions.
-Brandon Haston
If you are creating a standalone app you have possibility to connect to Spokes runtime via a different Spokes API.
This sample uses Spokes iPlugin API, where the project needs to create a DLL that is loaded into Spokes runtime.
Other samples in DevZone Sample Repository use Spokes COM Service API. This allows standalone C++ applications to integrate to Spokes runtime. Since recent launch of Spokes 2.7 SDK it now allows standalone C# applications to integrate to Spokes runtime, as long as those C# applications target .NET Framework 4.0.