Interfejs RPC uruchomiony jest dla aplikacji dektopowych. Pozwala na zdalne zarządzanie oprogramowaniem klienta za pomocą zewnętrznych narzędzi.
Przykładową implementację protokołu RPC możesz znaleźć w programie scheditor - aplikacja, która standardowo dołączona jest do Pytigon'a
Aby wdrożyć zarządzanie za pomocą protokołu RPC musisz skonfigurować 3 elementy:
Przestawić swoją aplikację desktopową w tryb obsługujący protokół RPC najprościej to zrobić w schdevtools w okienku właściwości projektu, w polu User parameter wpisz:
GUI_COMMAND_LINE="--no_splash --rpc=
Utwórz dodatek do aplikacji, który będzie pośdredniczył w odbieraniu komend przykładowy dodatek snajduje się w folderze scheditor/plugins/sched/editor_proxy/ aplikacji scheditor. Dodatki posiadają dostęp do praktycznie wszystkich elementów interfejsu graficznego aplikacji dektopowej więc masz bardzo szeroki wachlaż możliwości sterowaniia programem klienta.
Napisz skrypt/program, który będzie sterował oprogramowaniem klienta Przykładowy skrypt znajduje się w folderze scheditor/sched.py aplikacji scheditor
import sys import xmlrpc.client from time import sleep import subprocess import os import os.path
_base_path = file.replace("sched.py", "") if _base_path == "": _base_path = os.getcwd()
PYTIGON_PATH = os.path.normpath(os.path.join(_base_path, "../.."))
with xmlrpc.client.ServerProxy("http://localhost:8090/") as proxy: repeat = True run = False while repeat: repeat = False try: proxy.test() except ConnectionRefusedError as error: repeat = True if not run: run = True subprocess.Popen([sys.executable, os.path.join(PYTIGON_PATH,'pytigon'), '--rpc=8090', '--no_splash', 'scheditor' ]) sleep(0.2)
if sys.argv and len(sys.argv)>1:
file_name = sys.argv[1]
if file_name:
if not (file_name[0] in ('/', '\\') or (len(file_name)>1 and file_name[1] == ':')):
x = os.getcwd()
file_name = os.path.join(x, file_name)
if len(file_name)>1 and file_name[1]==':' and file_name[0].lower()=='c':
proxy.edit("/osfs"+file_name[2:])
else:
proxy.edit("/osfs"+file_name)
skrypt wykorzystuje standardową dla pythona bibliotekę xmlrpc, port w ServerProxy oczywiście musi być zgodny z portem użytym w punkcie 1. Skrypt sprawdza czy program klienta jest uruchomiony, testując czy port 8090 jest otwarty. Jeżeli port nie odpowiada uruchamiany jest program klienta i otwierany plik. W przypadku gdy port jest otwarty poprzez protokół rpc nawiązywana jest komunikacja z instancą programu i we wcześniej uruchomionym programie otwierany plik. Dzięki rpc udało się zrealizować otwieranie kolejnych plików w kartach jednego programu.