zhangmeng
2020-08-06 f87b7233a94131a5fd1b3dfb1595226e2779fffa
library.go
@@ -325,6 +325,47 @@
   return &ret
}
// RequestWithTimeout req sync
func (h *Handle) RequestWithTimeout(key int, info *MsgInfo, timeout int) *MsgInfo {
   h.mtxWorker.Lock()
   defer h.mtxWorker.Unlock()
   msg, err := proto.Marshal(info)
   if err != nil {
      return nil
   }
   until := (float32)(timeout)
   one := (float32)(timeoutSec) + ((float32)(timeoutUsec) / 1000000)
   fc := until / one
   count := (int)(fc)
   try := 0
   // 同步接口,需要等待返回值
   var ret MsgInfo
loop:
   for {
      select {
      case <-h.ctx.Done():
         return nil
      default:
         if data, err := h.sockWorker.sock.SendAndRecvTimeout(msg, key, timeoutSec, timeoutUsec); err == nil {
            if err := proto.Unmarshal(data, &ret); err == nil {
               break loop
            } else {
               try++
               if try > count {
                  return nil
               }
            }
         }
      }
   }
   return &ret
}
// Reply request
func (h *Handle) Reply(key int, info *MsgInfo) error {
   msg, err := proto.Marshal(info)