Pull to refresh

На чем писать десктопного клиента для веб-сервиса?

Reading time3 min
Views12K
Таким вопросом я задался, когда возникла необходимость написать Windows клиента для своего нового сервиса Hyrax.

Сервис позволяет расшарить буфер обмена между компьютерами и/или Android устройствами, а также получать на компьютере все уведомления, приходящие на телефон. Итак, в первую очередь были сформированы требования:



Небольшая, лёгкая утилита, которая работает на любой Windows системе
Размер программки имеет значение, так как распространяться она должна через интернет и, хотя, современные скорости позволяют качать гигабайтные фильмы, гораздо приятнее, когда небольшая тула качается мгновенно. Большое внимание следовало уделить библиотекам, которые способны раздуть любое ‘hello world’ приложение так, что оно будет весить несколько десятков МБ



Возможность портирования на Mac с минимальными усилиями – было вторым требованием
Из-за этого требования пришлось отказаться от наиболее очевидного варианта – использование MS .NET. Программирование на .NET занимает намного меньше времени, позволяет писать простой код и размер программы получается небольшой, потому что .NET Framework уже установлен на Windows. Но, увы… попытка запустить .NET приложение на Mac — занятие хоть и возможное теоретически, но нетривиальное и отпугнет 99% пользователей.



UI не имеет большого значения
По задумке приложение должно отправлять буфер обмена на сервер по нажатию горячих клавиш (никаких кликов мышкой!) и скачивать с сервера новые данные с использованием long polling. Поэтому, за исключением примитивного окошка, где нужно показывать историю, никакого UI не планировалось (позднее правда появилось ещё окно для отображения уведомлений с телефона).

Получается, что, если отбросить .NET и Java (не каждый пользователь захочет ставить Java ради скаченной из инета программки) остается только С++. Начались поиски UI библиотек для С++. В свое время мне довелось писать UI и с помощью MFC и с помощью WTL, но, в настоящее время, больше всего на слуху библиотека QT. По отзывам и описанию она всем хороша, но бесплатная версия может использоваться только при динамической линковке, а мне очень хотелось, чтобы это был один единственный лёгкий EXE файл.

В итоге остановился на бесплатной кроссплатформенной open source библиотечке wxWidgets. Во время поисков очень удивлялся, что выбор весьма и весьма ограниченный, а хорошие UI библиотеки для С++ можно пересчитать по пальцам одной руки. Библиотека wxWidget позволяет создавать UI для любой платформы, будь то Windows, Mac или Linux правда выглядеть он при этом будет очень просто и ни в какое сравнение не идет с красотами, которые можно творить с использованием, скажем .NET WPF.
Для общения с сервисом поначалу я стал использовать библиотечки JsonCPP в связке с libcurl, на которой построена известная утилита curl (command line утилита, позволяющая отсылать данные по множеству сетевых протоколов), однако позднее узнал о прекрасной open source библиотеке от Microsoft (да, да, бывают и от них хорошие open source библиотеки) – cpprest (другое название – Casablanca) CppRest позволяет писать код для web service на современном С++, кроме того в ней уже есть поддержка Json, что избавляет от необходимости использовать другие json библиотеки.

Для того, чтобы собирать данный проект независимо от платформы используется CMake. CMake позволяет описать структуру С++ проекта и собирать его на различных платформах. Вот такая получилась солянка сборная, стек библиотек для простой программы облегчающей обмен данными между компами и Android устройствами.

PS Про стек серверных технологий я рассказал здесь.
Tags:
Hubs:
Total votes 18: ↑11 and ↓7+4
Comments15

Articles