first commit
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
// ws://<host>/realtime/chat — a broadcast chat room.
|
||||
//
|
||||
// The whole client side is the framework's realtime runtime (the /chat page just
|
||||
// declares `data-room="chat"`). Here we only handle room events.
|
||||
import { defineRoom } from "@wrnexus/core";
|
||||
|
||||
type ChatIn = { user?: string; text?: string };
|
||||
|
||||
export default defineRoom({
|
||||
onConnect(client) {
|
||||
// Tell everyone else someone joined (the joiner sees the status badge).
|
||||
client.broadcast({ type: "system", text: "A user joined", online: client.room.count() });
|
||||
},
|
||||
|
||||
onMessage(client, msg: ChatIn) {
|
||||
const text = String(msg.text ?? "")
|
||||
.slice(0, 500)
|
||||
.trim();
|
||||
if (!text) return;
|
||||
const user = String(msg.user ?? "anon").slice(0, 40) || "anon";
|
||||
// Broadcast to the whole room, including the sender, so everyone stays in sync.
|
||||
client.room.broadcast({ type: "message", user, text });
|
||||
},
|
||||
|
||||
onLeave(client) {
|
||||
client.broadcast({ type: "system", text: "A user left", online: client.room.count() - 1 });
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user