grpc.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package bingomanager
  2. import (
  3. "context"
  4. "errors"
  5. "math/rand"
  6. gamelangBingopb "git.alfi.li/gamelang/protobuf/gamelang-bingo"
  7. "github.com/getlantern/deepcopy"
  8. )
  9. type BingoServer struct {
  10. gamelangBingopb.UnimplementedBingoServiceServer
  11. bingomanager *BingoManager
  12. }
  13. func NewBingoServer(wm *BingoManager) *BingoServer {
  14. return &BingoServer{bingomanager: wm}
  15. }
  16. func (us BingoServer) CreateBingo(ctx context.Context, bingo *gamelangBingopb.Bingo) (*gamelangBingopb.Bingo, error) {
  17. id := rand.Uint32()
  18. _, err := us.bingomanager.Create(gamelangBingopb.Bingo{Id: id, Name: bingo.GetName(), Textlist: bingo.GetTextlist(), Options: bingo.GetOptions()})
  19. if err != nil {
  20. return &gamelangBingopb.Bingo{}, err
  21. }
  22. return bingo, nil
  23. }
  24. func (us BingoServer) DeleteBingo(ctx context.Context, bingo *gamelangBingopb.Bingo) (*gamelangBingopb.Bingo, error) {
  25. us.bingomanager.Remove(bingo.GetName())
  26. return bingo, nil
  27. }
  28. func (us BingoServer) GetBingo(ctx context.Context, bingo *gamelangBingopb.Bingo) (*gamelangBingopb.Bingo, error) {
  29. bingos := us.bingomanager.List()
  30. for _, bingoB := range bingos {
  31. if bingo.GetName() == bingoB.GetName() {
  32. returnBingo := &gamelangBingopb.Bingo{}
  33. deepcopy.Copy(bingoB, returnBingo)
  34. return returnBingo, nil
  35. }
  36. }
  37. return &gamelangBingopb.Bingo{}, errors.New("Bingo not found")
  38. }
  39. func (us BingoServer) ListBingo(bingo *gamelangBingopb.Bingo, stream gamelangBingopb.BingoService_ListBingoServer) error {
  40. bingos := us.bingomanager.List()
  41. for _, bingo := range bingos {
  42. stream.Send(&bingo)
  43. }
  44. return nil
  45. }