Использование DDE в C#. Урок 5. Пишем простейший DDE-сервер. |
Автор megabax | ||
17.11.2013 г. | ||
Использование DDE в C#. Урок 5. Пишем простейший DDE-сервер.Что бы смотреть урок полностью, а так же скачать исходники к уроку, подпишитесь на платный раздел. В платном разделе статья находиться здесь. Исходники программы можно скачать в платном разделе.. И так, мы уже достаточно покопались в прилагаемом к NDDE примере, что бы разобраться как работать с данной библиотекой. Теперь мы можем разработать собственный DDE сервер и клиента к нему. Вот сегодня мы этим и займемся. Наш DDE сервер будет хранилищем неких условных ресурсов, которые могут зарезервировать клиенты. Что это могут быть за ресурсы? Ну, например, предположим, у нас есть биржевой робот. Он торгует согласно определенной стратегии, которая оцифрована и формализована. И вот робот совершает сделку. Но в реальности сделка может быть и не совершена. По какой причине? Ну, например, на некоторое время упал канал связи с интернетом и заявка не дошла до биржи. Или объем сделки был слишком большой, что не нашлось достаточно встречных заявок и сделка выполнилась не полностью. Таким образом, роботу нужна некая обратная связь от биржи, что бы узнать, так ли все происходить как надо. А как это определить? Один из способов: посмотреть баланс, сколько всего у нас акций. Если было, допустим, 10 акций, мы покупаем еще 10, то должно стать 20. Если стало только 19, то значит, что то пошло не так и нам надо докупить еще одну. Но как быть, если у нас два робота торгуют одним и тем же инструментом, и оба используют такую систему контроля? Очевидно, что они будут друг другу мешать. Но выход есть. Можно сделать так, что робот будет резервировать те акции, которые он купил. А другой робот будет считать их внешним портфелем и вычитать из общего количества. Как это будет выглядеть на практике? Допустим, у первого робота, согласно учету, должно быть 5 акций, у второго 10. На балансе 15 акций. Первый робот смотрит, на видит что акций 15. Но он еще и делает запрос специальному серверу, который выдает, что 10 акций зарезервировано. Он их вычитает и остается 5, что и должно быть. Второй видит резерв первого робота 5, вычитает и видит число 10. Тоже все верно. А теперь представим, что акций стало 14. Первый робот проверяет баланс, и видит, что на балансе 4 свободный акции. Докупает одну и считает, что все нормально. Второй робот при очередной проверке тоже посчитает, что все идет по плану. А что бы избежать такой ситуации, когда роботы пытаются корректировать остаток одновременно, нужно просто сделать так, что бы при запросе баланса и проверке робот блокировал данный ресурс от других роботов, а когда закончил транзакцию - отпускал его. И так, начнем программировать... ... ... На самом деле Reservator - это не структура, а класс, который мы будет использовать как структуру:
... Теперь займемся клиентом. Создаем новый проект, подключаем к нему библиотеку NDDE, рисуем интерфейс*: Поля ввода у меня названы tbName и tbCount, а кнопочки btnConnect, btnReserve и btnQuery. Вы можете назвать по другому, но тогда и текст программы у вас тоже будет другой, с соответствующими именами переменной. С такими именами полный текст клиента будет таким... ... Скриншоты, помеченные знаком *, являются цитатами и иллюстрациями программного продукта "Microsoft Visual Studio 2010 Professional", авторское право на который принадлежит корпорации Microsoft.. |
||
Последнее обновление ( 17.11.2013 г. ) |