package worldmanager import ( "context" "errors" "log" "math/rand" gamelangpb "git.alfi.li/gamelang/protobuf/gamelang" ) type WorldServer struct { gamelangpb.UnimplementedWorldServiceServer worldmanager *WorldManager } func NewWorldServer(wm *WorldManager) *WorldServer { return &WorldServer{worldmanager: wm} } func (us WorldServer) CreateWorld(ctx context.Context, world *gamelangpb.World) (*gamelangpb.World, error) { id := rand.Uint32() world.Id = id _, err := us.worldmanager.Create(*world) if err != nil { return &gamelangpb.World{}, err } return world, nil } func (us WorldServer) DeleteWorld(ctx context.Context, world *gamelangpb.World) (*gamelangpb.World, error) { us.worldmanager.Remove(world.GetName()) return world, nil } func (us WorldServer) GetWorld(ctx context.Context, searchworld *gamelangpb.World) (*gamelangpb.World, error) { log.Printf("new get request:\n%+v", searchworld) worlds := us.worldmanager.List() for _, world := range worlds { if world.GetName() == searchworld.GetName() { log.Println("sending world\n", world) return &world, nil } } return &gamelangpb.World{}, errors.New("World not found") } func (us WorldServer) ListWorld(world *gamelangpb.World, stream gamelangpb.WorldService_ListWorldServer) error { worlds := us.worldmanager.List() for _, world := range worlds { stream.Send(&world) } return nil } func (us WorldServer) JoinWorld(ctx context.Context, world *gamelangpb.World) (*gamelangpb.World, error) { log.Printf("new join request:\n%+v", world) user := world.Users[0] us.worldmanager.Join(world.Name, user) return world, nil } func (us WorldServer) AddGameWorld(ctx context.Context, world *gamelangpb.World) (*gamelangpb.World, error) { log.Printf("new Game add request:\n%+v", world) game := world.Games[0] us.worldmanager.AddGame(world.Name, game) return world, nil }