zhangmeng
2019-08-29 a735e666cff14e4e485110d2a59d401b4be61b9b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package util
 
import (
    "context"
    "errors"
    "fmt"
 
    "basic.com/valib/deliver.git"
 
    // "github.com/pierrec/lz4"
    "taskpubsub/logger"
)
 
const SHMMaxTryCount = 3
 
type SocketContext struct {
    Sock    deliver.Deliver
    Context context.Context
    Cancel  context.CancelFunc
 
    Mode   int
    URL    string
    UseSHM bool
}
 
//  1. oldstring element is not in new  : abandon(delete)
//  2. new element is not in oldstring  : add(add)
func Difference(oldstring []string, newstring []string) map[string]string {
    var diff = make(map[string]string)
 
    // Loop two times, first to find oldstring strings not in newstring,
    // second loop to find newstring strings not in oldstring
    for i := 0; i < 2; i++ {
        for _, s1 := range oldstring {
            found := false
            for _, s2 := range newstring {
                if s1 == s2 {
                    found = true
                    break
                }
            }
            // String not found. We add it to return slice
            if !found && i == 0 {
                diff[s1] = "delete"
            }
            if !found && i != 0 {
                diff[s1] = "add"
            }
        }
        // Swap the slices, only if it was the first loop
        if i == 0 {
            oldstring, newstring = newstring, oldstring
        }
    }
    return diff
}
 
// UnCompress uncompress
func UnCompress(in []byte) ([]byte, error) {
    return in, nil
 
    // out := make([]byte, 3*len(in))
    // n, err := lz4.UncompressBlock(in, out)
    // if err != nil {
    //     logger.Error("uncompress error: ", err)
    //     return nil, err
    // }
    // out = out[:n] // uncompressed data
    // return out, nil
}
 
// Compress compress
func Compress(in []byte) ([]byte, error) {
    return in, nil
 
    // out := make([]byte, len(in))
    // ht := make([]int, 64<<10) // buffer for the compression table
    // n, err := lz4.CompressBlock(in, out, ht)
    // if err != nil {
    //     logger.Error("compress: ", err)
    //     return nil, err
    // }
    // if n >= len(in) {
    //     logger.Error("image is not compressible")
    // }
    // out = out[:n] // compressed data
    // return out, nil
}
 
// create server
func NewSocketListen(mode int, url string, shm bool) (socket SocketContext, err error) {
    logger.Info("url is: ", url)
    ctx, cancel := context.WithCancel(context.Background())
 
    socket.Context = ctx
    socket.Cancel = cancel
 
    socket.Mode = mode
    socket.URL = url
    socket.UseSHM = shm
 
    if shm {
        var err error
        socket.Sock, err = deliver.NewServerWithError(deliver.Mode(mode), url)
        if err != nil {
            fmt.Println("TASK CREATE SERVER SHM ERROR: ", err)
        }
    } else {
        socket.Sock = deliver.NewServer(deliver.Mode(mode), url)
    }
 
    if socket.Sock == nil {
        return socket, errors.New("create listen error")
    }
 
    return socket, nil
}
 
func NewSocketDial(mode int, url string) (socket SocketContext, err error) {
    logger.Info("url is: ", url)
    ctx, cancel := context.WithCancel(context.Background())
 
    socket.Context = ctx
    socket.Cancel = cancel
 
    socket.Sock = deliver.NewClient(deliver.Mode(mode), url)
 
    if socket.Sock == nil {
        return socket, errors.New("create listen error")
    }
 
    return socket, nil
}