From b3a335f79fd9a6ad91705e2ea293115681484d69 Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期五, 31 五月 2019 17:36:27 +0800
Subject: [PATCH] add mode
---
shm.go | 56 ++++++++++++++++++++++++++------------------------------
1 files changed, 26 insertions(+), 30 deletions(-)
diff --git a/shm.go b/shm.go
index 21f8167..fcdc76b 100644
--- a/shm.go
+++ b/shm.go
@@ -10,14 +10,13 @@
// SHM share memory
type SHM struct {
- rw *shm.ReadWriteCloser
- typ td
- data []byte
+ rw *shm.ReadWriteCloser
+ typ td
}
// Send impl interface Diliver
func (s *SHM) Send(data []byte) error {
- if s.rw == nil {
+ if s == nil || s.rw == nil {
return errors.New("please init shm producer first")
}
@@ -32,14 +31,15 @@
// Recv impl interface Diliver
func (s *SHM) Recv() ([]byte, error) {
- if s.rw == nil {
+ if s == nil || s.rw == nil {
return nil, errors.New("please open shm consumer first")
}
- n, err := s.rw.Read(s.data)
+ data := make([]byte, maxRecvSize)
+ n, err := s.rw.Read(data)
if err == nil || err == io.EOF {
- s.data = s.data[:n:n]
- return s.data, nil
+ data = data[:n:n]
+ return data, nil
}
return nil, err
@@ -47,6 +47,9 @@
// Close impl interface Deliver
func (s *SHM) Close() {
+ if s == nil {
+ return
+ }
if s.rw != nil {
s.rw.Close()
}
@@ -55,10 +58,9 @@
}
}
-func shmServer(m Mode, url string, args ...interface{}) *SHM {
+func shmServer(m Mode, url string, args ...interface{}) (*SHM, error) {
if m != Shm {
- fmt.Println("this is not a shm mode: ", m)
- return nil
+ return nil, errors.New("please use deliver.Shm mode")
}
var param []int
@@ -68,43 +70,37 @@
case int:
param = append(param, v.(int))
default:
- fmt.Println("shmProducer recv error parameters")
- return nil
+ return nil, errors.New("shmServer created recv error parameters")
}
}
if len(param) != 2 {
- fmt.Println("shmProducer recv too much parameter: ", len(param))
- return nil
+ return nil, errors.New("shmServer created recv too much parameters")
}
- shm.Unlink(url)
- if rw, err := shm.CreateSimplex(url, 0644, param[0], param[1]); err == nil {
+
+ rw, err := shm.CreateSimplex(url, 0644, param[0], param[1])
+ if err == nil {
fmt.Println(rw.Name())
return &SHM{
rw,
agent,
- nil,
- }
+ }, nil
}
- fmt.Println("create simple shm error")
- return nil
+ return nil, err
}
-func shmClient(m Mode, url string, args ...interface{}) *SHM {
-
+func shmClient(m Mode, url string, args ...interface{}) (*SHM, error) {
if m != Shm {
- fmt.Println("this is not a shm mode: ", m)
- return nil
+ return nil, errors.New("please use deliver.Shm mode")
}
- if rw, err := shm.OpenSimplex(url); err == nil {
+ rw, err := shm.OpenSimplex(url)
+ if err == nil {
return &SHM{
rw,
coactee,
- make([]byte, maxRecvSize),
- }
+ }, nil
}
- fmt.Println("shmConsumer open error")
- return nil
+ return nil, err
}
--
Gitblit v1.8.0