package server import ( "common/log" "common/proto/sc/sc_pb" "common/proto/ss/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(sc_pb.MessageID(args.MessageID), args.Payload) } } else { if client := ws_handler.UserMgr.GetByUID(int(args.UID)); client != nil { client.WriteBytes(sc_pb.MessageID(args.MessageID), args.Payload) } } } } }() wg.Wait() return server.SendAndClose(&grpc_pb.ToClientResp{}) }