String clean_chat_field(String raw, u32 max_length) { String value = trim(raw); value = replace(value, "\r", " "); value = replace(value, "\n", " "); if(value.length() > max_length) value.resize(max_length); return(value); } DValue chat_event(Request& context, String type, String body) { DValue event; event["type"] = type; event["body"] = body; event["connection_id"] = context.params["WS_CONNECTION_ID"]; event["scope"] = first(context.params["WS_DOCUMENT_URI"], context.params["DOCUMENT_URI"]); event["online"] = float_val(first(context.params["WS_CONNECTION_COUNT"], "0")); event["at"] = time_format_utc("%H:%M:%S"); event["name"] = context.connection["name"].to_string(); event["message_count"] = context.connection["message_count"]; return(event); } RENDER(Request& context) { String ws_url = context.params["DOCUMENT_URI"]; u64 online = ws_connection_count(); <>

UCE Test: WebSocket Chat

Page scope: 
Connected right now: 
Status: Connecting...

This demo uses context.in for the current payload, context.params["WS_..."] for message metadata, and context.connection for per-client state.



		
	
}

WS(Request& context)
{
	if(ws_is_binary())
	{
		ws_send_to(
			context.params["WS_CONNECTION_ID"],
			json_encode(chat_event(context, "notice", "Binary messages are not handled by this demo"))
		);
		return;
	}

	DValue payload = json_decode(context.in);
	String type = clean_chat_field(payload["type"].to_string(), 24);
	String name = clean_chat_field(payload["name"].to_string(), 32);
	String body = clean_chat_field(payload["body"].to_string(), 500);
	u64 message_count = int_val(context.connection["message_count"].to_string());

	if(name == "")
		name = first(context.connection["name"].to_string(), "guest");

	context.connection["name"] = name;

	if(type == "join")
	{
		context.connection["joined_at"] = time_format_utc("%Y-%m-%d %H:%M:%S");
		context.connection["last_type"] = type;
		ws_send(json_encode(chat_event(context, "join", name + " joined the room")));
		return;
	}

	if(type == "message" && body != "")
	{
		context.connection["last_type"] = type;
		context.connection["last_body"] = body;
		context.connection["message_count"] = (f64)(message_count + 1);
		DValue event = chat_event(context, "message", body);
		ws_send(json_encode(event));
		return;
	}

	if(type != "")
	{
		context.connection["last_type"] = type;
		ws_send_to(context.params["WS_CONNECTION_ID"], json_encode(chat_event(context, "notice", "Unknown message type: " + type)));
	}
}