From 26f699593d76d6fa4bcf320c84fd723343c4b5f4 Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期一, 20 五月 2019 15:19:15 +0800
Subject: [PATCH] add one pull multi push

---
 main.go |   92 +++++++++++++++++++++++++++++++---------------
 1 files changed, 62 insertions(+), 30 deletions(-)

diff --git a/main.go b/main.go
index 24b9193..5c5eb53 100644
--- a/main.go
+++ b/main.go
@@ -3,6 +3,7 @@
 import (
 	"context"
 	"demo/deliver"
+	"flag"
 	"fmt"
 	"os"
 )
@@ -10,6 +11,58 @@
 const dLen = 12 * 1024 * 1024
 
 var ctx, cancel = context.WithCancel(context.Background())
+
+func senderMode(ipc string, m deliver.Mode, count int, one bool) {
+	if m == deliver.ReqRep {
+		req(ipc, m)
+	} else if m == deliver.Shm {
+		shmSender(ipc, 2, 32*1024*1024)
+	}
+
+	if one {
+		oneSender(ipc, m)
+	} else {
+		nSender(ipc, m, count)
+	}
+}
+
+func recvMode(ipc string, m deliver.Mode, count int, n bool) {
+	if m == deliver.ReqRep {
+		rep(ipc, m)
+	} else if m == deliver.Shm {
+		shmReciever(ipc, count)
+	}
+
+	if n {
+		nReciever(ipc, m, count)
+	} else {
+		oneReciever(ipc, m)
+	}
+}
+
+var (
+	proc         string
+	procCount    int
+	mode         string
+	ipc          string
+	oneSendnRecv bool
+)
+
+const (
+	act  = "act"
+	pass = "pass"
+)
+
+func init() {
+	flag.StringVar(&proc, "p", "act", "proc as sender")
+	flag.IntVar(&procCount, "c", 1, "proc run count")
+
+	flag.StringVar(&mode, "m", "pushpull", "proc run mode pushpull or pubsub etc.")
+
+	flag.StringVar(&ipc, "i", "ipc:///tmp/pic.ipc", "ipc label")
+
+	flag.BoolVar(&oneSendnRecv, "n", true, "one send n recv")
+}
 
 func modeType(t string) deliver.Mode {
 
@@ -28,39 +81,18 @@
 	return deliver.NONE
 }
 
-func senderMode(ipc string, m deliver.Mode) {
-	if m == deliver.ReqRep {
-		req(ipc, m)
-	} else if m == deliver.Shm {
-		shmSender(ipc, 2, 32*1024*1024)
-	}
-	sender(ipc, m)
-}
-
-func recvMode(ipc string, m deliver.Mode, strCount string) {
-	if m == deliver.ReqRep {
-		rep(ipc, m)
-	} else if m == deliver.Shm {
-		shmReciever(ipc, strCount)
-	}
-	reciever(ipc, m, strCount)
-}
-
 func main() {
-	if len(os.Args) > 3 && os.Args[1] == "producer" {
-		m := modeType(os.Args[2])
-		if m > deliver.ModeStart {
-			senderMode(os.Args[3], m)
+	flag.Parse()
+
+	m := modeType(mode)
+	if m > deliver.ModeStart {
+		if proc == act {
+			senderMode(ipc, m, procCount, oneSendnRecv)
+		} else {
+			recvMode(ipc, m, procCount, oneSendnRecv)
 		}
-		os.Exit(0)
 	}
-	if len(os.Args) > 3 && os.Args[1] == "consumer" {
-		m := modeType(os.Args[2])
-		if m > deliver.ModeStart {
-			recvMode(os.Args[3], m, os.Args[4])
-		}
-		os.Exit(0)
-	}
+
 	fmt.Fprintf(os.Stderr,
 		"Usage: pushpull push|pull <URL> <ARG> ...\n")
 	os.Exit(1)

--
Gitblit v1.8.0