Скрипт для подключения к торговой платформе
Данный скрипт написан на языке программирования python и представляет собой набор действий для подключения к серверу входа. Сервер входа предоставляет адрес (IP-адрес и порт) для подключения к шлюзу торговой платформы.
Пример скрипта для подключения к торговой платформе
#!/usr/bin/python # -*- coding: utf-8 -*- import binascii import socket import struct import sys import time # 1. Подключение к сервису входа на Т-полигоне sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_address = ('194.247.145.35', 7001) sock.connect(server_address) sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) # 2. Отправка сообщения Hello values = (32, 1, 0, 'YOUR_LOGIN', 'YOUR_PASSWORD') # h.size, h.msgid, h.seq, login, password packer = struct.Struct('=hhq 16s16s') packed_data = packer.pack(*values) print >>sys.stderr, 'sending %d bytes "%s"' % (len(packed_data), binascii.hexlify(packed_data)) sock.send(packed_data) # 3. Получение ответа Report fmt_frame = struct.Struct('=hhq') # заголовок fmt_data = struct.Struct('=h 128s') # тело fmt_list = struct.Struct('=hh') # список fmt_addr = struct.Struct('=hbb 48s') # элемент списка print >>sys.stderr, 'wait for %d bytes' % fmt_frame.size data = sock.recv(fmt_frame.size) # получение заголовка ответа (size,msgid,seq) = fmt_frame.unpack(data) data = sock.recv(size) # получение тела сообщения со списком print >>sys.stderr, 'received: %d bytes "%s"' % (len(data), binascii.hexlify(data)) (status, text) = fmt_data.unpack(data[:fmt_data.size]) if status != 0: print >>sys.stderr, "Reject: %s" % text exit(1) data = data[fmt_data.size:] # 4. Обработка списка адресов шлюзов (offset, count) = fmt_list.unpack(data[:fmt_list.size]) data = data[offset:] Types = {'Transaction': 0x1, 'DropCopy': 0x2, 'Risk': 0x4, # виды шлюзов 'Dictionary': 0x8, 'MarketData': 0x10, 'Backup': 0x4000} for i in range(count): (type, ver, pad0, address) = fmt_addr.unpack(data[:fmt_addr.size]) data = data[fmt_addr.size:] names = [t for t in Types if type&Types[t]] version = 'version 0.'+str(ver) if ver else 'default version' print '%s(%s) is %s' % (",".join(names), version, address) # 5. Завершение sock.close()