代码拉取完成,页面将自动刷新
package sess
import (
"net"
"gitee.com/night-tc/gobige/logger"
"github.com/xtaci/kcp-go"
"golang.org/x/net/netutil"
)
/*
连接服务管理器
*/
type INetServer interface {
//主要给INetSess调用的方法,也可以重载
ISessCallBack
/* 外部函数 */
// //开始服务
// Start() (err error)
// //结束服务
// Stop()
// 遍历所有被动连接,返回false就退出遍历
RangeSess(f func(sess INetSess) bool)
// 获取会话
GetClientSess(id uint64) (result *NetSess)
//是否加密
GetEncryEnabled() bool
//连接类型
GetProtocal() ProtocalEnum
}
////////////////////////////////////////////////////////////////////
/* 外部函数 */
// 开始服务
func (this *NetSrv) Start() (err error) {
switch this.protocal {
case Protocal_Tcp:
this.listener, err = net.Listen("tcp", this.listenAddr)
case Protocal_Kcp:
this.listener, err = kcp.Listen(this.listenAddr)
default:
return Err_Unknown_ProtocalEnum.NewErr(nil, this.protocal)
}
if err != nil {
return err
}
if this.maxConns > 0 {
this.listener = netutil.LimitListener(this.listener, this.maxConns)
}
logger.Infof("Net server listen addr:%s;", this.listenAddr)
this.thgo.Go(this.acceptConn)
return nil
}
// 结束服务
func (this *NetSrv) Stop() {
this.listener.Close()
this.thgo.CloseWait()
}
// 遍历所有被动连接,返回false就退出遍历
func (this *NetSrv) RangeSess(f func(sess INetSess) bool) {
this.sessesByID.Range(func(key, value any) bool {
return f(value.(INetSess))
})
}
// 获取会话
func (this *NetSrv) GetClientSess(id uint64) (result *NetSess) {
if v, ok := this.sessesByID.Load(id); ok {
result = v.(*NetSess)
}
return
}
// 是否加密
func (this *NetSrv) GetEncryEnabled() bool {
return this.encryEnabled
}
// 连接类型
func (this *NetSrv) GetProtocal() ProtocalEnum {
return this.protocal
}
/* 外部函数 */
////////////////////////////////////////////////////////////////////
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。