Quellcode durchsuchen

add Session attribute 'frozen'

joe vor 4 Jahren
Ursprung
Commit
b6b82f84d6
1 geänderte Dateien mit 9 neuen und 4 gelöschten Zeilen
  1. 9 4
      internal/session.go

+ 9 - 4
internal/session.go

@@ -1,12 +1,11 @@
 package internal
 
-
 import (
 	"net"
+	"one.com/nnet"
 	"sync"
 	"sync/atomic"
 	"time"
-	"one.com/nnet"
 )
 
 // 关闭原因
@@ -27,6 +26,7 @@ type Session struct {
 	extraData interface{}
 	once      sync.Once // Close once
 	closed    int32     // session 是否关闭
+	frozen    int32     // is session frozen. when no responding, no receiving, but can send.
 	chClose   chan struct{}
 	chSend    chan nnet.IPacket
 	chRecv    chan nnet.IPacket
@@ -99,6 +99,10 @@ func (self *Session) close(reason int32) {
 	})
 }
 
+func (self *Session) SetFrozen(frozen int32) {
+	atomic.StoreInt32(&self.frozen, frozen)
+}
+
 func (self *Session) IsClosed() bool {
 	return atomic.LoadInt32(&self.closed) != 0
 }
@@ -181,7 +185,9 @@ func (self *Session) loopRead() {
 			//
 			return
 		}
-		self.chRecv <- pkt
+		if self.frozen == 0 {
+			self.chRecv <- pkt
+		}
 	}
 }
 
@@ -262,4 +268,3 @@ func asyncDo(fn func(), wg *sync.WaitGroup) {
 		wg.Done()
 	}()
 }
-