fix: when searching player by id, create new player if client name does not match the one found
This commit is contained in:
+5
-2
@@ -30,11 +30,14 @@ func (p *players) Register(ctx context.Context, id, client, typ, ip string) (*mo
|
|||||||
userName := ctx.Value("username").(string)
|
userName := ctx.Value("username").(string)
|
||||||
if id != "" {
|
if id != "" {
|
||||||
plr, err = p.ds.Player(ctx).Get(id)
|
plr, err = p.ds.Player(ctx).Get(id)
|
||||||
|
if err == nil && plr.Client != client {
|
||||||
|
id = ""
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if err != nil || id == "" {
|
if err != nil || id == "" {
|
||||||
plr, err = p.ds.Player(ctx).FindByName(client, userName)
|
plr, err = p.ds.Player(ctx).FindByName(client, userName)
|
||||||
if err == nil {
|
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 {
|
} else {
|
||||||
r, _ := uuid.NewRandom()
|
r, _ := uuid.NewRandom()
|
||||||
plr = &model.Player{
|
plr = &model.Player{
|
||||||
@@ -43,7 +46,7 @@ func (p *players) Register(ctx context.Context, id, client, typ, ip string) (*mo
|
|||||||
UserName: userName,
|
UserName: userName,
|
||||||
Client: client,
|
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()
|
plr.LastSeen = time.Now()
|
||||||
|
|||||||
+14
-2
@@ -47,8 +47,20 @@ var _ = Describe("Players", func() {
|
|||||||
Expect(trc).To(BeNil())
|
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() {
|
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)
|
repo.add(plr)
|
||||||
p, trc, err := players.Register(ctx, "123", "client", "chrome", "1.2.3.4")
|
p, trc, err := players.Register(ctx, "123", "client", "chrome", "1.2.3.4")
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
@@ -79,7 +91,7 @@ var _ = Describe("Players", func() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
It("finds player by ID and return its transcoding", 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)
|
repo.add(plr)
|
||||||
p, trc, err := players.Register(ctx, "123", "client", "chrome", "1.2.3.4")
|
p, trc, err := players.Register(ctx, "123", "client", "chrome", "1.2.3.4")
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|||||||
Reference in New Issue
Block a user