using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Slice;
using CommonNetwork_ICE.Common;
using CommonServer.Server;
using CommonServer_ICE.Session;
using CommonServer.Protocol;
using CommonLang.Protocol;
using CommonNetwork_ICE.Util;
using CommonServer_ICE.Server;
using CommonLang.Log;
namespace CommonServer_ICE.Msg
{
///
/// ICE消息委托处理接口
///
internal abstract class ServerMsgHandler
{
private static Logger log = LoggerFactory.GetLogger("ServerMsgHandler");
public ServerMsgHandler()
{
}
///
/// 获取通讯类型
///
public abstract IceConnectServer getServer();
///
/// 处理收到客户端发来的关键数据包
///
/// 发送方侦听端口
/// 数据包
/// 发送方IP
/// 发送方端口
public abstract void RecvData(int recvPort, TransMessage message, string ip, int port);
///
/// 处理收到客户端发来的关键数据包确认序列号
///
/// 发送方侦听端口
/// 序列号
/// 发送方IP
/// 发送方端口
public abstract void SendDataRecvAck(int recvPort, long serial, string ip, int port);
///
/// 处理客户端连接到服务器,回发连接响应
///
/// 发送方侦听端口
/// 发送方IP
/// 发送方端口
public void Connect(int recvPort, string ip, int port)
{
log.Info("收到客户端发来请求连接,地址IP【" + ip + "】,端口【" + port + "】,发送方侦听端口【" + recvPort + "】");
if (SessionManager.hasSession(ip, port, recvPort))
{
// 已经连接,发送连接成功确认
IceServerIoSession confirmSession = (IceServerIoSession)SessionManager.getSession(ip, port, recvPort);
if (!confirmSession.IsConnected)
{
confirmSession.IsConnected = true;
try
{
confirmSession.Sender.ConnectAck();
}
catch (Exception e)
{
confirmSession.HandleException(e);
}
}
else
{
log.Error("非法的多次连接,不予处理,客户端地址IP【" + ip + "】,端口【" + port + "】,发送方侦听端口【" + recvPort + "】");
}
return;
}
IceConnectServer server = this.getServer();
IceServerIoSession session = SessionManager.createSession(server, ip, port, recvPort);
// 初始化Session的ICE发送
IceConnector connector = new IceConnector(Constants.SEND_INTERFACE_NAME, Constants.SERVER_SENDER_RECV_ADAPTER, ip, recvPort, server.getServerConfig().Ip, server.getServerConfig().Port);
try
{
IceInit.InitIceSender(server.getCommType(), connector);
}
catch (Exception e)
{
session.HandleException(e);
return;
}
if (connector.SenderConnector == null)
{
log.Error("初始化服务器端发送器异常,创建Session不成功,客户端地址IP【" + ip + "】,端口【" + port + "】,发送方侦听端口【" + recvPort + "】");
return;
}
session.Connector = connector;
session.Sender = connector.Sender;
// 启用Session
session.IsConnected = true;
// 发送连接成功确认
try
{
server.OnNewSessionConnected(session);
session.OnSessionStarted();
session.Sender.ConnectAck();
}
catch (Exception e)
{
session.HandleException(e);
}
}
///
/// 服务器发送连接成功响应
///
/// 发送方IP
/// 发送方端口
public void ConnectAck(string ip, int port)
{
}
///
/// 处理客户端发出关闭会话请求,服务器
///
/// 发送方侦听端口
/// 发送方IP
/// 发送方端口
public void Close(int recvPort, string ip, int port)
{
log.Info("收到客户端发来关闭连接请求,地址IP【" + ip + "】,端口【" + port + "】,发送方侦听端口【" + recvPort + "】");
IceServerIoSession session = (IceServerIoSession)SessionManager.getSession(ip, port, recvPort);
if (session != null)
{
try
{
session.Sender.CloseAck(recvPort);
}
catch (Exception e)
{
session.HandleException(e);
}
// 发送关闭确认响应
session.Disconnect(true);
}
else
{
log.Error("非法的关闭命令,客户端地址IP【" + ip + "】,端口【" + port + "】,发送方侦听端口【" + recvPort + "】");
return;
}
}
///
/// 处理服务器主动关闭会话,客户端回发关闭连接响应
///
/// 发送方侦听端口
/// 发送方IP
/// 发送方端口
public void CloseAck(int recvPort, string ip, int port)
{
log.Info("收到客户端发来关闭成功响应,地址IP【" + ip + "】,端口【" + port + "】,发送方侦听端口【" + recvPort + "】");
IceServerIoSession session;
if (SessionManager.hasSession(ip, port, recvPort))
{
session = (IceServerIoSession)SessionManager.getSession(ip, port, recvPort);
session.Disconnect(true);
}
else
{
log.Error("非法的关闭响应命令,客户端地址IP【" + ip + "】,端口【" + port + "】,发送方侦听端口【" + recvPort + "】");
return;
}
}
}
}