zhangmeng
2019-09-27 2d390df9ede39c9d7c34bd8190b9329cfc371325
shm.go
@@ -14,7 +14,7 @@
   rw  *shm.ReadWriteCloser
   typ td
   recvData []byte
   // recvData []byte
}
// Send impl interface Diliver
@@ -38,17 +38,53 @@
      return nil, errors.New("please open shm consumer first")
   }
   if s.recvData == nil {
      s.recvData = make([]byte, maxRecvSize)
   }
   n, err := s.rw.Read(s.recvData)
   // orig
   // data := make([]byte, maxRecvSize)
   // n, err := s.rw.Read(data)
   // if err == nil || err == io.EOF {
   //    data := data[:n:n]
   //    return data, nil
   // }
   // cur
   data, err := s.rw.DirectRead()
   if err == nil || err == io.EOF {
      data := make([]byte, n)
      copy(data, s.recvData)
      return data, nil
   }
   // new
   // if s.recvData == nil {
   //    s.recvData = make([]byte, maxRecvSize)
   // }
   // sliceHeader := (*reflect.SliceHeader)(unsafe.Pointer(&s.recvData))
   // // sliceHeader.Cap = maxRecvSize
   // sliceHeader.Len = maxRecvSize
   // n, err := s.rw.Read(s.recvData)
   // if err == nil || err == io.EOF {
   //    sliceHeader.Len = n
   //    return s.recvData, nil
   // }
   return nil, err
}
// Recv2 impl interface
func (s *SHM) Recv2(data []byte) (int, error) {
   if s == nil || s.rw == nil {
      return 0, errors.New("please open shm consumer first")
   }
   n, err := s.rw.Read(data)
   if err == nil || err == io.EOF {
      data = data[:n:n]
      return n, nil
   }
   return 0, err
}
// Close impl interface Deliver
@@ -93,9 +129,8 @@
   if err == nil {
      fmt.Println(rw.Name())
      return &SHM{
         rw:       rw,
         typ:      agent,
         recvData: nil,
         rw:  rw,
         typ: agent,
      }, nil
   }
@@ -110,9 +145,8 @@
   rw, err := shm.OpenSimplex(url)
   if err == nil {
      return &SHM{
         rw:       rw,
         typ:      coactee,
         recvData: nil,
         rw:  rw,
         typ: coactee,
      }, nil
   }
   return nil, err