ソースを参照

update IProtocol interface

joe 4 年 前
コミット
339b4da63c
4 ファイル変更15 行追加17 行削除
  1. 2 2
      internal/conn_ws.go
  2. 2 4
      internal/server_ws.go
  3. 10 4
      internal/session.go
  4. 1 7
      iprotocol.go

+ 2 - 2
internal/conn_ws.go

@@ -1,9 +1,9 @@
 package internal
 
 import (
-//	"fmt"
+	//	"fmt"
 
-"github.com/gorilla/websocket"
+	"github.com/gorilla/websocket"
 )
 
 type WsConn struct {

+ 2 - 4
internal/server_ws.go

@@ -1,6 +1,5 @@
 package internal
 
-
 import (
 	"net/http"
 
@@ -26,7 +25,7 @@ type WsServer struct {
 	addr     string
 	svr      *http.Server
 	upgrader *websocket.Upgrader
-	routes 	 map[string]CallbackWsPath
+	routes   map[string]CallbackWsPath
 }
 
 func NewWsServer(cf *nnet.HubConfig, cb nnet.ISessionCallback, p nnet.IProtocol,
@@ -41,7 +40,7 @@ func NewWsServer(cf *nnet.HubConfig, cb nnet.ISessionCallback, p nnet.IProtocol,
 				return true
 			},
 		},
-		routes:routes,
+		routes: routes,
 	}
 }
 
@@ -97,4 +96,3 @@ func (self *WsServer) Stop() error {
 func (self *WsServer) DoJob(int) {
 
 }
-

+ 10 - 4
internal/session.go

@@ -110,7 +110,11 @@ func (self *Session) Write(pkt nnet.IPacket, timeout time.Duration) error {
 	if timeout > 0 {
 		_ = self.conn.SetWriteDeadline(time.Now().Add(timeout))
 	}
-	_, err := self.conn.Write(pkt.Serialize())
+	data, err := self.hub.Protocol().Serialize(pkt)
+	if err != nil {
+		return err
+	}
+	_, err = self.conn.Write(data)
 	return err
 }
 
@@ -204,11 +208,13 @@ func (self *Session) loopWrite() {
 			if self.IsClosed() {
 				return
 			}
-			data := pkt.Serialize()
-			defer pkt.Destroy(data)
+			data, err := self.hub.Protocol().Serialize(pkt)
+			if err != nil {
+				continue
+			}
 
 			_ = self.conn.SetWriteDeadline(time.Now().Add(self.hub.Conf().Timeout))
-			_, err := self.conn.Write(data)
+			_, err = self.conn.Write(data)
 			if err != nil {
 				reason = CLOSE_REASON_WRITE
 				return

+ 1 - 7
iprotocol.go

@@ -1,8 +1,6 @@
 package nnet
 
 type IPacket interface {
-	// serialize to binary format to be sent
-	Serialize() []byte
 	// free the memory if needs
 	Destroy([]byte)
 	// if need to close socket after sending this packet
@@ -12,9 +10,5 @@ type IPacket interface {
 type IProtocol interface {
 	// parse by raw data to a packet
 	ReadPacket(conn IConn) (IPacket, error)
-}
-
-type IMiddleware interface {
-	BeforeSend([]byte) []byte
-	AfterReceived([]byte) []byte
+	Serialize(packet IPacket) ([]byte, error)
 }