WebSocket Events
RushChat uses WebSocket for real-time communication.
WebSocket Events Overview
IyBXZWJTb2NrZXQgRXZlbnQgU3lzdGVtCiMjIENvbm5lY3Rpb24KLSBDb25uZWN0aW9uIEFkZHJlc3MKICAtIHdzOi8vbG9jYWxob3N0OjUwMDEvd3MKICAtIHdzczovL2RvbWFpbi5jb20vd3MKLSBDb25uZWN0aW9uIE1ldGhvZAogIC0gQXV0byBDb25uZWN0CiAgLSBBdXRvIFJlY29ubmVjdAojIyBDbGllbnQg4oaSIFNlcnZlcgotIFVzZXIgRXZlbnRzCiAgLSB1c2VyOmpvaW4KICAtIHVzZXI6bG9naW4KLSBNZXNzYWdlIEV2ZW50cwogIC0gbWVzc2FnZTpzZW5kCiAgLSB0eXBpbmc6c3RhcnQKICAtIHR5cGluZzpzdG9wCi0gQ2hhbm5lbCBFdmVudHMKICAtIGNoYW5uZWw6am9pbgogIC0gY2hhbm5lbDpjcmVhdGUKLSBBZG1pbiBFdmVudHMKICAtIGFkbWluOmtpY2sKICAtIGFkbWluOm11dGUKICAtIGFkbWluOmFwcG9pbnQKLSBWb2ljZSBDaGF0CiAgLSB2b2ljZTpqb2luCiAgLSB2b2ljZTpsZWF2ZQogIC0gdm9pY2U6c2lnbmFsCiAgLSB2b2ljZTptdXRlCiAgLSB2b2ljZTpraWNrCiAgLSB2b2ljZTppbnZpdGUKIyMgU2VydmVyIOKGkiBDbGllbnQKLSBVc2VyIE5vdGlmaWNhdGlvbnMKICAtIHVzZXI6am9pbmVkCiAgLSB1c2VyOmxlZnQKICAtIHVzZXI6bGlzdAotIE1lc3NhZ2UgTm90aWZpY2F0aW9ucwogIC0gbWVzc2FnZTpyZWNlaXZlCiAgLSB0eXBpbmc6c3RhcnQKICAtIHR5cGluZzpzdG9wCi0gQ2hhbm5lbCBOb3RpZmljYXRpb25zCiAgLSBjaGFubmVsOmpvaW5lZAogIC0gY2hhbm5lbDpsaXN0Ci0gQWRtaW4gTm90aWZpY2F0aW9ucwogIC0gYWRtaW46YWN0aW9uCiAgLSBhZG1pbjppbmZvCi0gRXJyb3IgTm90aWZpY2F0aW9ucwogIC0gZXJyb3I=
Connection
Connection Address
Or using HTTPS:
Client → Server Events
user:join
User joins chat.
{
"event": "user:join",
"data": {
"username": "string"
}
}
user:login
User login.
{
"event": "user:login",
"data": {
"username": "string",
"password": "string"
}
}
message:send
Send message.
{
"event": "message:send",
"data": {
"channel_id": 1,
"message": "string",
"message_type": "text|image|system"
}
}
typing:start
User starts typing.
{
"event": "typing:start",
"data": {
"channel_id": 1
}
}
typing:stop
User stops typing.
{
"event": "typing:stop",
"data": {
"channel_id": 1
}
}
channel:join
Join channel.
{
"event": "channel:join",
"data": {
"channel_id": 1,
"password": "string (optional)"
}
}
channel:create
Create channel.
{
"event": "channel:create",
"data": {
"name": "string",
"is_private": true,
"password": "string (optional)"
}
}
admin:kick
Admin kicks user.
{
"event": "admin:kick",
"data": {
"target_username": "string"
}
}
admin:mute
Admin mutes user.
{
"event": "admin:mute",
"data": {
"target_username": "string"
}
}
admin:appoint
Admin appointment.
{
"event": "admin:appoint",
"data": {
"target_username": "string",
"admin_level": "A|B|C"
}
}
Server → Client Events
user:joined
Notify user joined.
{
"event": "user:joined",
"data": {
"username": "string"
}
}
user:left
Notify user left.
{
"event": "user:left",
"data": {
"username": "string"
}
}
user:list
Send online user list.
{
"event": "user:list",
"data": {
"users": ["username1", "username2"]
}
}
message:receive
Receive new message.
{
"event": "message:receive",
"data": {
"id": 1,
"channel_id": 1,
"username": "string",
"message": "string",
"message_type": "text|image|system",
"created_at": "2024-01-01T00:00:00Z"
}
}
typing:start
Someone is typing.
{
"event": "typing:start",
"data": {
"username": "string",
"channel_id": 1
}
}
typing:stop
Someone stopped typing.
{
"event": "typing:stop",
"data": {
"username": "string",
"channel_id": 1
}
}
channel:joined
Join channel successful.
{
"event": "channel:joined",
"data": {
"channel_id": 1,
"channel_name": "string"
}
}
channel:list
Channel list updated.
{
"event": "channel:list",
"data": {
"channels": [
{
"id": 1,
"name": "string",
"is_private": false
}
]
}
}
admin:action
Admin operation notification.
{
"event": "admin:action",
"data": {
"action_type": "kick|mute|appoint",
"admin_username": "string",
"target_username": "string"
}
}
error
Error message.
{
"event": "error",
"data": {
"message": "string"
}
}
Connection Management
Auto Reconnect
Client automatically handles disconnection and reconnection:
- Detect disconnection
- Automatically attempt reconnection
- Restore session after reconnection
Heartbeat
Server periodically sends heartbeat packets to keep connection alive.