add client and groups member logic

This commit is contained in:
2026-03-27 18:49:45 +01:00
parent a95bc43be6
commit c5fc74d142
9 changed files with 256 additions and 70 deletions
+66 -3
View File
@@ -42,7 +42,7 @@ func ServeWsConnection(responseWriter http.ResponseWriter, request *http.Request
return
}
} else {
if !handleUnauthenticatedMessage(&client, &clientMessage) {
if !handleUnauthenticatedMessage(ctx, &client, &clientMessage) {
ignoreCache = true
return
}
@@ -53,6 +53,10 @@ func ServeWsConnection(responseWriter http.ResponseWriter, request *http.Request
}
func sendMessageCloseIfTimeout(client *Client, message *map[string]any) {
if client.WsConn == nil {
return
}
ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
defer cancel()
@@ -74,11 +78,52 @@ func sendToAllMessageCloseIfTimeout(message *map[string]any) {
}
func handleAuthenticatedMessage(client *Client, clientMessage *map[string]any) bool {
sendToAllMessageCloseIfTimeout(clientMessage)
subject, ok := (*clientMessage)["subject"].(uint32)
if !ok {
var msg = map[string]any{
"from": "server",
"error": "subject invalid",
}
sendMessageCloseIfTimeout(client, &msg)
}
content, ok := (*clientMessage)["content"].(string)
if !ok {
var msg = map[string]any{
"from": "server",
"error": "content invalid",
}
sendMessageCloseIfTimeout(client, &msg)
}
group, err := CacheGetGroup(subject)
if err != nil {
var msg = map[string]any{
"from": "server",
"error": "subject invalid",
}
sendMessageCloseIfTimeout(client, &msg)
}
for groupClientId, _ := range group.Clients {
var msg = map[string]any{
"from": "group",
"group": group.Id,
"sender": client.Name,
"content": content,
}
var groupClient *Client
groupClient, err = CacheGetClientById(groupClientId)
if err != nil {
sendMessageCloseIfTimeout(groupClient, &msg)
}
}
return true
}
func handleUnauthenticatedMessage(client *Client, clientMessage *map[string]any) bool {
func handleUnauthenticatedMessage(ctx context.Context, client *Client, clientMessage *map[string]any) bool {
token, ok := (*clientMessage)["token"].(string)
if !ok {
var msg = map[string]any{
@@ -110,6 +155,24 @@ func handleUnauthenticatedMessage(client *Client, clientMessage *map[string]any)
}
*client = *clientFromCache
for groupId, _ := range clientFromCache.Groups {
_, err = CacheGetGroup(groupId)
if err != nil {
dbGroup := &Group{Id: groupId}
err = DbSetGroupById(ctx, dbGroup)
if err != nil {
var msg = map[string]any{
"from": "server",
"error": "invalid client data",
}
sendMessageCloseIfTimeout(client, &msg)
return false
}
CacheSaveGroup(dbGroup)
}
}
return true
}