From 19445d14e73f4bb96e218a65e126ae526f89537d Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期三, 08 五月 2019 14:14:59 +0800
Subject: [PATCH] context使用

---
 decoder/main.go                   |   18 +++++++++---------
 decoder/work/service/ipcsender.go |   19 ++++++-------------
 decoder/work/service/common.go    |   10 ----------
 3 files changed, 15 insertions(+), 32 deletions(-)

diff --git a/decoder/main.go b/decoder/main.go
index 3f5f252..eb39bae 100644
--- a/decoder/main.go
+++ b/decoder/main.go
@@ -84,11 +84,11 @@
 
 	goffmpeg.InitFFmpeg()
 
-	if testIt {
-		test()
-	}
-
 	ctx, cancel := context.WithCancel(context.Background())
+
+	if testIt {
+		test(ctx)
+	}
 
 	ch := make(chan CameraInfo)
 
@@ -119,7 +119,7 @@
 				url := strings.TrimSpace(c.URL)
 				id := strings.TrimSpace(c.ID)
 				addr := strings.TrimSpace(ipcAddr)
-				go runSender(id, url, addr)
+				go runSender(ctx, id, url, addr)
 			}
 		}
 	}
@@ -128,18 +128,18 @@
 	cancel()
 }
 
-func runSender(cameraID, rtspURL, ipcLabel string) {
-	d := srv.NewSender(cameraID, rtspURL, ipcLabel)
+func runSender(ctx context.Context, cameraID, rtspURL, ipcLabel string) {
+	d := srv.NewSender(ctx, cameraID, rtspURL, ipcLabel)
 	if asServer {
 		d.RunAsServer()
 	}
 	d.RunAsClient()
 }
 
-func test() {
+func test(ctx context.Context) {
 	fmt.Println("start test")
 
 	fmt.Println(picFolder)
 
-	runSender("cameraid", streamURL, ipcURL)
+	runSender(ctx, "cameraid", streamURL, ipcURL)
 }
diff --git a/decoder/work/service/common.go b/decoder/work/service/common.go
index cd5bcf2..a6bff1c 100644
--- a/decoder/work/service/common.go
+++ b/decoder/work/service/common.go
@@ -1,9 +1,5 @@
 package service
 
-import (
-	"context"
-)
-
 // ImageInfo deocded image data
 type ImageInfo struct {
 	Data   []byte
@@ -11,10 +7,4 @@
 	Height int
 
 	// CameraID string
-}
-
-// ContextIPC server context
-type ContextIPC struct {
-	ctx    context.Context
-	cancel context.CancelFunc
 }
diff --git a/decoder/work/service/ipcsender.go b/decoder/work/service/ipcsender.go
index d65b892..a582c28 100644
--- a/decoder/work/service/ipcsender.go
+++ b/decoder/work/service/ipcsender.go
@@ -12,7 +12,7 @@
 
 // Sender decoder ingo
 type Sender struct {
-	ctxIPC *ContextIPC
+	ctx context.Context
 
 	cameraID  string
 	streamURL string
@@ -22,13 +22,12 @@
 }
 
 // NewSender Sender
-func NewSender(cameraID, streamURL, ipcURL string) *Sender {
-	ctx, cancel := context.WithCancel(context.Background())
+func NewSender(ctx context.Context, cameraID, streamURL, ipcURL string) *Sender {
 
 	fmt.Printf("create ipc %s for decode : %s, on camera id %s\n", ipcURL, streamURL, cameraID)
 
 	return &Sender{
-		ctxIPC: &ContextIPC{ctx, cancel},
+		ctx: ctx,
 
 		cameraID:  cameraID,
 		streamURL: streamURL,
@@ -39,7 +38,7 @@
 func (s *Sender) serializeImageInfo(img <-chan ImageInfo, data chan<- []byte) {
 	for {
 		select {
-		case <-s.ctxIPC.ctx.Done():
+		case <-s.ctx.Done():
 			fmt.Println("stop Sender")
 			return
 		case i := <-img:
@@ -92,7 +91,7 @@
 
 // RunAsServer run a IPC server
 func (s *Sender) RunAsServer() {
-	i := ipc.NewServer(s.ctxIPC.ctx, s.ipcURL)
+	i := ipc.NewServer(s.ctx, s.ipcURL)
 	fmt.Println("ipc :", s.ipcURL, " cameraid:", s.cameraID)
 	s.run(i)
 
@@ -100,13 +99,7 @@
 
 // RunAsClient run as a IPC client
 func (s *Sender) RunAsClient() {
-	i := ipc.NewClient(s.ctxIPC.ctx, s.ipcURL)
+	i := ipc.NewClient(s.ctx, s.ipcURL)
 	fmt.Println("ipc :", s.ipcURL, " cameraid:", s.cameraID)
 	s.run(i)
-}
-
-// Stop stop run decoder, must run in goroutine
-func (s *Sender) Stop() {
-	s.ffmpeg.Free()
-	s.ctxIPC.cancel()
 }

--
Gitblit v1.8.0