src to pkg, impl lobby.Closed

This commit is contained in:
Bel LaPointe
2025-02-12 16:48:58 -07:00
parent 1f6b79aa3b
commit e35ddef4b7
18 changed files with 117 additions and 21 deletions

View File

@@ -0,0 +1,33 @@
package lobby
import (
"fmt"
"gitea/price-is-wrong/pkg/lib/event"
)
type Event interface{}
type PlayerJoin struct {
ID int
}
type PlayerLeave struct {
ID int
}
type Close struct {
}
func ParseEvent(b []byte) (Event, error) {
typesToPointers := map[string]any{
"*lobby.PlayerJoin": &PlayerJoin{},
"*lobby.PlayerLeave": &PlayerLeave{},
"*lobby.Close": &Close{},
}
t, err := event.Parse(b, typesToPointers)
return typesToPointers[t], err
}
func MarshalEvent(e Event) ([]byte, error) {
return event.Serialize(fmt.Sprintf("%T", e), e)
}

View File

@@ -0,0 +1,37 @@
package lobby_test
import (
"fmt"
lobby "gitea/price-is-wrong/pkg/state/lobby/internal"
"testing"
)
func TestMarshalUnmarshal(t *testing.T) {
cases := map[string]struct {
e lobby.Event
}{
"PlayerJoin": {e: &lobby.PlayerJoin{ID: 1}},
"PlayerLeave": {e: &lobby.PlayerLeave{ID: 1}},
}
for name, d := range cases {
c := d
t.Run(name, func(t *testing.T) {
b, err := lobby.MarshalEvent(c.e)
if err != nil {
t.Fatal(err)
}
t.Logf("marshalled: %s", b)
e, err := lobby.ParseEvent(b)
if err != nil {
t.Fatal(err)
}
t.Logf("unmarshalled: %+v", e)
if fmt.Sprintf("%+v", c.e) != fmt.Sprintf("%+v", e) {
t.Errorf("expected %+v but got %+v", c.e, e)
}
})
}
}