package bingomanager import ( "context" "errors" "math/rand" gamelangBingopb "git.alfi.li/gamelang/protobuf/gamelang-bingo" "github.com/getlantern/deepcopy" ) type BingoServer struct { gamelangBingopb.UnimplementedBingoServiceServer bingomanager *BingoManager } func NewBingoServer(wm *BingoManager) *BingoServer { return &BingoServer{bingomanager: wm} } func (us BingoServer) CreateBingo(ctx context.Context, bingo *gamelangBingopb.Bingo) (*gamelangBingopb.Bingo, error) { id := rand.Uint32() _, err := us.bingomanager.Create(gamelangBingopb.Bingo{Id: id, Name: bingo.GetName(), Textlist: bingo.GetTextlist(), Options: bingo.GetOptions()}) if err != nil { return &gamelangBingopb.Bingo{}, err } return bingo, nil } func (us BingoServer) DeleteBingo(ctx context.Context, bingo *gamelangBingopb.Bingo) (*gamelangBingopb.Bingo, error) { us.bingomanager.Remove(bingo.GetName()) return bingo, nil } func (us BingoServer) GetBingo(ctx context.Context, bingo *gamelangBingopb.Bingo) (*gamelangBingopb.Bingo, error) { bingos := us.bingomanager.List() for _, bingoB := range bingos { if bingo.GetName() == bingoB.GetName() { returnBingo := &gamelangBingopb.Bingo{} deepcopy.Copy(bingoB, returnBingo) return returnBingo, nil } } return &gamelangBingopb.Bingo{}, errors.New("Bingo not found") } func (us BingoServer) ListBingo(bingo *gamelangBingopb.Bingo, stream gamelangBingopb.BingoService_ListBingoServer) error { bingos := us.bingomanager.List() for _, bingo := range bingos { stream.Send(&bingo) } return nil }