package
0.0.0-20230627073407-ccdab229a04b
Repository: https://github.com/redis-developer/basic-redis-chat-demo-go.git
Documentation: pkg.go.dev

# README

Into

Backend application base on websocket

All communications between client and server processed with websocket

Data storage made on redis

Open WS

const ws = WebSocket('ws://localhost:8080/ws')

WebSocket Events

Produced on websocket open

ws.onopen = function(event){};

Produced on websocket closed

ws.onclose = function(event){};

Produced on websocket catch error

ws.onerror = function(event){};

Produced on websocket received message from server

ws.onmessage = function(event){};

Send message

Write a message to websocket

ws.send(JSON.stringify(body))

The body must be JSON Object, websocket server expected message as JSON Object as string

Accept messages from websocket

ws.onmessage = function(event){const body = JSON.parse(event.data);};

The body contained Stringified JSON Object

Kind of messages

Ready

Client connected and ready to send/receive messages

Response

{
    "type": "ready",
    "ready": {
        "sessionUUID": "Session UUID"
    }
}

Error

Server error response

Response

{
    "type": "error", 
    "error": {
        "code":1, 
        "message": "Error message"
    }
}

The server reply error response if request could not be processed, all kinds of messages will return error response with different error.code and error.message

This response useful for easy global error check and UI-render general error message

User SignIn

Make user login

Request

{
    "SUUID": "Session UUID", 
    "type": "signIn", 
    "signId": {
        "username": "User name", 
        "password": "User password"
    }
}

Response

{
    "type": "authorized": 
    "authorized": {
        "userUUID": "user UUID, 
        "accessKey": "User Access Key"
    }
}

User will be created if not exists

User SignUp

Create user account

Request

{
    "SUUID":"Session UUID",
    "type": "signUp", 
    "signUp": {
        "username": "User name", 
        "password": "User password"
    }
}

Response

{
    "type": "authorized", 
    "authorized": {
        "userUUID": 1, 
        "accessKey": "User Access Key"
    }
}

User SignOut

Make user logout

Request

{
    "SUUID": "Session UUID", 
    "type": "signOut",
    "userUUID: "User UUID", 
    "userAccessKey": "User Access Key"
}

Response

{
    "type": "unauthorized", 
    "unauthorized": {
        "userUUID": "User UUID"
    }
}

Users List

Read users list

Request

{
    "SUUID": "Session UUID", 
    "type": "users",
    "userUUID: "User UUID", 
    "userAccessKey": "User Access Key"
}

Response

{
    "type": "users", 
    "users": {
        "total": 0,
        "received": 0,
        "users": [
            {
                "UUID": "User UUID",
                "Username": "Username",
                "Password": "Password",
                "OnLine": true
            }
        ]
    }
}

Join to channel

Connect user to channel for read and write messages

Request

{
    "SUUID": "Session UUID", 
    "userUUID": "User UUID", 
    "userAccessKey": "User Access Key", 
    "type": "channelJoin", 
    "channelJoin": {
        "recipientUUID": "User UUID"
    }
}

Response

{
    "type": "channelJoin", 
    "channelJoin": {
        "messages": [
            {
                "UUID: "Message UUID", 
                "senderUUID": "User UUID", 
                "recipientUUID": "User UUID", 
                "message": "text",
                "created_at": "time"
            }
        ], 
        "users": [
            {
                "UUID": "User UUID", 
                "username": "username"
            }
        ]
    }
}

When recipientUUID equal to 0 user will be joined to public channel

Send message

Write a message from user to public or private channel

Request

{
    "SUUID": "Session UUID", 
    "userUUID": "User UUID", 
    "userAccessKey": "User Access Key", 
    "type": "channelMessage", 
    "channelMessage": {
        "recipientUUID": "User UUID", 
        "message": "Message text"
    }
}

Response

{
    "type": "channelMessage", 
    "channelMessage": {
        "UUID": "Message UUID"
        "senderUUID": "User UUID",
        "recipientUUID": "User UUID", 
        "message": "Message text"
    }
}

When recipientUUID equal to 0 the message will be sent to public channel

Read messages

List a messages from public or private channel

Request

{
    "SUUID": "Session UUID", 
    "userUUID": "User UUID", 
    "userAccessKey": "User Access Key", 
    "type": "channelMessages", 
    "channelMessages": {
        "recipientUUID": "User UUID", 
        "offset": 1, 
        "limit": 1
    }
}

Response

{
    "type": "channelRead", 
    "channelMessages": {
        "messagesTotal": 1, 
        "messagesReceived": 1, 
        "messages": [
            {
                "senderUUID": "User UUID",
                "recipientUUID": "User UUID",
                "message": "Message text",
                "createdAt": "created time"
            }
        ]
    }
}

When recipientUUID equal to 0 the messages will be read from public channel

The channelMessages.limit should be less that 100, default if 10

The channelMessages.offset is the entries offset, default is 0

All messages ordered from new to older

Leave channel

Exit from a channel and stop to receive messages from it

Request

{
    "SUUID": "Session UUID", 
    "userUUID": "User UUID", 
    "userAccessKey": "User Access Key", 
    "type": "channelLeave"
    "channelLeave": {
        "recipientUUID": "User UUID"
    }
}

Response

{
    "type": "channelLeave", 
    "channelLeave": {
        "recipientUUID": "User UUID"
    }
}

The recipientUUID could not be equal 0, user can not leave public channel

# Functions

No description provided by the author
No description provided by the author
No description provided by the author

# Structs

No description provided by the author

# Interfaces

No description provided by the author