rework ws responses to user, send events to user via ws

This commit is contained in:
2026-04-12 13:18:54 +02:00
parent 9076a5c5c8
commit 63b585313a
9 changed files with 149 additions and 103 deletions
+60 -23
View File
@@ -8,6 +8,7 @@ import (
"time"
"go-socket/Enums/ConnectionState"
"go-socket/Enums/WsEventType"
"github.com/google/uuid"
)
@@ -64,7 +65,10 @@ func HttpHandleDm(response http.ResponseWriter, request *http.Request) {
Receiver: conn.Id,
}
WsMessageSendToUser(target, message)
WsSendMessageCloseIfTimeout(target, WsEventMessage{
Type: WsEventType.DirectMessage,
Event: message,
})
err = DbMessageSave(ctx, message)
if err != nil {
@@ -201,6 +205,11 @@ func HttpHandleUserNewConnection(response http.ResponseWriter, request *http.Req
}
CacheAddConnection(requestor, recipient, connection)
WsSendMessageCloseIfTimeout(recipient, WsEventMessage{
Type: WsEventType.ConnectionCreated,
Event: connection,
})
response.WriteHeader(http.StatusCreated)
return
}
@@ -256,6 +265,10 @@ func HttpHandleUserDeleteConnection(response http.ResponseWriter, request *http.
}
CacheDeleteConnection(user, user2, connectionId)
WsSendMessageCloseIfTimeout(user2, WsEventMessage{
Type: WsEventType.ConnectionDeleted,
Event: connectionId,
})
response.WriteHeader(http.StatusAccepted)
}
@@ -281,29 +294,53 @@ func HttpHandleUserElevateConnection(response http.ResponseWriter, request *http
return
}
if conn.RecipientId != user.Id {
http.Error(response, "invalid connectionid", http.StatusBadRequest)
return
}
switch conn.State {
case ConnectionState.Stranger:
conn.State = ConnectionState.Friend
break
case ConnectionState.GroupFellow:
conn.State = ConnectionState.Stranger
break
default:
http.Error(response, "cannot elevate further", http.StatusBadRequest)
return
}
err = DbConnectionUpdateState(ctx, conn)
if err != nil {
http.Error(response, "internal server error", http.StatusInternalServerError)
return
}
response.WriteHeader(http.StatusAccepted)
// TODO change to != "" after user id via uuid
if conn.UserWantingToElevate != 0 && conn.UserWantingToElevate != user.Id {
switch conn.State {
case ConnectionState.Stranger:
conn.State = ConnectionState.Friend
break
case ConnectionState.GroupFellow:
conn.State = ConnectionState.Stranger
break
default:
http.Error(response, "cannot elevate further", http.StatusBadRequest)
return
}
err = DbConnectionUpdateState(ctx, conn)
if err != nil {
http.Error(response, "internal server error", http.StatusInternalServerError)
return
}
response.Write([]byte("elevated"))
var user2 *User
if conn.RequestorId == user.Id {
user2, err = GetUserById(ctx, conn.RecipientId)
} else {
user2, err = GetUserById(ctx, conn.RequestorId)
}
if err != nil {
http.Error(response, "internal server error", http.StatusInternalServerError)
return
}
WsSendMessageCloseIfTimeout(user2, WsEventMessage{
Type: WsEventType.ConnectionElevated,
Event: ConnectionElevationData{
Id: connectionId,
NewState: conn.State,
},
})
return
}
conn.UserWantingToElevate = user.Id
response.Write([]byte("waiting for second user to elevate"))
}
func HttpHandleUserGetConnections(response http.ResponseWriter, request *http.Request) {