summaryrefslogtreecommitdiff
path: root/internal/server/server.go
diff options
context:
space:
mode:
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
+}