From d3618c4e9ceab273a52813c1f2c462912fb81e59 Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期二, 30 四月 2019 15:40:14 +0800
Subject: [PATCH] add ipc run as server or not

---
 decoder/main.go |   88 ++++++++++++++++++++++++++++++-------------
 1 files changed, 61 insertions(+), 27 deletions(-)

diff --git a/decoder/main.go b/decoder/main.go
index 0c7f65b..c6e75b8 100644
--- a/decoder/main.go
+++ b/decoder/main.go
@@ -1,11 +1,10 @@
 package main
 
 import (
-	"bytes"
 	"context"
 	"decoder/demo"
 	"decoder/valib/ipc"
-	"encoding/gob"
+	"encoding/json"
 	"flag"
 	"fmt"
 	// "videoServer/demo"
@@ -26,46 +25,81 @@
 	flag.StringVar(&ipcURL, "ipc", "ipc:///tmp/pic.ipc", "ipc label")
 }
 
-func test() {
-	fmt.Println("start test")
-
-	fmt.Println(picFolder)
-
-	demo.SendByIPC(streamURL, "camera1", ipcURL)
+// CameraInfo camera info
+type CameraInfo struct {
+	ID  string `json:"Cameraid"`
+	URL string `json:"Rtsp"`
 }
 
-type cameraInfo struct {
-	cameraID string
-	videoURL string
+// MsgIPC msg for ipc
+type MsgIPC struct {
+	CMD  string `json:"Command"`
+	Port int    `jsong:"PortIpc"`
 }
 
-func recvFromIPC(ctx context.Context, url string) (cameraID, rtspURL string) {
+var (
+	mapCI = make(map[string]CameraInfo)
+	port  = 7001
+)
+
+func recvFromIPC(ctx context.Context, url string, ch chan<- CameraInfo) {
 	ipc := ipc.NewClient(ctx, url)
 
 	for {
 		msg := ipc.Recv()
-
-		var buf bytes.Buffer
-		buf.Write(msg)
-
-		dec := gob.NewDecoder(&buf)
-
-		var i cameraInfo
-		if err := dec.Decode(&i); err != nil {
-			fmt.Println("gob decode CameraImage error", err)
-			continue
+		if msg != nil {
+			fmt.Println(string(msg))
+			var c CameraInfo
+			if err := json.Unmarshal(msg, &c); err == nil {
+				ch <- c
+				fmt.Printf("recv camere info %+v\n", c)
+			} else {
+				fmt.Println(err)
+			}
+			msgIpc := MsgIPC{"new decoder", port}
+			if b, err := json.Marshal(msgIpc); err == nil {
+				ipc.Send(b)
+			}
 		}
-		return i.cameraID, i.videoURL
 	}
 }
 
 func main() {
 	flag.Parse()
 
-	ctx, cancel := context.WithCancel(context.Background())
-	recvFromIPC(ctx, "tcp://192.168.1.156:7000")
+	test()
 
-	cancel()
-	// test()
+	// ctx, cancel := context.WithCancel(context.Background())
 
+	// ch := make(chan CameraInfo)
+	// go recvFromIPC(ctx, "tcp://192.168.1.124:7000", ch)
+
+	// for {
+	// 	select {
+	// 	case <-ctx.Done():
+	// 		return
+	// 	case c := <-ch:
+	// 		if _, ok := mapCI[c.ID]; !ok {
+	// 			mapCI[c.ID] = c
+	// 			ipc := "tcp://192.168.1.124:" + strconv.Itoa(port)
+	// 			port++
+	// 			fmt.Printf("create ipc %s for decode : %s, on camera id %s\n", ipc, c.URL, c.ID)
+
+	// 			url := strings.TrimSpace(c.URL)
+	// 			id := strings.TrimSpace(c.ID)
+	// 			i := strings.TrimSpace(ipc)
+	// 			go demo.SendByIPC(url, id, i)
+	// 		}
+	// 	}
+	// }
+	// cancel()
+
+}
+
+func test() {
+	fmt.Println("start test")
+
+	fmt.Println(picFolder)
+
+	demo.SendByIPC(streamURL, "camera1", ipcURL, true)
 }

--
Gitblit v1.8.0