zhangmeng
2019-08-26 fb46ee747046ea8634638fba3384ac20358deb49
update shm
1个文件已修改
71 ■■■■ 已修改文件
shm.go 71 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
shm.go
@@ -3,9 +3,7 @@
import (
    "errors"
    "fmt"
    // "io"
    "time"
    "io"
    "basic.com/valib/shm.git"
)
@@ -14,8 +12,6 @@
type SHM struct {
    rw  *shm.ReadWriteCloser
    typ td
    data []byte
}
// Send impl interface Diliver
@@ -24,26 +20,12 @@
        return errors.New("please init shm producer first")
    }
    ch := make(chan int)
    go func(){
        n, _ := s.rw.Write(data)
        ch <- n
    }()
    select{
    case <-ch:
        return nil
    case <- time.After(3 * time.Second):
        return errors.New("send time out")
    n, err := s.rw.Write(data)
    if n < 1 {
        fmt.Println("recv data less than 1 length")
    }
    return errors.New("send should't here")
    // n, err := s.rw.Write(data)
    // if n < 1 {
    //     fmt.Println("recv data less than 1 length")
    // }
    // return err
    return err
}
// Recv impl interface Diliver
@@ -53,33 +35,14 @@
        return nil, errors.New("please open shm consumer first")
    }
    ch := make(chan int)
    go func(){
        n, _ := s.rw.Read(s.data)
        ch <- n
    }()
    select{
    case d := <-ch:
        if d > 0{
            data := make([]byte, d)
            copy(data, s.data)
            return data, nil
        }
    case <- time.After(3 * time.Second):
        return nil, errors.New("recv time out")
    data := make([]byte, maxRecvSize)
    n, err := s.rw.Read(data)
    if err == nil || err == io.EOF {
        data = data[:n:n]
        return data, nil
    }
    return nil, errors.New("recv should't here")
    // data := make([]byte, maxRecvSize)
    // n, err := s.rw.Read(data)
    // if err == nil || err == io.EOF {
    //     data = data[:n:n]
    //     return data, nil
    // }
    // return nil, err
    return nil, err
}
// Close impl interface Deliver
@@ -110,21 +73,18 @@
            return nil, errors.New("shmServer created recv error parameters")
        }
    }
    blocks, size := 2, maxRecvSize
    if len(param) == 2 {
        blocks, size = param[0], param[1]
        // return nil, errors.New("shmServer created recv too much parameters")
    if len(param) != 2 {
        return nil, errors.New("shmServer created recv too much parameters")
    }
    shm.Unlink(url)
    rw, err := shm.CreateSimplex(url, 0644, blocks, size)
    rw, err := shm.CreateSimplex(url, 0644, param[0], param[1])
    if err == nil {
        fmt.Println(rw.Name())
        return &SHM{
            rw,
            agent,
            make([]byte, maxRecvSize),
        }, nil
    }
@@ -141,7 +101,6 @@
        return &SHM{
            rw,
            coactee,
            make([]byte, maxRecvSize),
        }, nil
    }
    return nil, err