Скрипт для подключения к торговой платформе
Данный скрипт написан на языке программирования 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()