From f7fd67fcdc911e8f01137694dfdbb64c895ddcbb Mon Sep 17 00:00:00 2001
From: magiclvzs <441707528@qq.com>
Date: Fri, 16 Nov 2018 21:16:43 +0800
Subject: [PATCH] =?UTF-8?q?cmd=E5=8F=AF=E4=BB=A5=E8=AF=BB=E5=8F=96raw?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

cmd可以读取raw
---
 init.go       |  3 ++-
 msgque.go     |  7 ++++++-
 msgque_tcp.go | 22 +++++++++++++++++++---
 3 files changed, 27 insertions(+), 5 deletions(-)

diff --git a/init.go b/init.go
index d2bbabf..6cb0fbd 100644
--- a/init.go
+++ b/init.go
@@ -89,7 +89,8 @@ var Config = struct {
 	SSLCrtPath       string
 	SSLKeyPath       string
 	EnableWss        bool
-}{UdpServerGoCnt: 64, TimeSyncInterval: 10, PoolSize: 50000}
+	ReadDataBuffer   int
+}{UdpServerGoCnt: 64, TimeSyncInterval: 10, PoolSize: 50000, ReadDataBuffer: 1 << 12}
 
 var stopCheckIndex uint64
 var stopCheckMap = struct {
diff --git a/msgque.go b/msgque.go
index 5d446eb..0310e43 100644
--- a/msgque.go
+++ b/msgque.go
@@ -56,6 +56,7 @@ type IMsgQue interface {
 	DelCallback(m *Message)
 	SetSendFast()
 	SetTimeout(t int)
+	SetCmdReadRaw()
 	GetTimeout() int
 	Reconnect(t int) //重连间隔  最小1s,此函数仅能连接关闭是调用
 
@@ -115,7 +116,9 @@ func (r *msgQue) getGMsg(add bool) *gMsg {
 	gm := gmsgArray[r.gmsgId]
 	return gm
 }
+func (r *msgQue) SetCmdReadRaw() {
 
+}
 func (r *msgQue) Available() bool {
 	return r.available
 }
@@ -490,7 +493,9 @@ func StartServer(addr string, typ MsgType, handler IMsgHandler, parser IParserFa
 		if addrs[0] == "wss" {
 			Config.EnableWss = true
 		}
-		LogInfo("ws type msgque noly support MsgTypeCmd now auto set to MsgTypeCmd")
+		if typ != MsgTypeCmd {
+			LogInfo("ws type msgque noly support MsgTypeCmd now auto set to MsgTypeCmd")
+		}
 		msgque := newWsListen(naddr[0], url, MsgTypeCmd, handler, parser)
 		Go(func() {
 			LogDebug("process listen for ws msgque:%d", msgque.id)
diff --git a/msgque_tcp.go b/msgque_tcp.go
index 57d123a..73c3035 100644
--- a/msgque_tcp.go
+++ b/msgque_tcp.go
@@ -17,6 +17,11 @@ type tcpMsgQue struct {
 	address    string
 	wait       sync.WaitGroup
 	connecting int32
+	rawBuffer  []byte
+}
+
+func (r *tcpMsgQue) SetCmdReadRaw() {
+	r.rawBuffer = make([]byte, Config.ReadDataBuffer)
 }
 
 func (r *tcpMsgQue) GetNetType() NetType {
@@ -57,8 +62,8 @@ func (r *tcpMsgQue) LocalAddr() string {
 }
 
 func (r *tcpMsgQue) RemoteAddr() string {
-	if r.realRemoteAddr != ""{
-		return  r.realRemoteAddr
+	if r.realRemoteAddr != "" {
+		return r.realRemoteAddr
 	}
 	if r.conn != nil {
 		return r.conn.RemoteAddr().String()
@@ -221,8 +226,19 @@ func (r *tcpMsgQue) writeMsg() {
 
 func (r *tcpMsgQue) readCmd() {
 	reader := bufio.NewReader(r.conn)
+	var err error
+	var len int
+	var data []byte
 	for !r.IsStop() {
-		data, err := reader.ReadBytes('\n')
+		if r.rawBuffer != nil {
+			len, err = reader.Read(r.rawBuffer)
+			if err == nil && len > 0 {
+				data = make([]byte, len)
+				copy(data, r.rawBuffer)
+			}
+		} else {
+			data, err = reader.ReadBytes('\n')
+		}
 		if err != nil {
 			break
 		}