From ced87be57b4f565969357f5c6734ee8561a54528 Mon Sep 17 00:00:00 2001 From: Deluan Date: Tue, 17 Mar 2020 19:09:49 -0400 Subject: [PATCH] fix: when searching player by id, create new player if client name does not match the one found --- engine/players.go | 7 +++++-- engine/players_test.go | 16 ++++++++++++++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/engine/players.go b/engine/players.go index 11d3f7083..9e5bacb79 100644 --- a/engine/players.go +++ b/engine/players.go @@ -30,11 +30,14 @@ func (p *players) Register(ctx context.Context, id, client, typ, ip string) (*mo userName := ctx.Value("username").(string) if id != "" { plr, err = p.ds.Player(ctx).Get(id) + if err == nil && plr.Client != client { + id = "" + } } if err != nil || id == "" { plr, err = p.ds.Player(ctx).FindByName(client, userName) if err == nil { - log.Trace("Found player by name", "id", plr.ID, "client", client, "userName", userName) + log.Debug("Found player by name", "id", plr.ID, "client", client, "userName", userName) } else { r, _ := uuid.NewRandom() plr = &model.Player{ @@ -43,7 +46,7 @@ func (p *players) Register(ctx context.Context, id, client, typ, ip string) (*mo UserName: userName, Client: client, } - log.Trace("Create new player", "id", plr.ID, "client", client, "userName", userName) + log.Info("Registering new player", "id", plr.ID, "client", client, "userName", userName) } } plr.LastSeen = time.Now() diff --git a/engine/players_test.go b/engine/players_test.go index 2a21b2f82..ec2b58677 100644 --- a/engine/players_test.go +++ b/engine/players_test.go @@ -47,8 +47,20 @@ var _ = Describe("Players", func() { Expect(trc).To(BeNil()) }) + It("creates a new player if client does not match the one in DB", func() { + plr := &model.Player{ID: "123", Name: "A Player", Client: "client1111", LastSeen: time.Time{}} + repo.add(plr) + p, trc, err := players.Register(ctx, "123", "client2222", "chrome", "1.2.3.4") + Expect(err).ToNot(HaveOccurred()) + Expect(p.ID).ToNot(BeEmpty()) + Expect(p.ID).ToNot(Equal("123")) + Expect(p.LastSeen).To(BeTemporally(">=", beforeRegister)) + Expect(p.Client).To(Equal("client2222")) + Expect(trc).To(BeNil()) + }) + It("finds players by ID", func() { - plr := &model.Player{ID: "123", Name: "A Player", LastSeen: time.Time{}} + plr := &model.Player{ID: "123", Name: "A Player", Client: "client", LastSeen: time.Time{}} repo.add(plr) p, trc, err := players.Register(ctx, "123", "client", "chrome", "1.2.3.4") Expect(err).ToNot(HaveOccurred()) @@ -79,7 +91,7 @@ var _ = Describe("Players", func() { }) It("finds player by ID and return its transcoding", func() { - plr := &model.Player{ID: "123", Name: "A Player", LastSeen: time.Time{}, TranscodingId: "1"} + plr := &model.Player{ID: "123", Name: "A Player", Client: "client", LastSeen: time.Time{}, TranscodingId: "1"} repo.add(plr) p, trc, err := players.Register(ctx, "123", "client", "chrome", "1.2.3.4") Expect(err).ToNot(HaveOccurred())