rework ws responses to user, send events to user via ws
This commit is contained in:
+60
-23
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user