diff options
Diffstat (limited to 'internal/server/server.go')
| -rw-r--r-- | internal/server/server.go | 56 |
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 +} |
