summaryrefslogtreecommitdiff
path: root/internal/server/server.go
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2025-02-04 18:52:57 +0200
committerKyren223 <Kyren223@proton.me>2025-02-04 18:52:57 +0200
commiteab8cba4bb37491d5c3b497b98faa7029e7b7300 (patch)
tree15f9994c423d18f0492f97c43bf71a0793e1e6a4 /internal/server/server.go
parent42a1ee12c1e64955e6ddd38c34b122c7c10a93f2 (diff)
Refactored the way notifications work on the server-side, next commit
fixes the client to use this new system
Diffstat (limited to 'internal/server/server.go')
-rw-r--r--internal/server/server.go56
1 files changed, 35 insertions, 21 deletions
diff --git a/internal/server/server.go b/internal/server/server.go
index 5055539..e83fcb4 100644
--- a/internal/server/server.go
+++ b/internal/server/server.go
@@ -240,27 +240,9 @@ func (server *server) handleConnection(conn net.Conn) {
}
}()
- // Send initial packets
- payload := api.GetUserData(ctx, sess, &packet.GetUserData{})
- if payload == &api.ErrInternalError {
+ if ok := server.sendInitialPackets(ctx, sess); !ok {
return // closes the connection
}
- pkt := packet.NewPacket(packet.NewMsgPackEncoder(payload))
- sess.Write(ctx, pkt)
-
- payload = api.GetUserTrusteds(ctx, sess)
- if payload == &api.ErrInternalError {
- return // closes the connection
- }
- pkt = packet.NewPacket(packet.NewMsgPackEncoder(payload))
- sess.Write(ctx, pkt)
-
- payload, err = api.GetNetworksInfo(ctx, sess)
- if err != nil {
- return // closes the connection
- }
- pkt = packet.NewPacket(packet.NewMsgPackEncoder(payload))
- sess.Write(ctx, pkt)
// Infinite read loop
buffer := make([]byte, 512)
@@ -386,8 +368,8 @@ func processRequest(ctx context.Context, sess *session.Session, request packet.P
case *packet.TrustUser:
response = timeout(10*time.Millisecond, api.TrustUser, ctx, sess, request)
- case *packet.GetNotifications:
- response = timeout(100*time.Millisecond, api.GetNotifications, ctx, sess, request)
+ case *packet.SetLastReadMessages:
+ response = timeout(100*time.Millisecond, api.SetLastReadMessages, ctx, sess, request)
default:
response = &packet.Error{Error: "use of disallowed packet type for request"}
@@ -422,3 +404,35 @@ func timeout[T packet.Payload](
return &packet.Error{Error: "request timeout"}
}
}
+
+func (server *server) sendInitialPackets(ctx context.Context, sess *session.Session) bool {
+ payload := api.GetUserData(ctx, sess, &packet.GetUserData{})
+ if payload == &api.ErrInternalError {
+ return false
+ }
+ pkt := packet.NewPacket(packet.NewMsgPackEncoder(payload))
+ sess.Write(ctx, pkt)
+
+ payload = api.GetUserTrusteds(ctx, sess)
+ if payload == &api.ErrInternalError {
+ return false
+ }
+ pkt = packet.NewPacket(packet.NewMsgPackEncoder(payload))
+ sess.Write(ctx, pkt)
+
+ payload, err := api.GetNetworksInfo(ctx, sess)
+ if err != nil {
+ return false
+ }
+ pkt = packet.NewPacket(packet.NewMsgPackEncoder(payload))
+ sess.Write(ctx, pkt)
+
+ payload = api.GetNotifications(ctx, sess)
+ if payload == &api.ErrInternalError {
+ return false
+ }
+ pkt = packet.NewPacket(packet.NewMsgPackEncoder(payload))
+ sess.Write(ctx, pkt)
+
+ return true
+}