Lync SDK 2013. Redefining the experience of designing your own messenger on the basis of Lync (Skype for Business)

We continue to make products on the basis of (and for) Skype for Business. The point is not easy — you have to face many obstacles that need to creatively overcome. Today I will tell about how was the development of one of our most recent apps, where did the idea and what technological problem we decided.

the

the Idea


In our company for communication between employees as a corporate communications using Lync server and Skype for Business clients. They have their advantages and disadvantages (e.g. problems with the chat history), but today is not about that.

We already had the idea of creating a native client based on Lync SDK, which would have completely replaced Skype for Business. We spent a lot of time and effort, has created its own messenger, which covers all the inconveniences and complements the functionality of Lync, but a few "Showstoppers" and was not able to overcome. Also optimism is not added and a considerable number of bugs in the Lync SDK.

The important thing is that we received in the process of creating your own client is a huge experience using the technology and knowledge that are essentially unique. Therefore, we decided not to stay and create a few separate apps for Skype for Business, each of which must solve only one major problem, unlike the previous project, who was an app all-in-one.

Thus were born two ideas – this app is for contact management, speech about which will go in this article and the app to save the message history, which describe separately.

the

technology Stack, architecture, development


The app was developed using technologies .4.6.1 NET Framework, Unity Framework, Prism.

One of the drawbacks in the development the previous application was using the Lync SDK throughout the code, which greatly interfered with the implementation of new features and modularity of the application. Therefore, the main conclusion that we made is the independence from third-party solutions. All integration dependencies are required to be abstracted, and our solution needs to use abstractions instead of concrete libraries and frameworks.

If you look at the component diagram for the architectural solution, we can distinguish three groups of components.

Component diagram

— Third party components not belonging to us (Lync Client SDK);
service components that implement the logic of the connection and isolation layers (MSConnector, IConnector, CommonDTO, AppModel);
— the application components that represent the client application.

If the first and third group is more or less clear, then the second should stay in more detail.

AppModel – the domain model. It is a pure object model that describes a given subject area. Its main feature is that it contains no references to external libraries (for example, Lync and Outlook).

To communicate with the lower level model uses the same interface as IConnector, which covers a concrete implementation and all the work connected with the transport service libraries. This interface is convenient to consider General — in the development it was divided into functional parts (ICommunication, ICalendar, ITask, etc.)

One of the variants of the implementation of this interface is MSConnector, who is able to communicate to the Lync Client SDK and Outlook, and also to serve requests coming within the interface.

In order for the model and the connector can maintain an effective interaction in the system of the selected component CommonDTO which describes all of the General classes necessary for data exchange.

Client applications interact with the domain model directly, causing objects and subscribing to its events. In fact, in this architecture the model is a caching proxy for external services.
Thus, we have ensured the isolation of the application from Lync (Skype for Business) and Outlook, and came to the conclusion that in the framework of this architecture, we could potentially move to other services. For example, to use a Telegram or a regular Skype as a messenger, and Google Apps as the mail app, and calendar.

On the basis of this decision, we have created a library layer between Lync and our application and started to develop a desktop client-side.

The essence of the application lies in the advanced management of their Lync contacts. Of the main features are the following:

• creation of contacts (single or multiple);
• create groups;
• search for Lync and the Outlook address book;
• to view your calendar.

main window

Each contact has an extended list of features:

• Opening of dialogue with the contact (sending short messages);
• Call to Lync on any phone from the phone list contact, video call;
• View calendar contact;
• Alerts on changes in contact status to "Online" with the retention of the message;
• Change the default action when clicking on contact (call, video call or open chat);
• Send e-mail with blank or pre-header;
• To schedule a meeting, contact;
Search all emails from a contact;
• View a contact card (display all of the calendar user).

Display contact

Additional app features include:

• Drag&Drop contacts between groups from the search window;
• Zooming contacts of all the groups at once and contact groups separately;
• Add shortcuts to files or applications on the taskbar of the program;
• Change own status in Skype for Business.

the

Publish in the Windows Store


It was decided that the application should be extended in two types – a regular installer (exe or msi via the website) and through the Microsoft store in the form of an appx package.

Having experience of conversion of classic apps to appx package on the previous application, in this case, we went on the same path, but moving much faster.

The only thing we added compared to the previous publication the application is multilingual. Now the app is available for users in three languages – Russian, English and German. To the Microsoft store to see the list of supported application languages need to improve a little bit AppxManifest.xml in our case it looks like this:

the
<Resources>
<Resource Language="de-de" />
<Resource Language="EN-us" />
<Resource Language="en-us" />
<Resource uap:Scale="100" />
<Resource uap:Scale="125" />
<Resource uap:Scale="150" />
<Resource uap:Scale="200" />
<Resource uap:Scale="400" />
</Resources>

the

Conclusion


As a result, now we have received, as well as the app for contact management that does not repeat the functionality of Lync, and extends it and works with it in tandem, and a set of required libraries for fast further embodiment of our ideas.
Welcome feedback in the comments, thank you for the ideas.

Vyacheslav M. Nesterov
Article based on information from habrahabr.ru

Comments

Popular posts from this blog

Powershell and Cyrillic in the console (updated)

Active/Passive PostgreSQL Cluster, using Pacemaker, Corosync

Automatic deployment ElasticBeanstalk using Bitbucket Pipelines