zhangmeng
2019-08-26 0ac4c151e08a9735d085c08ca5bcd9b50944d650
shm.go
@@ -4,14 +4,17 @@
   "errors"
   "fmt"
   "io"
   "time"
   "github.com/tmthrgd/shm-go"
   "basic.com/valib/shm.git"
)
// SHM share memory
type SHM struct {
   rw  *shm.ReadWriteCloser
   typ td
   recvData []byte
}
// Send impl interface Diliver
@@ -35,10 +38,13 @@
      return nil, errors.New("please open shm consumer first")
   }
   data := make([]byte, maxRecvSize)
   n, err := s.rw.Read(data)
   if s.recvData == nil {
      s.recvData = make([]byte, maxRecvSize)
   }
   n, err := s.rw.Read(s.recvData)
   if err == nil || err == io.EOF {
      data = data[:n:n]
      data := make([]byte, n)
      copy(data, s.recvData)
      return data, nil
   }
@@ -80,14 +86,16 @@
      // return nil, errors.New("shmServer created recv too much parameters")
   }
   time.Sleep(time.Millisecond)
   shm.Unlink(url)
   rw, err := shm.CreateSimplex(url, 0644, blocks, size)
   if err == nil {
      fmt.Println(rw.Name())
      return &SHM{
         rw,
         agent,
         rw:       rw,
         typ:      agent,
         recvData: nil,
      }, nil
   }
@@ -102,8 +110,9 @@
   rw, err := shm.OpenSimplex(url)
   if err == nil {
      return &SHM{
         rw,
         coactee,
         rw:       rw,
         typ:      coactee,
         recvData: nil,
      }, nil
   }
   return nil, err