User Tools

Site Tools


gamedev:remotelaunching:networkprotocol

Start Page » Game Development with the Drag[en]gine » Remote Launching » Remote Launcher Network Protocol

Remote Launcher Network Protocol

The Remote Launcher Network Protocol uses the Drag[en]gine Network Protocol as protocol and defines a set of messages and linked states supported by IGDE and Remote Launchers. The specification can change with upcoming Drag[en]gine updates but stays backwards compatible. Servers and clients are required to ignore unknown messages and linked states.

To implement this protocol best use Drag[en]gine Network Library and add the necessary message and state handling.

Messages

These are all messages the server and the client can send to each other.

Connect Request

Upon connecting the client has to send this message to request access to IGDE indicating the kinds of features it supports. The connect request message has this format:

Type Name Description
Byte Code Message code. Is value 1
Byte[16] Signature Identifies the connecting client as a Remote Launcher client. Value has to be DERemLaunchCnt-0.
UInt SupportedFeatures

Features supported by the client. Flags value with these possible values:

  • No flags defined. Reserved for future expansion
String8 Name Name describing the remote client connecting. This is a free form name of short length chosen by the developer to distinguish multiple connected clients in the IGDE.
- Reserved Reserved for future expansion. Ignore any additional bytes in the message

The server will then respond with a Connect Accepted message or disconnect the client if rejected.

Connect Accepted

Send by the server after a client connects which send Connect Request message identifying itself as a Remote Launcher client. This is the first message received from the server. The client should not send any messages until it has received this message as this will get him disconnected. The message is send reliable and has this format:

Type Name Description
Byte Code Message code. Is value 2
Byte[16] Signature Identifies the server as a Remote Launcher server. Value is DERemLaunchSrv-0. If this value is not matching the client has to disconnect immediately as it is not connecting to a Remote Launcher server.
UInt EnabledFeatures Enabled features supported by both the connecting client and the server. Same possible values as in SupportedFeatures in Connect Request message
- Reserved Reserved for future expansion. Ignore any additional bytes in the message

Request File Layout

Send by the server to request the file layout of the client. The client has to scan the entire date storage where the project files are located and record the file parameters. Since this process can be lengthy the client typically stores the file layout in memory and updates it as files are modified. The message is send reliable and has this format:

Type Name Description
Byte Code Message code. Is value 3
- Reserved Reserved for future expansion. Ignore any additional bytes in the message.

Once the file layout is ready a Response File Layout message is send.

Response File Layout

Send by the client in response to a Request File Layout message containing the scanned file layout. Layout contains the entire file hierarchy as flat list. The message is send reliable and has this format:

Type Name Description
Byte Code Message code. Is value 4
UInt FileCount Count of files.
FileData[FileCount] Files FileCount file data.
- Reserved Reserved for future expansion. Ignore any additional bytes in the message.

FileData has this format:

Type Name Description
String16 Path File path relative to root of data directory.
ULong Size File size in bytes.
String8 Hash Hash of file (SHA-256).

Request File Block Hashes

Send by the server to request block wise hashes of a file from the client. Block wise hashes are useful for large files to avoid updating the entire file. Since this process can be lengthy the client typically stores the block wise hashes for a file in memory if requested. The message is send reliable and has this format:

Type Name Description
Byte Code Message code. Is value 5
String16 Path File path relative to root of data directory.
UInt BlockSize Size of blocks in bytes.

Once the block wise hashes are calculated a Response File Block Hashes message is send.

Response File Block Hashes

Send by the client in response to a Request File Block Hashes message containing the file block hashes. The message is send reliable and has this format:

Type Name Description
Byte Code Message code. Is value 6
String16 Path File path relative to root of data directory.
UInt BlockCount Count of blocks.
UInt BlockSize Size of blocks in bytes.
String8[BlockCount] Blocks BlockCount hashes (SHA-256).
- Reserved Reserved for future expansion. Ignore any additional bytes in the message.

Request Delete Files

Send by the server to request the client to delete files. The message is send reliable and has this format:

Type Name Description
Byte Code Message code. Is value 7
UInt FileCount Count of files to delete.
String16[FileCount] Files FileCount file path relative to to root of data directory.
- Reserved Reserved for future expansion. Ignore any additional bytes in the message.

Once the operation finished (either successfully or not) a Response Delete Files message is send.

Response Delete Files

Send by the client in response to a Request Delete Files message. Indicates if the operation succeeded or not. The message is send reliable and has this format:

Type Name Description
Byte Code Message code. Is value 8
UInt FileCount Count of files.
FileData[FileCount] Files FileCount file data.
- Reserved Reserved for future expansion. Ignore any additional bytes in the message.

FileData has this format:

Type Name Description
String16 Path File path relative to root of data directory.
Byte Result

Result of delete operation. Can be one of these values:

  • 0: File has been deleted.
  • 1: File could not be deleted.

Additional result codes can be added in the future to indicate better what has been the problem. Servers have to consider all values except 0 as a failure.

Request Write Files

Send by the server to request the client to start writing files. The message is send reliable and has this format:

Type Name Description
Byte Code Message code. Is value 9
UInt FileCount Count of files to start write.
FileData[FileCount] Files FileCount data to process.
- Reserved Reserved for future expansion. Ignore any additional bytes in the message.

FileData has this format:

Type Name Description
String16 Path File path relative to root of data directory.
ULong Size File size in bytes.

The client has to mark the files as in progress for writing. If the file size is shorter than the existing file the file has to be truncated. File writing has to be done in overwrite mode hence the file content is retained. This allows updating only ranges of data inside large files. Data to write is send using unreliable Send File Data messages.

Once ready the client has to send back a Response Write Files.

Response Write Files

Send by the client in response to a Request Write Files message. The message is send reliable and has this format:

Type Name Description
Byte Code Message code. Is value 10
UInt FileCount Count of files.
FileData[FileCount] Files FileCount file data.
- Reserved Reserved for future expansion. Ignore any additional bytes in the message.

FileData has this format:

Type Name Description
String16 Path File path relative to root of data directory.
Byte Result

Result of operation. Can be one of these values:

  • 0: File is ready to be written to.
  • 1: File can not be written.

Additional result codes can be added in the future. Servers have to consider all values except 0 as a failure.

Send File Data

Message send by the server to client with data to write to a file. The message is send unreliable and has this format:

Type Name Description
Byte Code Message code. Is value 11
String16 Path File path relative to root of data directory.
ULong Offset Byte offset in the file to write the data to.
Byte[*] Data Remaining bytes in the message is the data to write at Offset.

Receiving and processing the message (successful or not) requires the client to send a File Data Received message. Multiple Send File Data messages can be acknowledged in the same File Data Received message.

File Data Received

Send by the client after receiving one or more Send File Data messages. Using this message the server knows which Send File Data messages have arrive and which have been successfully been written. The message is send reliable and has this format:

Type Name Description
Byte Code Message code. Is value 12
UInt FileCount Count of files.
FileData[FileCount] Files FileCount file data.
- Reserved Reserved for future expansion. Ignore any additional bytes in the message.

FileData has this format:

Type Name Description
String16 Path File path relative to root of data directory.
ULong Offset Byte offset in the file.
UInt Length Length in bytes.
Byte Result

Result of write operation. Can be one of these values:

  • 0: Writing data has been successful.
  • 1: Writing data has failed.

Additional result codes can be added in the future to indicate better what has been the problem. Servers have to consider all values except 0 as a failure.

Request Finish Write Files

Send by the server to request the client to finish writing files. The message is send reliable and has this format:

Type Name Description
Byte Code Message code. Is value 13
UInt FileCount Count of files to finish writing.
String16[FileCount] Files FileCount file path relative to root of data directory to finish writing.
- Reserved Reserved for future expansion. Ignore any additional bytes in the message.

The client has to mark the files as finished writing and ready to be used.

Once ready the client has to send back a Response Finish Write Files.

Response Finish Write Files

Send by the client in response to a Request Finish Write Files message. The message is send reliable and has this format:

Type Name Description
Byte Code Message code. Is value 14
UInt FileCount Count of files.
FileData[FileCount] Files FileCount file data.
- Reserved Reserved for future expansion. Ignore any additional bytes in the message.

FileData has this format:

Type Name Description
String16 Path File path relative to root of data directory.
Byte Result

Result of operation. Can be one of these values:

  • 0: File has been successfully written.
  • 1: Writing file failed.

Additional result codes can be added in the future. Servers have to consider all values except 0 as a failure.

Start Application

Send by the server to request the client to start application. The message is send reliable and has this format:

Type Name Description
Byte Code Message code. Is value 15
String16 GameConfig Content of *.degame file used to launch the application.
String8 ProfileName Name of profile to use for launching the application. Use default if empty string.
String16 Arguments Command line arguments to use. Use none if empty string.
- Reserved Reserved for future expansion. Ignore any additional bytes in the message

Stop Application

Send by the server to request the client to stop application. The message is send reliable and has this format:

Type Name Description
Byte Code Message code. Is value 16
Byte Mode

How to stop the application. Can be one of these values:

  • 0: Request closing application using system means. This can be for example a close application or close window event.
  • 1: Kill application. Used if the application is not responding to closing.

Additional result codes can be added in the future. Clients have to ignore unknown values.

- Reserved Reserved for future expansion. Ignore any additional bytes in the message

Logs

Send by the client to send logs to the server. Logs are send as lines. The message is send reliable and has this format:

Type Name Description
Byte Code Message code. Is value 17
UShort LineCount Count of lines.
LineData[LineCount] Lines LineCount line data.
- Reserved Reserved for future expansion. Ignore any additional bytes in the message.

LineData has this format:

Type Name Description
Byte Level

Log level. Can be one of these values:

  • 0: Information.
  • 1: Warning.
  • 2: Error.

Additional levels can be added in the future. Servers have to consider all unknown values as being 0.

String8 Timestamp Timestamp in text form.
String16 Message Log message.

Linked States

These are all linked states the server can request.

Record/Playback

Send by the server to link the running state. The link message has this format:

Type Name Description
Byte Code Message code. Is value 1
- Reserved Reserved for future expansion. Ignore any additional bytes in the message

The client has to add these values to the state in this specified order:

Index Type Name Description
0 UInt8 Status

Status of the application. Can be one of these values:

  • 0: Stopped.
  • 1: Running.

Revision

Date Changes
You could leave a comment if you were logged in.
gamedev/remotelaunching/networkprotocol.txt · Last modified: 2024/09/25 14:58 by dragonlord