package server import ( "context" "git.hlsq.asia/mmorpg/service-common/log" "git.hlsq.asia/mmorpg/service-common/proto/sc/sc_pb" "git.hlsq.asia/mmorpg/service-common/proto/ss/grpc_pb" "git.hlsq.asia/mmorpg/service-gateway/internal/handler/ws_handler/client" "google.golang.org/protobuf/proto" "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.USN == -1 { //utils.WorkerPool(ws_handler.UserMgr.GetAllInterface(), func(task interface{}) { // client := task.(*ws_handler.Client) // client.WriteBytes(sc_pb.MessageID(args.MessageID), args.Payload) //}) data, err := proto.Marshal(&sc_pb.Message{ ID: sc_pb.MessageID(args.MessageID), Payload: args.Payload, }) if err != nil { log.Errorf("ToClient proto.Marshal error: %v", err) continue } for _, cli := range client.UserMgr.GetAll() { cli.WriteBytesPreMarshal(data) } //for _, client := range ws_handler.UserMgr.GetAll() { // client.WriteBytes(sc_pb.MessageID(args.MessageID), args.Payload) //} } else { if cli := client.UserMgr.GetByUSN(args.USN); cli != nil { cli.WriteBytes(sc_pb.MessageID(args.MessageID), args.Payload) } } } } }() wg.Wait() return server.SendAndClose(&grpc_pb.ToClientResp{}) } func (s *Server) KickUser(ctx context.Context, req *grpc_pb.KickUserReq) (*grpc_pb.KickUserResp, error) { return &grpc_pb.KickUserResp{}, nil }