1.只留下BlockingQueueCache

2.为了避免循环引用,重新整理package结构
This commit is contained in:
dmy@lab
2016-01-11 21:29:48 +08:00
parent b284b401dc
commit 8599c87f0c
7 changed files with 57 additions and 79 deletions

View File

@@ -39,13 +39,13 @@ type Cipher interface {
type Carrier struct {
Conn net.Conn
Cipher Cipher
Cache *cache.UnblockingQueueCache
Cache *cache.BlockingQueueCache
Msg *cache.BlockingQueueCache
AttachedTunnelID string
receiveBuff []byte
}
func NewCarrier(conn net.Conn, cipher Cipher, queCache *cache.UnblockingQueueCache, msg *cache.BlockingQueueCache, id string) *Carrier {
func NewCarrier(conn net.Conn, cipher Cipher, queCache *cache.BlockingQueueCache, msg *cache.BlockingQueueCache, id string) *Carrier {
t := new(Carrier)
t.Conn = conn
t.Cipher = cipher
@@ -137,8 +137,6 @@ func UnwrapPackage(pacakge []byte) (data []byte, rest []byte, err error) {
func SendData(carrier *Carrier) (n int, err error) {
msg, nByte := carrier.Msg.Get()
id := carrier.AttachedTunnelID
log.Info("id %s Get Msg", id)
if len(msg) < nByte {
log.Panic("Cache of send is too small")
}
@@ -147,7 +145,6 @@ func SendData(carrier *Carrier) (n int, err error) {
carrier.Cache.Put(make([]byte, 1024*4), 1024*4)
return
}
log.Info("id %s AAAAAAAaaa", id)
encrypedByte, err := carrier.Cipher.Encrypt(msg[:nByte])
if err != nil {
n = 0
@@ -157,35 +154,24 @@ func SendData(carrier *Carrier) (n int, err error) {
wraped := WrapPackage(encrypedByte[:nByte])
n, err = carrier.Conn.Write(wraped)
carrier.Cache.Put(make([]byte, 1024*4), 1024*4)
log.Info("id %s give back cache", id)
return
}
func RowReceiveData(carrier *Carrier) (n int, err error) {
cache, _ := carrier.Cache.Get()
log.Info("id %s get Cache", carrier.AttachedTunnelID)
n, err = carrier.Conn.Read(cache)
if err != nil {
n = 0
}
carrier.Msg.Put(cache, n)
id := carrier.AttachedTunnelID
log.Info("id %s put Msg", id)
return
}
func ReceiveData(carrier *Carrier) (n int, err error) {
// defer func() {
// if r := recover(); r != nil {
// log.Error("ReceiveData err %s", r)
// }
// }()
// log.Debug("id %s wrapedPackage := carrier.GetReceiveBuff()", carrier.AttachedTunnelID)
wrapedPackage := carrier.GetReceiveBuff() //make([]byte, 0, cap(carrier.Cache))
var packageData []byte
var _rest []byte
cache, _ := carrier.Cache.Get()
log.Info("id %s get Cache", carrier.AttachedTunnelID)
for {
//首先检查这个是不是完整的包,是就返回好了,免得被阻塞
data, rest, err := UnwrapPackage(wrapedPackage)
@@ -226,7 +212,5 @@ func ReceiveData(carrier *Carrier) (n int, err error) {
}
n = len(decrypted)
carrier.Msg.Put(decrypted, n)
id := carrier.AttachedTunnelID
log.Info("id %s put Msg", id)
return
}