123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- 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
- {
- /// <summary>
- /// ICE消息委托处理接口
- /// </summary>
- internal abstract class ServerMsgHandler
- {
- private static Logger log = LoggerFactory.GetLogger("ServerMsgHandler");
- public ServerMsgHandler()
- {
- }
- /// <summary>
- /// 获取通讯类型
- /// </summary>
- public abstract IceConnectServer getServer();
- /// <summary>
- /// 处理收到客户端发来的关键数据包
- /// </summary>
- /// <param name="recvPort">发送方侦听端口</param>
- /// <param name="message">数据包</param>
- /// <param name="ip">发送方IP</param>
- /// <param name="port">发送方端口</param>
- public abstract void RecvData(int recvPort, TransMessage message, string ip, int port);
- /// <summary>
- /// 处理收到客户端发来的关键数据包确认序列号
- /// </summary>
- /// <param name="recvPort">发送方侦听端口</param>
- /// <param name="serial">序列号</param>
- /// <param name="ip">发送方IP</param>
- /// <param name="port">发送方端口</param>
- public abstract void SendDataRecvAck(int recvPort, long serial, string ip, int port);
- /// <summary>
- /// 处理客户端连接到服务器,回发连接响应
- /// </summary>
- /// <param name="recvPort">发送方侦听端口</param>
- /// <param name="ip">发送方IP</param>
- /// <param name="port">发送方端口</param>
- 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);
- }
- }
- /// <summary>
- /// 服务器发送连接成功响应
- /// </summary>
- /// <param name="ip">发送方IP</param>
- /// <param name="port">发送方端口</param>
- public void ConnectAck(string ip, int port)
- {
- }
- /// <summary>
- /// 处理客户端发出关闭会话请求,服务器
- /// </summary>
- /// <param name="recvPort">发送方侦听端口</param>
- /// <param name="ip">发送方IP</param>
- /// <param name="port">发送方端口</param>
- 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;
- }
- }
- /// <summary>
- /// 处理服务器主动关闭会话,客户端回发关闭连接响应
- /// </summary>
- /// <param name="recvPort">发送方侦听端口</param>
- /// <param name="ip">发送方IP</param>
- /// <param name="port">发送方端口</param>
- 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;
- }
- }
- }
- }
|