Finished the subscription service and with that also concluded the implementation of the high-level push service interface: IPushService. I also knocked out the acknowledgement service and placeholders for the content provider notification and authentication services.
This means that all the major parts of the SDK have now been ported!
Now I am looking at parameter validation, type-safe exception types, Enterprise Library logging support and fully documenting the source to ensure the SDK is nice, robust and easy to debug/maintain.
I will then look at making the comms logic asynchronous and seeing how far up the call chain that work goes – perhaps IPapService and IPushService will go from synchronous to async APIs – I certainly hope so!
Finally I will start a Push Plus evaluation so that the advanced functional support can be fully tested.
At that point I will upload the solution to CodePlex for consideration by the community.
Once I completed and tested this code I will be looking at which API segments can be switched into Task based async methods.
The communication methods that form the IPapService and IPushService, the synchronisation and PPG notification methods in ISubscriptionService are all obvious candidates as they currently rely on blocking I/O calls.
I will be releasing three solutions;
- VS2010 + Async CTP
- VS2012 + .NET 4
- VS2012 + .NET 4.5
Please don’t thank me all at once… Rest assured I have my reasons for doing this!
I’ll dive straight into today’s changes. The subscription service repository is fully coded – a lot of functions but easy enough.
The subscription service itself is 70% completed with all the validation and query methods done.
Thankfully the Task Parallel Library and the new async/await keywords has meant that implementing the multi-path parallelised synchronisation code was a breeze.
Work is underway to implement the subscription code which is more complicated than it first appears – no surprise really as it must cope with users swapping device and other weird and wonderful use-case scenarios.
I had to re-code the SubscriptionQueryResponse class so as to flatten the XML returned from the server. Makes life simpler.
It was fun tracking down the endpoint addresses used by the subscription service – at one point I thought I might have to install the Java API along with Apache and watch network connections via Fiddler…