grpc.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package worldmanager
  2. import (
  3. "context"
  4. "errors"
  5. "log"
  6. "math/rand"
  7. gamelangpb "git.alfi.li/gamelang/protobuf/gamelang"
  8. )
  9. type WorldServer struct {
  10. gamelangpb.UnimplementedWorldServiceServer
  11. worldmanager *WorldManager
  12. }
  13. func NewWorldServer(wm *WorldManager) *WorldServer {
  14. return &WorldServer{worldmanager: wm}
  15. }
  16. func (us WorldServer) CreateWorld(ctx context.Context, world *gamelangpb.World) (*gamelangpb.World, error) {
  17. id := rand.Uint32()
  18. world.Id = id
  19. _, err := us.worldmanager.Create(*world)
  20. if err != nil {
  21. return &gamelangpb.World{}, err
  22. }
  23. return world, nil
  24. }
  25. func (us WorldServer) DeleteWorld(ctx context.Context, world *gamelangpb.World) (*gamelangpb.World, error) {
  26. us.worldmanager.Remove(world.GetName())
  27. return world, nil
  28. }
  29. func (us WorldServer) GetWorld(ctx context.Context, searchworld *gamelangpb.World) (*gamelangpb.World, error) {
  30. log.Printf("new get request:\n%+v", searchworld)
  31. worlds := us.worldmanager.List()
  32. for _, world := range worlds {
  33. if world.GetName() == searchworld.GetName() {
  34. log.Println("sending world\n", world)
  35. return &world, nil
  36. }
  37. }
  38. return &gamelangpb.World{}, errors.New("World not found")
  39. }
  40. func (us WorldServer) ListWorld(world *gamelangpb.World, stream gamelangpb.WorldService_ListWorldServer) error {
  41. worlds := us.worldmanager.List()
  42. for _, world := range worlds {
  43. stream.Send(&world)
  44. }
  45. return nil
  46. }
  47. func (us WorldServer) JoinWorld(ctx context.Context, world *gamelangpb.World) (*gamelangpb.World, error) {
  48. log.Printf("new join request:\n%+v", world)
  49. user := world.Users[0]
  50. us.worldmanager.Join(world.Name, user)
  51. return world, nil
  52. }
  53. func (us WorldServer) AddGameWorld(ctx context.Context, world *gamelangpb.World) (*gamelangpb.World, error) {
  54. log.Printf("new Game add request:\n%+v", world)
  55. game := world.Games[0]
  56. us.worldmanager.AddGame(world.Name, game)
  57. return world, nil
  58. }