Standards:GMCP Client Variables

From Mudlet
Revision as of 00:42, 4 August 2024 by Tamarindo (talk | contribs) (Initial Draft)
Jump to navigation Jump to search

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.