InSim Relay: различия между версиями
м («Insim Tutorials» переименована в «Insim Relay») |
Версия 21:49, 23 июня 2009
Информация
В этом разделе написано руководство о том, как подключиться к InSim с использованием различных языков программирования. Есть много пакетов заранее скомпилированного программного обеспечения (например, JInSim для Java, FullMotion.LiveForSpeed на C # и так далее), но вы даже не узнаете, как использовать, если InSim Вы используете скомпилированным пакетов. Таким образом, каждая секция на этой странице должна быть на одном языке программирования и должна содержать следующие подразделы:
- Тип
- Построение/разборка пакета
- Соединение с InSim
- Отсоединение от InSim
- Пример
Использование 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, с тем чтобы они могли использовать имеющиеся данные.
NEW: теперь вы можете также подключать различные другие insim Моды через relay,потому что вы можете подключиться к серверу с паролем администратора. Смотрите в конце этого документа какие пакеты можно послать.
Поключение к InSim Relay
Протокол, используемый для Relay - TCP и подключается к серверу isrelay.liveforspeed.net (213.40.20.2) через порт 47474
Приведем данные из документации
// InSimRelay for LFS InSim version 4 (LFS 0.5X and up) // // The Relay code below can be seen as an extension to the regular // InSim protocol, as the packets are constructed in the same // manner as regular InSim packets. // // Connect your client to isrelay.lfs.net:47474 with TCP // After you are connected you can request a hostlist, so you can see // which hosts you can connect to. // Then you can send a packet to the Relay to select a host. After that // the Relay will send you all insim data from that host. // Some hosts require a spectator password in order to be selectable. // You do not need to specify a spectator password if you use a valid administrator password. // If you connect with an administrator password, you can send just about every // regular InSim packet there is available in LFS, just like as if you were connected // to the host directly. For a full list, see end of document. // Packet types used for the Relay #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 // To request a hostlist from the Relay, send this packet : struct IR_HLR // HostList Request { byte Size; // 4 byte Type; // IRP_HLR byte ReqI; byte Sp0; }; // That will return (multiple) packets containing hostnames and some information about them // The following struct is a subpacket of the IR_HOS packet 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 }; // To select a host in the Relay, send this packet : 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) }; // If you specify a wrong value, like invalid packet / hostname / adminpass / specpass, // the Relay returns an error packet : 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_PACKET 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 ============================================== Regular insim packets that a relay client can send to host : For anyone TINY_VER TINY_PING TINY_SCP TINY_SST TINY_GTH TINY_ISM TINY_NCN TINY_NPL TINY_RES TINY_REO TINY_RST TINY_AXI Admin only TINY_VTC ISP_MST ISP_MSX ISP_MSL ISP_MTC ISP_SCH ISP_BFN ISP_BTN The relay will also accept, but not forward TINY_NONE // for relay-connection maintenance