InSim Relay
Использование InSim Relay (С/С++)
InSim Relay - это сервис, который подлючается к игровому серверу LFS через InSim и передает InSim информацию любому, кто подключится через InSim Relay. Эта передоваемая информация может использоваться программистами для различных целей, таких как LFS Spectator (удаленный просмотр гонок) и отслеживания и хранения статистики.
Чтобы подключить ваш сервер к Insim Relay, запишите его в базу на LFS World: http://www.lfsworld.net/?win=hosts&whichTab=insim_relay
Остальная часть этого документа только для программистов, которые хотят знать, как связаться с InSim Relay, с тем чтобы они могли использовать имеющиеся данные.
Поключение к InSim Relay
Relay код можно рассматривать в качестве расширения для регулярного InSim протокола, так как пакеты, построены таким же образом, как обычные пакеты InSim и использовать свой собственный идентификатор.
Подключите клиента к isrelay.lfs.net: 47474 через протокол TCP. После подключения Вы можете запросить список серверов, к которым вы можете подключиться. Затем вы можете отправить пакет для Relay с выбранным сервером. После этого Relay будет посылать вам все insim данные от этого сервера.
Некоторые хосты требует spectator пароль, чтобы войти на сервер.
Вам не нужно указывать spectator пароль, если вы используете пароль администратора.
За полным списоком пакетов данных см. в конце документа.
Типы пакетов
#define IRP_ARQ 250 // Send : request if we are host admin (after connecting to a host) #define IRP_ARP 251 // Receive : replies if you are admin (after connecting to a host) #define IRP_HLR 252 // Send : To request a hostlist #define IRP_HOS 253 // Receive : Hostlist info #define IRP_SEL 254 // Send : To select a host #define IRP_ERR 255 // Receive : An error number
Чтобы запросить список серверов, отправте этот пакет :
struct IR_HLR // HostList Request { byte Size; // 4 byte Type; // IRP_HLR byte ReqI; byte Sp0; };
В ответ прийдет пакет IR_HOS с некоторыми данными о серверах
IR_HOS включает в себя структурный пакет HInfo
struct HInfo // Sub packet for IR_HOS. Contains host information { char HName[32]; // Name of the host char Track[6]; // Short track name byte Flags; // Info flags about the host - see NOTE 1) below byte NumConns; // Number of people on the host }; // NOTE 1) #define HOS_SPECPASS 1 // Host requires a spectator password #define HOS_LICENSED 2 // Bit is set if host is licensed #define HOS_S1 4 // Bit is set if host is S1 #define HOS_S2 8 // Bit is set if host is S2
struct IR_HOS // Hostlist (hosts connected to the Relay) { byte Size; // 4 + NumHosts * 40 byte Type; // IRP_HOS byte ReqI; // As given in IR_HLR byte NumHosts; // Number of hosts described in this packet HInfo Info[6]; // Host info for every host in the Relay. 1 to 6 of these in a IR_HOS };
Для выбора сервера отправте этот пакет :
struct IR_SEL // Relay select - packet to select a host, so relay starts sending you data. { byte Size; // 68 byte Type; // IRP_SEL byte ReqI; // If non-zero Relay will reply with an IS_VER packet byte Zero; // 0 char HName[32]; // Hostname to receive data from - may be colourcode stripped char Admin[16]; // Admin password (to gain admin access to host) char Spec[16]; // Spectator password (if host requires it) };
Для запроса на права администратора отправте этот пакет:
struct IR_ARQ // Admin Request { byte Size; // 4 byte Type; // IRP_ARQ byte ReqI; byte Sp0; };
И Relay ответит на запрос этим пакетом :
struct IR_ARP // Admin Response { byte Size; // 4 byte Type; // IRP_ARP byte ReqI; byte Admin; // 0- no admin; 1- admin };
Если вы отправили ошибочные данные, такие как: неправильный пакет / название сервера/ админ пароль/ пароль зрителя, Relay вернет пакет с данными об ошибке :
struct IR_ERR { byte Size; // 4 byte Type; // IRP_ERR byte ReqI; // As given in RL_SEL, otherwise 0 byte ErrNo; // Error number - see NOTE 2) below }; // NOTE 2) Error numbers : #define IR_ERR_PACKET1 1 // Invalid packet sent by client (wrong structure / length) #define IR_ERR_PACKET2 2 // Invalid packet sent by client (packet was not allowed to be forwarded to host) #define IR_ERR_HOSTNAME 3 // Wrong hostname given by client #define IR_ERR_ADMIN 4 // Wrong admin pass given by client #define IR_ERR_SPEC 5 // Wrong spec pass given by client #define IR_ERR_NOSPEC 6 // Spectator pass required, but none given
Пакеты которые может отправить клиент на сервер :
Для всех:
TINY_VER
TINY_PING
TINY_SCP
TINY_SST
TINY_GTH
TINY_ISM
TINY_NCN
TINY_NPL
TINY_RES
TINY_REO
TINY_RST
TINY_AXI
Для Администраторов:
TINY_VTC
ISP_MST
ISP_MSX
ISP_MSL
ISP_MTC
ISP_SCH
ISP_BFN
ISP_BTN
Relay также принимает но не перенаправляет пакет
TINY_NONE // for relay-connection maintenance
Список экранированных команд
^v - |
^a - *
^c - :
^d - \
^s - /
^q - ?
^t - "
^l - <
^r - >
^L = Latin 1 (CP1252)
^G = Greek (ISO-8859-7)
^C = Cyrillic (CP1251)
^J = Japanese (Shift-JIS)
^E = Central Europe (ISO-8859-2)
^T = Turkish (ISO-8859-9)
^B = Baltic (ISO-8859-13)
^H = Traditional Chinese (CP936)
^S = Simpified Chinese (CP949)
^K = Korean (CP950)
^0 - Black
^1 - Red
^2 - Light green
^3 - Yellow
^4 - Blue
^5 - Purple
^6 - Light blue
^7 - White
^8 - Dark green (default)
^9 - Original text colour and codepage.