InSim Relay: различия между версиями

Материал из LFS Manual.
Перейти к навигацииПерейти к поиску
 
(не показаны 4 промежуточные версии этого же участника)
Строка 1: Строка 1:
== Информация ==
+
== Использование InSim Relay (С/С++) ==
 
 
В этом разделе написано руководство о том, как подключиться к InSim с использованием различных языков программирования.
 
Есть много пакетов заранее скомпилированного программного обеспечения (например, JInSim для Java, FullMotion.LiveForSpeed на C # и так далее), но вы даже не узнаете, как использовать, если InSim Вы используете скомпилированным пакетов. Таким образом, каждая секция на этой странице должна быть на одном языке программирования и должна содержать следующие подразделы:
 
 
 
# Тип
 
# Построение/разборка пакета
 
# Соединение с InSim
 
# Отсоединение от InSim
 
# Пример
 
 
 
 
 
 
 
== Использование InSim Relay (С/С++)==
 
 
InSim Relay - это сервис, который подлючается к игровому серверу LFS через InSim и передает InSim информацию любому, кто подключится через InSim Relay. Эта передоваемая информация может использоваться программистами для различных целей, таких как LFS Spectator (удаленный просмотр гонок) и отслеживания и хранения статистики.
 
InSim Relay - это сервис, который подлючается к игровому серверу LFS через InSim и передает InSim информацию любому, кто подключится через InSim Relay. Эта передоваемая информация может использоваться программистами для различных целей, таких как LFS Spectator (удаленный просмотр гонок) и отслеживания и хранения статистики.
  
Чтобы подключить ваш сервер к Insim Relay, запишите его в базу на LFS World:
+
Чтобы подключить ваш сервер к Insim Relay, запишите его в базу на LFS World: http://www.lfsworld.net/?win=hosts&whichTab=insim_relay
http://www.lfsworld.net/?win=hosts&whichTab=insim_relay
 
  
Остальная часть этого документа только для программистов, которые хотят знать, как связаться с InSim Relay, с тем чтобы они могли использовать имеющиеся данные.<br>
+
Остальная часть этого документа только для программистов, которые хотят знать, как связаться с InSim Relay, с тем чтобы они могли использовать имеющиеся данные.
 +
<br>
  
 +
=== Поключение к InSim Relay ===
 
 
NEW: теперь вы можете также подключать различные другие insim Моды через relay,потому что вы можете подключиться к серверу с паролем администратора. Смотрите в конце этого документа какие пакеты можно послать.
+
Relay код можно рассматривать в качестве расширения для регулярного InSim протокола, так как пакеты, построены таким же образом, как обычные пакеты InSim и использовать свой собственный идентификатор.
  
=== Поключение к InSim Relay ===
+
Подключите клиента к isrelay.lfs.net: 47474 через протокол TCP. После подключения Вы можете запросить список серверов, к которым вы можете подключиться. Затем вы можете отправить пакет для Relay с выбранным сервером. После этого Relay будет посылать вам все insim данные от этого сервера.
Протокол, используемый для Relay - TCP и подключается к серверу isrelay.liveforspeed.net (213.40.20.2) через порт 47474
 
  
Приведем данные из документации
+
Некоторые хосты требует spectator пароль, чтобы войти на сервер.
  
<pre>
+
Вам не нужно указывать spectator пароль, если вы используете пароль администратора.
// 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
+
<pre>
// regular InSim packet there is available in LFS, just like as if you were connected
+
#define IRP_ARQ 250 // Send : request if we are host admin (after connecting to a host)
// to the host directly. For a full list, see end of document.
+
#define IRP_ARP 251 // Receive : replies if you are admin (after connecting to a host)
 
 
 
 
 
 
 
 
// Packet types used for the Relay
 
 
 
#define IRP_HARQ        250   // Receive : Admin mod Request
 
#define IRP_HARS        251   // Send  : Response on IRP_HARQ
 
 
#define IRP_HLR 252 // Send : To request a hostlist
 
#define IRP_HLR 252 // Send : To request a hostlist
 
#define IRP_HOS 253 // Receive : Hostlist info
 
#define IRP_HOS 253 // Receive : Hostlist info
 
#define IRP_SEL 254 // Send : To select a host
 
#define IRP_SEL 254 // Send : To select a host
 
#define IRP_ERR 255 // Receive : An error number
 
#define IRP_ERR 255 // Receive : An error number
 +
</pre>
  
 +
Чтобы запросить список серверов, отправте этот пакет :
  
 
+
<pre>
 
 
 
 
// To request a hostlist from the Relay, send this packet :
 
 
 
 
struct IR_HLR // HostList Request
 
struct IR_HLR // HostList Request
 
{
 
{
Строка 74: Строка 40:
 
byte Sp0;
 
byte Sp0;
 
};
 
};
 +
</pre>
  
 +
В ответ прийдет пакет IR_HOS с некоторыми данными о серверах
  
// That will return (multiple) packets containing hostnames and some information about them
+
IR_HOS включает в себя структурный пакет HInfo
 
 
// The following struct is a subpacket of the IR_HOS packet
 
  
 +
<pre>
 
struct HInfo // Sub packet for IR_HOS. Contains host information
 
struct HInfo // Sub packet for IR_HOS. Contains host information
 
{
 
{
Строка 90: Строка 57:
  
 
// NOTE 1)
 
// NOTE 1)
 
 
#define HOS_SPECPASS 1 // Host requires a spectator password
 
#define HOS_SPECPASS 1 // Host requires a spectator password
 
#define HOS_LICENSED 2 // Bit is set if host is licensed
 
#define HOS_LICENSED 2 // Bit is set if host is licensed
 
#define HOS_S1         4 // Bit is set if host is S1
 
#define HOS_S1         4 // Bit is set if host is S1
 
#define HOS_S2         8 // Bit is set if host is S2
 
#define HOS_S2         8 // Bit is set if host is S2
 +
</pre>
  
 
+
<pre>
 
struct IR_HOS // Hostlist (hosts connected to the Relay)
 
struct IR_HOS // Hostlist (hosts connected to the Relay)
 
{
 
{
Строка 106: Строка 73:
 
HInfo Info[6]; // Host info for every host in the Relay. 1 to 6 of these in a IR_HOS
 
HInfo Info[6]; // Host info for every host in the Relay. 1 to 6 of these in a IR_HOS
 
};
 
};
 +
</pre>
  
 +
Для выбора сервера отправте этот пакет :
  
// To select a host in the Relay, send this packet :
+
<pre>
 
 
 
struct IR_SEL // Relay select - packet to select a host, so relay starts sending you data.
 
struct IR_SEL // Relay select - packet to select a host, so relay starts sending you data.
 
{
 
{
Строка 122: Строка 90:
  
 
};
 
};
 +
</pre>
  
// After connecting, you can check the user to have admin rights
+
Для запроса на права администратора отправте этот пакет:
 
+
<pre>
struct IR_HARQ // Admin Request
+
struct IR_ARQ // Admin Request
 
{
 
{
     byte    Size;       // 4
+
     byte    Size; // 4
     byte    Type;       // IRP_HARQ
+
     byte    Type; // IRP_ARQ
 
     byte    ReqI;
 
     byte    ReqI;
 
     byte    Sp0;
 
     byte    Sp0;
 
};
 
};
 +
</pre>
  
struct IR_HARS // Admin Response
+
И Relay ответит на запрос этим пакетом :
 +
 
 +
<pre>
 +
struct IR_ARP // Admin Response
 
  {
 
  {
    byte   Size;       // 4
+
byte Size; // 4
    byte   Type;       // IRP_HARS
+
byte Type; // IRP_ARP
    byte   ReqI;
+
byte ReqI;
    byte   Admin;     // 0- no admin; 1- admin
+
byte Admin; // 0- no admin; 1- admin
 
  };
 
  };
 +
</pre>
  
 +
Если вы отправили ошибочные данные, такие как: неправильный пакет / название сервера/ админ пароль/ пароль зрителя, Relay вернет пакет с данными об ошибке :
  
// If you specify a wrong value, like invalid packet / hostname / adminpass / specpass,
+
<pre>
// the Relay returns an error packet :
 
 
 
 
struct IR_ERR
 
struct IR_ERR
 
{
 
{
Строка 154: Строка 127:
  
 
// NOTE 2) Error numbers :
 
// 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
 +
</pre>
  
#define IR_ERR_PACKET      1  // Invalid packet sent by client (wrong structure / length)
+
<b>Пакеты которые может отправить клиент на сервер :</b>
#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
 
  
==============================================
+
Для всех:<br>
Regular insim packets that a relay client can send to host :
+
TINY_VER<br>
 +
TINY_PING<br>
 +
TINY_SCP<br>
 +
TINY_SST<br>
 +
TINY_GTH<br>
 +
TINY_ISM<br>
 +
TINY_NCN<br>
 +
TINY_NPL<br>
 +
TINY_RES<br>
 +
TINY_REO<br>
 +
TINY_RST<br>
 +
TINY_AXI<br>
  
For anyone
+
Для Администраторов:<br>
TINY_VER
+
TINY_VTC<br>
TINY_PING
+
ISP_MST<br>
TINY_SCP
+
ISP_MSX<br>
TINY_SST
+
ISP_MSL<br>
TINY_GTH
+
ISP_MTC<br>
TINY_ISM
+
ISP_SCH<br>
TINY_NCN
+
ISP_BFN<br>
TINY_NPL
+
ISP_BTN<br>
TINY_RES
 
TINY_REO
 
TINY_RST
 
TINY_AXI
 
  
Admin only
+
Relay также принимает но не перенаправляет пакет<br>
TINY_VTC
+
TINY_NONE    // for relay-connection maintenance
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
+
 
</pre>
+
^v - |<br>
 +
^a - *<br>
 +
^c - :<br>
 +
^d - \<br>
 +
^s - /<br>
 +
^q - ?<br>
 +
^t - "<br>
 +
^l - <<br>
 +
^r - ><br>
 +
 
 +
^L = Latin 1 (CP1252)<br>
 +
^G = Greek (ISO-8859-7)<br>
 +
^C = Cyrillic (CP1251)<br>
 +
^J = Japanese (Shift-JIS)<br>
 +
^E = Central Europe (ISO-8859-2)<br>
 +
^T = Turkish (ISO-8859-9)<br>
 +
^B = Baltic (ISO-8859-13)<br>
 +
^H = Traditional Chinese (CP936)<br>
 +
^S = Simpified Chinese (CP949)<br>
 +
^K = Korean (CP950)<br>
 +
 
 +
^0 - Black<br>
 +
^1 - Red<br>
 +
^2 - Light green<br>
 +
^3 - Yellow<br>
 +
^4 - Blue<br>
 +
^5 - Purple<br>
 +
^6 - Light blue<br>
 +
^7 - White<br>
 +
^8 - Dark green (default)<br>
 +
^9 - Original text colour and codepage.
 +
 
 +
{{Guides}}
  
 
<!-- links to other languages -->
 
<!-- links to other languages -->
[[de:InSim Tutorials]]
+
[[en:InSim Relay]]
[[en:InSim Tutorials]]
 

Текущая версия на 16:24, 20 августа 2009

Использование 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.