Автоматизация (XML-RPC)

Home Topic  Previous Topic  Next Topic  Print this Topic

Для программистов, желающих написать собственное дополнение к программе Компьютерный Зал реализован XML-RPC интерфейс. Количество поддерживаемых функций будет непрерывно увеличиваться, т.к. это напрямую влияет на функциональность Android-приложения "Компьютерный Зал" (https://play.google.com/store/apps/details?id=com.astrumsoft.czprototype1).

 

Вы уже можете реализовать приложение показывающее какие компьютеры сводобны, какие заняты в клубе, добавить или остановить время.

 

Пример использования (сделай сам): большой телевизор показывает в клубе какие компьютеры свободны, какие заняты. Эту информацию на него транслирует Android-приставка.

 

Что такое XML-RPC читайте на википедии. Этот протокол реализован для многих языков, данное руководство будет использовать примеры на python 3.3.

 

Необходимая для старта информация

 

Разрешите XML-RPC на серверной части и задайте пароль (например, "mypass"). Пароль используется во всех XML-RPC функциях как первый параметр.

 

URL доступа к XML-RPC: http://server-ip:8850/RPC2

 

Замените server-ip адресом вашего компьютера администратора в локальной сети. Порт пока фиксированный. Очевидно что ваше приложение должно находиться в той же сети, что и серверная часть программы. Если это мобильное Android-устройство, оно должно находиться в WiFi сети клуба (IP адрес устройства в той же сети что и сервеная часть программы).

 

Примеры использования с python3.3 - вернуть версию серверной части программы.

 

>>> import xmlrpc.client

>>> proxy=xmlrpc.client.ServerProxy("http://192.168.100.100:8850/RPC2")

>>> proxy.version("mypass")

'3.91'

 

Вывести все поддерживаемые методы:

 

>>> proxy.system.listMethods()

['system.listMethods', 'system.methodExist', 'system.methodHelp', 'system.methodSignature', 'system.multicall', 'system.shutdown', 'system.capabilities', 'numComps', 'version', 'compState', 'timeList', 'startTime', 'resetTime', 'currency', 'pauseTime', 'protocolVersion']

 

Вывести сигнатуру метода version (входной параметр строка-пароль, выходной строка-версия):

 

>>> proxy.system.methodSignature("version")

[['string', 'string']]

 

Обратная совместимость версий протоколов

 

Поскольку развитие серверной части программы и Android-приложения происходит раздельно, а общаются они по одному протоколу, необходим механизм гарантирующий неизменность протокола (гарантии для Android приложения, что оно получит ожидаемые ответы на свои запросы).

 

Ключевым моментом является версия протокола:

 

>>> proxy.protocolVersion("mypass")

1

 

Гарантируется, что клиенты (например, Android приложения), написанные для протокола младшей версии, продолжат работу с серверной частью старшей версии.

Мы оставляем за собой право отменить поддержку старых версий протоколов, т.е. в идеальной ситуации у вас должная быть новейшая версия серверного приложения и клиентского (например, Android), но мы постараемся поддерживать обратную совместимость протоколов насколько это возможно.

Клиентское (например, Android) приложение, использующее новый протокол не будет работать со старой версией серверной части программы. Прочитайте следующее предупреждение об обновлении версий Android приложения.

Новые функции будут добавляться как обычно, а если потребуется изменение сигнатуры работы старого метода, будет добавлен новый метод с числом в конце имени, равным новой версии протокола.

 

 

Список реализованных функций (API)

 

protocolVersion - вернуть версию протокола

 

>>> proxy.system.methodSignature("protocolVersion")

[['int', 'string']]

 

Входные параметры: строка - пароль на доступ к серверной части программы

Выходной параметр: число - версия протокола серверной части программы

 

>>> proxy.protocolVersion("mypass")

1

 

Прочитайте про обратную совместимость версий протоколов.

 

version - вернуть версию серверной части программы

 

>>> proxy.system.methodSignature("version")

[['string', 'string']]

 

Входные параметры: строка - пароль на доступ к серверной части программы

Выходной параметр: строка - версия серверной части программы

 

>>> proxy.version("mypass")

'3.91'

 

numComps - вернуть количество клиентских компьютеров в клубе

 

>>> proxy.system.methodSignature("numComps")

[['int', 'string']]

 

Входные параметры: строка-пароль на доступ к серверной части программы

Выходной параметр: целое - количество клиентских компьютеров в клубе

 

>>> proxy.numComps("mypass")

16

 

compState - вернуть состояние заданного клиентского компьютера

 

>>> proxy.system.methodSignature("compState")

[['struct', 'string', 'int']]

 

Входные параметры:

строка-пароль на доступ к серверной части программы
номер клиентского компьютера (с нуля)

 

Выходные параметры: структура состояния клиентского компьютера

Список полей выходной структуры:

startFinishTime - строка, время начало работы режима таймера или конца работы при посадке на фиксированное время)
discount - число, скидка введенная в индикаторе серверной части программы
game - логическое, True если режим игр, False если режим Интернета
remainingSpentTime - строка, количество израсходованного времени в режиме таймера или количество оставшегося времени в режиме посадки на фиксированное время.
online - логическое, True если клиентский компьютер на связи (соответствует зеленому статусу индикатора)

 

>>> proxy.compState("mypass", 3)

{'startFinishTime': '11:36', 'discount': 0, 'status': 2, 'game': False, 'remainingSpentTime': '1ч 00мин', 'online': False}

 

timeList - вернуть текущее содержимое списка вводимых значений в индикатор

 

>>> proxy.system.methodSignature("timeList")

[['array', 'string']]

 

Входные параметры: строка-пароль на доступ к серверной части программы

Выходной параметр: массив строк - значения для ввода в индикатор

 

>>> proxy.timeList("mypass")

['20', '30', '40', '60', '120', 'Таймер', 'Ночь', 'Полночи']

 

startTime - добавить время, т.е. разрешить работу клиенту

 

>>> proxy.system.methodSignature("startTime")

[['int', 'string', 'int', 'boolean', 'int', 'string']]

 

 

Входные параметры:

строка-пароль на доступ к серверной части программы
число - номер клиентского компьютера (с нуля)
логическое - True если режим игр, False если режим интернета
число - скидка
строка - значение которое вы вводите в индикатор, например "60" - для добавления 60 минут или "Таймер" для открытия времени в режиме таймера

 

Выходной параметр: число, не используется

 

Добавить 60 минут игр на компьютер 16, без скидки:

>>> proxy.startTime("mypass", 15, True, 0, "60")

0

 

resetTime - сбросить индикатор или остановить таймер

 

>>> proxy.system.methodSignature("resetTime")

[['string', 'string', 'int']]

 

Входные параметры:

строка-пароль на доступ к серверной части программы
число - номер клиентского компьютера (с нуля)

 

Выходной параметр: строка, если не пустая, то сумма к оплате (например, остановка режима таймера)

 

>>> proxy.resetTime("mypass",0)

'3.00'

 

currency - вернуть название используемой в программе валюты

 

>>> proxy.system.methodSignature("currency")

[['string', 'string']]

 

Входной параметр: строка-пароль на доступ к серверной части программы

Выходной параметр: строка - название валюты программы (клиентское приложение обычно использует его при показе суммы оплаты, количества денег и т.д.)

 

>>> proxy.currency("mypass")

'руб'

 

pauseTime - поставить клиентский компьютер на паузу

 

>>> proxy.system.methodSignature("pauseTime")

[['int', 'string', 'int', 'string']]

 

Входные параметры:

строка-пароль на доступ к серверной части программы
число - номер клиентского компьютера (с нуля)
строка - причина паузы

 

Выходной параметр: число, не используется

 

>>> proxy.pauseTime("mypass", 5, "вышел покурить")

0

 

screenshot - получить снимок экрана клиента

(версия протокола 2)

 

>>> proxy.system.methodSignature("screenshot")

[['base64', 'string', 'int']]

 

Входные параметры:

строка-пароль на доступ к серверной части программы
число - номер клиентского компьютера (с нуля)

 

Выходной параметр: binary, jpeg-картинка

 

>>> proxy.screenshot("mypass", 5)

<binary jpeg encoded image>

 

reboot - перегрузить клиента

(версия протокола 2)

 

>>> proxy.system.methodSignature("reboot")

[['int', 'string', 'int']]

 

Входные параметры:

строка-пароль на доступ к серверной части программы
число - номер клиентского компьютера (с нуля)

 

Выходной параметр: число, не используется

 

>>> proxy.reboot("mypass", 5)

0

 

shutdown - выключить питание клиента

(версия протокола 2)

 

>>> proxy.system.methodSignature("shutdown")

[['int', 'string', 'int']]

 

Входные параметры:

строка-пароль на доступ к серверной части программы
число - номер клиентского компьютера (с нуля)

 

Выходной параметр: число, не используется

 

>>> proxy.shutdown("mypass", 5)

0

 


Rambler's Top100