Files
hk4e/gate/net/kcp_event.go
2022-12-19 13:40:04 +08:00

76 lines
1.7 KiB
Go

package net
import (
"reflect"
"hk4e/gate/kcp"
"hk4e/pkg/logger"
)
const (
KcpConnForceClose = iota
KcpAllConnForceClose
KcpGateOpenState
KcpConnCloseNotify
KcpConnEstNotify
KcpConnAddrChangeNotify
)
type KcpEvent struct {
ConvId uint64
EventId int
EventMessage any
}
func (k *KcpConnectManager) GetKcpEventInputChan() chan *KcpEvent {
return k.kcpEventInput
}
func (k *KcpConnectManager) GetKcpEventOutputChan() chan *KcpEvent {
return k.kcpEventOutput
}
func (k *KcpConnectManager) eventHandle() {
logger.Debug("event handle start")
// 事件处理
for {
event := <-k.kcpEventInput
logger.Info("kcp manager recv event, ConvId: %v, EventId: %v, EventMessage Type: %v", event.ConvId, event.EventId, reflect.TypeOf(event.EventMessage))
switch event.EventId {
case KcpConnForceClose:
// 强制关闭某个连接
session := k.GetSessionByConvId(event.ConvId)
if session == nil {
logger.Error("session not exist, convId: %v", event.ConvId)
continue
}
reason, ok := event.EventMessage.(uint32)
if !ok {
logger.Error("event KcpConnForceClose msg type error")
continue
}
session.conn.SendEnetNotify(&kcp.Enet{
ConnType: kcp.ConnEnetFin,
EnetType: reason,
})
_ = session.conn.Close()
logger.Info("conn has been force close, convId: %v", event.ConvId)
case KcpAllConnForceClose:
// 强制关闭所有连接
k.closeAllKcpConn()
logger.Info("all conn has been force close")
case KcpGateOpenState:
// 改变网关开放状态
openState, ok := event.EventMessage.(bool)
if !ok {
logger.Error("event KcpGateOpenState msg type error")
continue
}
k.openState = openState
if openState == false {
k.closeAllKcpConn()
}
}
}
}