using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CommonNetwork_ICE.Common;
using CommonLang.Protocol;
using CommonNetwork_ICE.Util;
using CommonNetwork_ICE.Session;
using Slice;
using CommonLang.Log;
using CommonNetwork_ICE.Client;
namespace CommonNetwork_ICE.Msg
{
///
/// ICE消息委托处理类:根据客户端消息接收类的委托,处理服务器发来的ICE网络消息
///
internal class ClientMsgHandlerTcpDelegate : ClientMsgHandler
{
private static Logger log = LoggerFactory.GetLogger("ClientMsgHandlerTcpDelegate");
public ClientMsgHandlerTcpDelegate(IceClientConnector iceClient, IceClientNetSession session)
: base(iceClient, session)
{
}
///
/// 收到数据包
///
/// 数据包
/// 发送方IP
/// 发送方端口
public override void RecvData(int recvPort, TransMessage message, String ip, int port)
{
log.Trace("收到服务器发来数据,地址IP【" + ip + "】,端口【" + port + "】,编号:" + message.serial);
// 数据解码
IMessage imessage = null;
try
{
Codec.doDecode(message, out imessage);
}
catch (Exception e)
{
Env.ENV_ERR_CODE = Error.ERR_CODE_4;
session.onException(e);
return;
}
if (imessage == null)
{
return;
}
// 数据处理
try
{
long startTickCount = Environment.TickCount;
session.onReceive(imessage, message.length);
long endTickCount = Environment.TickCount;
long interval = endTickCount - startTickCount;
if (interval > Env.MSG_PROC_TIME_OUT)
{
log.Info("客户端消息处理超时,用时【" + interval + "】,消息编号【" + imessage.GetType() + "】,接收端口【" + recvPort + "】");
}
}
catch (Exception e)
{
log.Error(e.Message);
Env.ENV_ERR_CODE = Error.ERR_CODE_5;
session.onException(e);
}
}
}
}