Difference between revisions of "Standards:GMCP Client Variables"
m (Initial Draft) |
m (Initial Draft) |
||
Line 40: | Line 40: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===== Attribute Details ===== | ===== Attribute Details ===== | ||
− | {| class=“wikitable” | + | {| class="“wikitable”" |
|- | |- | ||
− | ! Attribute | + | ! Attribute |
+ | !Description | ||
|- | |- | ||
− | | available | + | |available |
+ | |Indicates if the variable is available for use. | ||
|- | |- | ||
− | | updatable | + | |updatable |
+ | | Indicates if the variable can be updated by the server. | ||
|} | |} | ||
− | ===== Client.Variables.Request ===== | + | |
+ | =====Client.Variables.Request===== | ||
'''Purpose''': The server requests specific client variables. | '''Purpose''': The server requests specific client variables. | ||
<syntaxhighlight lang="json"> | <syntaxhighlight lang="json"> | ||
Client.Variables.Request [“BOLD_IS_BRIGHT”, “CHARSET”, “FONT”, “FONT_SIZE”, “LANGUAGE”, “SCREEN_READER”, “SYSTEMTYPE”, “USER”] | Client.Variables.Request [“BOLD_IS_BRIGHT”, “CHARSET”, “FONT”, “FONT_SIZE”, “LANGUAGE”, “SCREEN_READER”, “SYSTEMTYPE”, “USER”] | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | ===== Client.Variables.Update ===== | + | =====Client.Variables.Update===== |
'''Purpose''': The client sends updates for requested variables. | '''Purpose''': The client sends updates for requested variables. | ||
<syntaxhighlight lang="json"> | <syntaxhighlight lang="json"> | ||
Line 117: | Line 121: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | ===== Attribute Details ===== | + | =====Attribute Details===== |
− | {| class=“wikitable” | + | {| class="“wikitable”" |
|- | |- | ||
− | ! Attribute !! Description | + | !Attribute!!Description |
|- | |- | ||
− | | available || Indicates if the variable is available for use. | + | |available||Indicates if the variable is available for use. |
|- | |- | ||
− | | updatable || Indicates if the variable can be updated by the server. | + | |updatable||Indicates if the variable can be updated by the server. |
|- | |- | ||
− | | requested || Indicates if the variable was requested by the server. | + | |requested||Indicates if the variable was requested by the server. |
|- | |- | ||
− | | source || Indicates the source of the update (request, server, client). | + | |source||Indicates the source of the update (request, server, client). |
|- | |- | ||
− | | timestamp || Unix timestamp indicating when the update was made. | + | |timestamp||Unix timestamp indicating when the update was made. |
|- | |- | ||
− | | value || The value of the variable. | + | |value||The value of the variable. |
|} | |} | ||
− | ===== Client.Variables.Set ===== | + | =====Client.Variables.Set===== |
'''Purpose''': The server sets specific client variables. | '''Purpose''': The server sets specific client variables. | ||
<syntaxhighlight lang="json"> | <syntaxhighlight lang="json"> | ||
Line 141: | Line 145: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | === Implementation Considerations === | + | ===Implementation Considerations=== |
− | * '''Client Support Advertisement''': Clients should advertise their support for the Client.Variables namespace using Core.Supports.Set. | + | *'''Client Support Advertisement''': Clients should advertise their support for the Client.Variables namespace using Core.Supports.Set. |
− | * '''Server Acknowledgement''': Servers acknowledge support with Client.Variables.Default. | + | *'''Server Acknowledgement''': Servers acknowledge support with Client.Variables.Default. |
− | * '''Consent Management''': Clients must handle user consent for sharing sensitive variables. Prompts should inform users of requested data and allow them to opt-in or block requests. | + | *'''Consent Management''': Clients must handle user consent for sharing sensitive variables. Prompts should inform users of requested data and allow them to opt-in or block requests. |
− | * '''Variable Updates''': Clients should manage variable updates efficiently, ensuring data integrity and user consent. | + | *'''Variable Updates''': Clients should manage variable updates efficiently, ensuring data integrity and user consent. |
− | === Example Flow === | + | ===Example Flow=== |
1. '''Client''': Advertises support. | 1. '''Client''': Advertises support. | ||
Line 250: | Line 254: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | === Conclusion === | + | ===Conclusion=== |
The GMCP Variables Sharing extension standardizes the exchange of client-specific variables, ensuring seamless integration and enhanced user experiences. By adopting this standard, MUD developers can streamline variable management, improve client-server communication, and provide more personalized gaming experiences. | The GMCP Variables Sharing extension standardizes the exchange of client-specific variables, ensuring seamless integration and enhanced user experiences. By adopting this standard, MUD developers can streamline variable management, improve client-server communication, and provide more personalized gaming experiences. | ||
− | == Versions == | + | ==Versions== |
− | * Version 1.0: Initial specification. | + | *Version 1.0: Initial specification. |
− | == Authors == | + | ==Authors== |
− | * Mike Conley (Tamarindo, Administrator at StickMUD and Mudlet contributor) mike.conley[at]stickmud.com | + | *Mike Conley (Tamarindo, Administrator at StickMUD and Mudlet contributor) mike.conley[at]stickmud.com |
− | === Notes === | + | ===Notes=== |
− | * This specification is subject to updates and community input. Contributions and feedback are welcome to ensure it meets the needs of the MUD community. | + | *This specification is subject to updates and community input. Contributions and feedback are welcome to ensure it meets the needs of the MUD community. |
− | * Implementation should follow GMCP protocol specifications, and all messages must be well-formatted JSON objects. | + | *Implementation should follow GMCP protocol specifications, and all messages must be well-formatted JSON objects. |
Revision as of 00:42, 4 August 2024
GMCP Client Variables Sharing Standard
Overview and Rationale
The GMCP Client Variables Sharing extension provides a standardized way to exchange client-specific variables between MUD clients and game servers using GMCP messages. This facilitates enhanced user experiences by allowing servers to adjust gameplay and UI elements based on client-provided data.
Specification for Client.Variables
Commands - Server
Client.Variables.Default
Purpose: Sent by the server to acknowledge support for the Client.Variables namespace.
Client.Variables.Default {}
Client.Variables.List
Purpose: The client sends a list of available client variables and their attributes.
Client.Variables.List {
“256_COLORS”: {“available”: true, “updatable”: false},
“ANSI”: {“available”: true, “updatable”: false},
“BOLD_IS_BRIGHT”: {“available”: true, “updatable”: true},
“CHARSET”: {“available”: true, “updatable”: true},
“CLIENT_NAME”: {“available”: true, “updatable”: false},
“CLIENT_VERSION”: {“available”: true, “updatable”: false},
“FONT”: {“available”: false, “updatable”: false},
“FONT_SIZE”: {“available”: false, “updatable”: false},
“LANGUAGE”: {“available”: false, “updatable”: false},
“MTTS”: {“available”: true, “updatable”: false},
“OSC_COLOR_PALETTE”: {“available”: true, “updatable”: false},
“SCREEN_READER”: {“available”: false, “updatable”: false},
“SYSTEMTYPE”: {“available”: false, “updatable”: false},
“TERMINAL_TYPE”: {“available”: true, “updatable”: false},
“TLS”: {“available”: true, “updatable”: false},
“TRUECOLOR”: {“available”: true, “updatable”: false},
“USER”: {“available”: false, “updatable”: false},
“UTF-8”: {“available”: true, “updatable”: false},
“VT100”: {“available”: true, “updatable”: false},
“WORD_WRAP”: {“available”: true, “updatable”: false}
}
Attribute Details
Attribute | Description |
---|---|
available | Indicates if the variable is available for use. |
updatable | Indicates if the variable can be updated by the server. |
Client.Variables.Request
Purpose: The server requests specific client variables.
Client.Variables.Request [“BOLD_IS_BRIGHT”, “CHARSET”, “FONT”, “FONT_SIZE”, “LANGUAGE”, “SCREEN_READER”, “SYSTEMTYPE”, “USER”]
Client.Variables.Update
Purpose: The client sends updates for requested variables.
Client.Variables.Update {
“BOLD_IS_BRIGHT”: {
“available”: true,
“updatable”: true,
“requested”: false,
“source”: “request”,
“timestamp”: 1721495879,
“value”: 2
},
“CHARSET”: {
“available”: true,
“updatable”: true,
“requested”: false,
“source”: “request”,
“timestamp”: 1721495879,
“value”: “UTF-8”
},
“FONT”: {
“available”: false,
“updatable”: false,
“requested”: true,
“source”: “request”,
“timestamp”: 1721495879
},
“FONT_SIZE”: {
“available”: false,
“updatable”: false,
“requested”: true,
“source”: “request”,
“timestamp”: 1721495879
},
“LANGUAGE”: {
“available”: false,
“updatable”: false,
“requested”: true,
“source”: “request”,
“timestamp”: 1721495879
},
“SCREEN_READER”: {
“available”: false,
“updatable”: false,
“requested”: true,
“source”: “request”,
“timestamp”: 1721495879
},
“SYSTEMTYPE”: {
“available”: false,
“updatable”: false,
“requested”: true,
“source”: “request”,
“timestamp”: 1721495879
},
“USER”: {
“available”: false,
“updatable”: false,
“requested”: true,
“source”: “request”,
“timestamp”: 1721495879
}
}
Attribute Details
Attribute | Description |
---|---|
available | Indicates if the variable is available for use. |
updatable | Indicates if the variable can be updated by the server. |
requested | Indicates if the variable was requested by the server. |
source | Indicates the source of the update (request, server, client). |
timestamp | Unix timestamp indicating when the update was made. |
value | The value of the variable. |
Client.Variables.Set
Purpose: The server sets specific client variables.
Client.Variables.Set {
“BOLD_IS_BRIGHT” : “1”
}
Implementation Considerations
- Client Support Advertisement: Clients should advertise their support for the Client.Variables namespace using Core.Supports.Set.
- Server Acknowledgement: Servers acknowledge support with Client.Variables.Default.
- Consent Management: Clients must handle user consent for sharing sensitive variables. Prompts should inform users of requested data and allow them to opt-in or block requests.
- Variable Updates: Clients should manage variable updates efficiently, ensuring data integrity and user consent.
Example Flow
1. Client: Advertises support.
Core.Supports.Set ["Client.Variables 1", ...]
2. Server: Acknowledges support.
Client.Variables.Default {}
3. Client: Sends available variables list.
Client.Variables.List {
"256_COLORS": {"available": true, "updatable": false},
"ANSI": {"available": true, "updatable": false},
"BOLD_IS_BRIGHT": {"available": true, "updatable": true},
"CHARSET": {"available": true, "updatable": true},
"CLIENT_NAME": {"available": true, "updatable": false},
"CLIENT_VERSION": {"available": true, "updatable": false},
"FONT": {"available": false, "updatable": false},
"FONT_SIZE": {"available": false, "updatable": false},
"LANGUAGE": {"available": false, "updatable": false},
"MTTS": {"available": true, "updatable": false},
"OSC_COLOR_PALETTE": {"available": true, "updatable": false},
"SCREEN_READER": {"available": false, "updatable": false},
"SYSTEMTYPE": {"available": false, "updatable": false},
"TERMINAL_TYPE": {"available": true, "updatable": false},
"TLS": {"available": true, "updatable": false},
"TRUECOLOR": {"available": true, "updatable": false},
"USER": {"available": false, "updatable": false},
"UTF-8": {"available": true, "updatable": false},
"VT100": {"available": true, "updatable": false},
"WORD_WRAP": {"available": true, "updatable": false}
}
4. Server: Requests specific variables.
Client.Variables.Request ["BOLD_IS_BRIGHT", "CHARSET", "FONT", "FONT_SIZE", "LANGUAGE", "SCREEN_READER", "SYSTEMTYPE", "USER"]
5. Client: Updates requested variables.
Client.Variables.Update {
"BOLD_IS_BRIGHT": {
"available": true,
"updatable": true,
"requested": false,
"source": "request",
"timestamp": 1721495879,
"value": 2
},
"CHARSET": {
"available": true,
"updatable": true,
"requested": false,
"source": "request",
"timestamp": 1721495879,
"value": "UTF-8"
},
"FONT": {
"available": false,
"updatable": false,
"requested": true,
"source": "request",
"timestamp": 1721495879
},
"FONT_SIZE": {
"available": false,
"updatable": false,
"requested": true,
"source": "request",
"timestamp": 1721495879
},
"LANGUAGE": {
"available": false,
"updatable": false,
"requested": true,
"source": "request",
"timestamp": 1721495879
},
"SCREEN_READER": {
"available": false,
"updatable": false,
"requested": true,
"source": "request",
"timestamp": 1721495879
},
"SYSTEMTYPE": {
"available": false,
"updatable": false,
"requested": true,
"source": "request",
"timestamp": 1721495879
},
"USER": {
"available": false,
"updatable": false,
"requested": true,
"source": "request",
"timestamp": 1721495879
}
}
Conclusion
The GMCP Variables Sharing extension standardizes the exchange of client-specific variables, ensuring seamless integration and enhanced user experiences. By adopting this standard, MUD developers can streamline variable management, improve client-server communication, and provide more personalized gaming experiences.
Versions
- Version 1.0: Initial specification.
Authors
- Mike Conley (Tamarindo, Administrator at StickMUD and Mudlet contributor) mike.conley[at]stickmud.com
Notes
- This specification is subject to updates and community input. Contributions and feedback are welcome to ensure it meets the needs of the MUD community.
- Implementation should follow GMCP protocol specifications, and all messages must be well-formatted JSON objects.