// ************************************
// @package: websocketServer
// @description: WsServer/WssServer接口，以便统一调用
// @author:
// @revision history:
// @create date: 2022-02-22 16:07:27
// ************************************
package websocketServer

import (
	"github.com/gorilla/websocket"
	webServer "Framework/webServer"
	"sync"
	"time"
)

// IServer
// @description: WsServer/WssServer接口，以便统一调用
type IServer interface {
	//-------------------------------------
	// HttpServer方法

	// HttpServer接口
	webServer.IWebServer

	// 设置地址
	SetAddr(addr string)

	// 启动HttpServer
	Start(wg *sync.WaitGroup)

	//-------------------------------------
	// websocket方法

	// 注册websocket回调
	RegisterWebsocketHandler(path string, eventCallback *EventCallbackFuncs, configObj *webServer.HandlerConfig)

	// 注册正则websocket回调
	RegisterRegexWebsocketHandler(path string, eventCallback *EventCallbackFuncs, configObj *webServer.HandlerConfig)

	// 设置websocket参数结构
	SetUpgrader(upgrader *websocket.Upgrader)

	// 获取websocket参数结构
	GetUpgrader() *websocket.Upgrader

	// 设置接收到Ping消息时，是否自动回复Pong信息
	SetAutoPong(autuPong bool)

	// 获取接收到Ping消息时，是否自动回复Pong信息
	GetAutoPong() bool

	// 设置心跳检测信息
	SetHeartbeatDetectInfo(heartbeatCloseCount int, heartbeatCycle time.Duration)

	// 获取心跳检测信息
	GetHeartbeatDetectInfo() (heartbeatCloseCount int, heartbeatCycle time.Duration)

	// 设置广播并发数
	SetBroadcastConcurrent(n int)

	// 允许新连接
	EnableNewConn()

	// 禁用新连接
	DisableNewConn()

	// 多播消息(给指定多用户发送消息)
	MulticastMessage(ctxs []*Context, messageType int, data []byte) (err error)

	// 消息广播
	BroadcastMessage(messageType int, data []byte) (err error)

	// 关闭所有连接
	CloseAll()
}
