|
|
// Copyright 2019, Chef. All rights reserved.
|
|
|
// https://github.com/q191201771/lal
|
|
|
//
|
|
|
// Use of this source code is governed by a MIT-style license
|
|
|
// that can be found in the License file.
|
|
|
//
|
|
|
// Author: Chef (191201771@qq.com)
|
|
|
|
|
|
package logic
|
|
|
|
|
|
import "github.com/q191201771/lal/pkg/base"
|
|
|
|
|
|
type ILalServer interface {
|
|
|
RunLoop() error
|
|
|
Dispose()
|
|
|
|
|
|
// StatLalInfo StatXxx... CtrlXxx...
|
|
|
// 一些获取状态、发送控制命令的API
|
|
|
// 目的是方便业务方在不修改logic包内代码的前提下,在外层实现一些特定逻辑的定制化开发
|
|
|
//
|
|
|
StatLalInfo() base.LalInfo
|
|
|
StatAllGroup() (sgs []base.StatGroup)
|
|
|
StatGroup(streamName string) *base.StatGroup
|
|
|
CtrlStartPull(info base.ApiCtrlStartPullReq)
|
|
|
CtrlKickOutSession(info base.ApiCtrlKickOutSession) base.HttpResponseBasic
|
|
|
}
|
|
|
|
|
|
// NewLalServer 创建一个lal server
|
|
|
//
|
|
|
// @param confFile 配置文件地址
|
|
|
//
|
|
|
// @param modOption
|
|
|
// 可变参数,如果不关心,可以不填
|
|
|
// 目的是方便业务方在不修改logic包内代码的前提下,在外层实现一些特定逻辑的定制化开发
|
|
|
// Option struct中可修改的参数说明:
|
|
|
// - notifyHandler 事件监听
|
|
|
// 业务方可实现 INotifyHandler 接口并传入从而获取到对应的事件通知
|
|
|
// 注意,如果业务方实现了自己的事件监听,则lal server内部不再走http notify的逻辑
|
|
|
// 如果不填写,内部默认走http notify的逻辑(当然,还需要在配置文件中开启http notify功能)
|
|
|
//
|
|
|
func NewLalServer(confFile string, modOption ...ModOption) ILalServer {
|
|
|
return NewServerManager(confFile, modOption...)
|
|
|
}
|
|
|
|
|
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
// INotifyHandler 事件通知接口
|
|
|
//
|
|
|
type INotifyHandler interface {
|
|
|
OnServerStart(info base.LalInfo)
|
|
|
OnUpdate(info base.UpdateInfo)
|
|
|
OnPubStart(info base.PubStartInfo)
|
|
|
OnPubStop(info base.PubStopInfo)
|
|
|
OnSubStart(info base.SubStartInfo)
|
|
|
OnSubStop(info base.SubStopInfo)
|
|
|
OnRtmpConnect(info base.RtmpConnectInfo)
|
|
|
}
|
|
|
|
|
|
type Option struct {
|
|
|
notifyHandler INotifyHandler
|
|
|
}
|
|
|
|
|
|
var defaultOption = Option{
|
|
|
notifyHandler: nil, // 注意,为nil时,内部会赋值为 HttpNotify
|
|
|
}
|
|
|
|
|
|
type ModOption func(option *Option)
|
|
|
|
|
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
// 一些没有放入配置文件中,包级别的配置,暂时没有对外暴露
|
|
|
//
|
|
|
var (
|
|
|
relayPushTimeoutMs = 5000
|
|
|
relayPushWriteAvTimeoutMs = 5000
|
|
|
relayPullTimeoutMs = 5000
|
|
|
relayPullReadAvTimeoutMs = 5000
|
|
|
calcSessionStatIntervalSec uint32 = 5
|
|
|
|
|
|
// checkSessionAliveIntervalSec
|
|
|
//
|
|
|
// - 对于输入型session,检查一定时间内,是否没有收到数据
|
|
|
// - 对于输出型session,检查一定时间内,是否没有发送数据
|
|
|
// 注意,这里既检查socket发送阻塞,又检查上层没有给session喂数据
|
|
|
//
|
|
|
checkSessionAliveIntervalSec uint32 = 10
|
|
|
)
|