package service
|
|
import (
|
"analysis/valib/ipc"
|
"bytes"
|
"context"
|
"encoding/gob"
|
"fmt"
|
)
|
|
// Reciever recv from ipc
|
type Reciever struct {
|
ctx context.Context
|
ipcURL string
|
chImage chan<- ImageInfo
|
}
|
|
func unserilizeImageInfo(data <-chan []byte, img chan<- ImageInfo) {
|
for {
|
d := <-data
|
|
var buf bytes.Buffer
|
buf.Write(d)
|
|
dec := gob.NewDecoder(&buf)
|
|
var i ImageInfo
|
if err := dec.Decode(&i); err != nil {
|
fmt.Println("gob decode CameraImage error", err)
|
continue
|
}
|
img <- i
|
}
|
}
|
|
// NewReciever new recv
|
func NewReciever(ctx context.Context, url string, ch chan<- ImageInfo) *Reciever {
|
|
return &Reciever{
|
ctx: ctx,
|
ipcURL: url,
|
chImage: ch,
|
}
|
}
|
|
func (r *Reciever) run(i *ipc.IPC) {
|
dataChan := make(chan []byte)
|
go unserilizeImageInfo(dataChan, r.chImage)
|
|
i.RecvToChannel(dataChan)
|
}
|
|
// RunAsServer run a IPC server
|
func (r *Reciever) RunAsServer() {
|
r.run(ipc.NewServer(r.ctx, r.ipcURL))
|
|
}
|
|
// RunAsClient run as a IPC client
|
func (r *Reciever) RunAsClient() {
|
r.run(ipc.NewClient(r.ctx, r.ipcURL))
|
}
|