using CommonLang.Log;
using CommonLang.Protocol;
using CommonNetwork_ICE.Util;
using CommonServer.Protocol;
using CommonServer.Server;
using CommonServer_ICE.handler;
using CommonServer_ICE.Msg;
using CommonServer_ICE.Session;
using Slice;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CommonServer_ICE.Server
{
///
/// ICE的UDP消息委托处理实现类
///
public sealed class IceUdpServer : IceConnectServer
{
private static Logger log = LoggerFactory.GetLogger("IceUdpServer");
public IceUdpServer(IPackageCodec codec)
: base(codec)
{
}
private SenderDisp_ GetServerSendHandler()
{
// 服务器消息委托处理类
ServerMsgHandler msgHandlerDelegate = new ServerMsgHandlerUdpDelegate(this);
return new ServerUdpSendHandler(msgHandlerDelegate);
}
///
/// 获取传输类型
///
///
internal override int getCommType()
{
return Constants.COMM_TYPE_UDP;
}
///
/// 返回会话总数量
///
public override int SessionCount
{
get { return SessionManager.getAllSession().Count; }
}
///
/// 启动ICE服务器
///
///
internal override void StartIceServer()
{
SenderDisp_ serverSendHandler = GetServerSendHandler();
// 初始化消息接收
bool initServerSuccessed = serverConnector.InitRecvServer(Constants.COMM_TYPE_UDP, serverSendHandler);
if (!initServerSuccessed)
{
throw new Exception("初始化服务器失败!");
}
init();
log.Info("ICE UDP服务器启动侦听,IP【" + serverConnector.GetConnectorConfig().LocalIp + "】端口【" + serverConnector.GetConnectorConfig().LocalPort + "】。");
// 等待关闭
serverConnector.RecvConnector.waitForShutdown();
}
///
/// 服务器启动成功后执行各项初始化
///
void init()
{
// 启动服务器端关键包消息发送队列
SeverSendMsgManager.StartSendMsgQueue();
// 启动服务器端会话检测任务
SessionManager.StartSessionExpireTask();
}
//广播消息
public override void Broadcast(IMessage message)
{
List sessionList = SessionManager.getAllSession();
foreach (ISession session in sessionList)
{
session.Send(message);
}
}
///
/// 判断某个Session是否存在
///
///
///
public override bool HasSession(ISession session)
{
return SessionManager.hasSession(session);
}
///
/// 获取单个Session
///
///
///
public override ISession GetSessionByID(string sessionID)
{
return SessionManager.getSession(sessionID);
}
///
/// 获取所有Session
///
///
public override IEnumerable GetSessions()
{
return SessionManager.getAllSession();
}
///
/// 释放服务器资源
///
public override void Dispose()
{
log.Info("关闭服务器,释放各种资源");
// 关闭所有Session消息接收通道
List sessionList = SessionManager.getAllSession();
foreach (ISession session in sessionList)
{
session.Disconnect(true);
}
SeverSendMsgManager.EndSendMsgQueue();
SessionManager.EndSessionExpireTask();
if (serverConnector != null)
{
serverConnector.Destroy();
}
this.serverListener.OnDestory();
}
}
}