package rpc import ( "gitlink.org.cn/cloudream/common/pkgs/logger" "gitlink.org.cn/cloudream/jcs-pub/client/internal/publock/types" clirpc "gitlink.org.cn/cloudream/jcs-pub/common/pkgs/rpc/client" ) func (s *Service) PubLockChannel(ch clirpc.PubLockMessageChan) { log := logger.WithField("Mod", "RPC") for { msg, cerr := ch.Receive() if cerr != nil { log.Warnf("receive publock message: %v", cerr.ToError()) break } switch msg := msg.(type) { case *types.AcquireMsg: go func() { lkd, err := s.pubLock.Acquire(msg.Request, msg.Option) if err != nil { cerr := ch.Send(&types.AcquireResultMsg{ ContextID: msg.ContextID, Success: false, Error: err.Error(), }) if cerr != nil { log.Warnf("send acquire result message: %v", cerr.ToError()) } return } cerr := ch.Send(&types.AcquireResultMsg{ ContextID: msg.ContextID, Success: true, RequestID: lkd.ReqID, }) if cerr != nil { log.Warnf("send acquire result message: %v", cerr.ToError()) } }() case *types.ReleaseMsg: s.pubLock.Release(msg.RequestID) cerr := ch.Send(&types.ReleaseResultMsg{ ContextID: msg.ContextID, }) if cerr != nil { log.Warnf("send release result message: %v", cerr.ToError()) } } } }