code: func (r *Room) Join(ctx context.Context) (*JoinResponse, error) {
  	s := pitaya.GetSessionFromCtx(ctx)
  	err := pitaya.GroupAddMember(ctx, "room", s.UID())
  	if err != nil {
  		return nil, err
  	}
  	members, err := pitaya.GroupMembers(ctx, "room")
  	if err != nil {
  		return nil, err
  	}
  	s.Push("onMembers", &AllMembers{Members: members})
  	pitaya.GroupBroadcast(ctx, "connector", "room", "onNewUser", &NewUser{Content: fmt.Sprintf("New user: %d", s.ID())})
  	err = s.OnClose(func() {
  		pitaya.GroupRemoveMember(ctx, "room", s.UID())
  	})
  	if err != nil {
  		return nil, err
  	}
  	return &JoinResponse{Result: "success"}, nil
  }
docs: // Join room