package common
|
|
import (
|
"context"
|
"encoding/json"
|
"fmt"
|
"io/ioutil"
|
"strconv"
|
"time"
|
|
"basic.com/pubsub/protomsg.git"
|
"github.com/gogo/protobuf/proto"
|
)
|
|
// GetIpcAddress get ipc
|
func GetIpcAddress(shm bool, id string) string {
|
if shm {
|
return id
|
}
|
return `ipc:///tmp/` + id + `.ipc`
|
}
|
|
// SubConfig sub
|
type SubConfig struct {
|
SoFile string `json:"so_file_path"`
|
Env string `json:"runtime"`
|
Param map[string]string `json:"param"`
|
}
|
|
// SdkConfig sdk
|
type SdkConfig struct {
|
SoFile string `json:"so_file_path"`
|
Env string `json:"runtime"`
|
Param map[string]string `json:"param"`
|
Sub *SubConfig `json:"sub"`
|
}
|
|
// ReadConfig conf
|
func ReadConfig(file string) (SdkConfig, error) {
|
data, err := ioutil.ReadFile(file)
|
if err != nil {
|
return SdkConfig{}, fmt.Errorf("READ SDK CONFIG FILE %s ERROR", file)
|
}
|
|
//读取的数据为json格式,需要进行解码
|
var v SdkConfig
|
err = json.Unmarshal(data, &v)
|
|
return v, err
|
}
|
|
// Atoi atoi
|
func Atoi(s string) int {
|
i, _ := strconv.Atoi(s)
|
return i
|
}
|
|
// UnserilizeProto un
|
func UnserilizeProto(ctx context.Context, data <-chan []byte, out chan<- protomsg.SdkMessage, fn func(...interface{})) {
|
for {
|
select {
|
case <-ctx.Done():
|
return
|
case d := <-data:
|
if len(d) < 100 {
|
continue
|
}
|
msg := protomsg.SdkMessage{}
|
if err := proto.Unmarshal(d, &msg); err != nil {
|
fn("UnserilizeProto Unmarshal msg 处理异常:", err)
|
continue
|
}
|
|
out <- msg
|
|
default:
|
time.Sleep(10 * time.Millisecond)
|
}
|
}
|
}
|
|
// UnpackImage unpack
|
func UnpackImage(msg protomsg.SdkMessage, fnName string, fn func(...interface{})) *protomsg.Image {
|
// 反序列化数据得到sdk入参
|
i := &protomsg.Image{}
|
err := proto.Unmarshal(msg.Data, i)
|
if err != nil {
|
fn(fnName, " protobuf Unmarshal decode CameraImage error: ", err.Error())
|
return nil
|
}
|
if i.Data == nil {
|
fn(fnName, " protomsg.Image data null")
|
return nil
|
}
|
return i
|
}
|