package server import ( "common/log" "common/proto/gen/common" "common/proto/gen/cs" "common/proto/gen/grpc_pb" "gateway/handler/ws_handler" "sync" ) func (s *Server) ToClient(server grpc_pb.Gateway_ToClientServer) error { wg := &sync.WaitGroup{} wg.Add(1) go func() { defer wg.Done() defer func() { if err := recover(); err != nil { log.Errorf("Action panic: %v", err) } }() for { if args, err := server.Recv(); err != nil { return } else { if args.UID == -1 { for _, client := range ws_handler.UserMgr.GetAll() { client.WriteBytes(cs.MessageID(args.MessageID), args.Payload) } } else { if client := ws_handler.UserMgr.GetByUID(int(args.UID)); client != nil { client.WriteBytes(cs.MessageID(args.MessageID), args.Payload) } } } } }() wg.Wait() return server.SendAndClose(&common.Empty{}) }