HKC/DM_Weight/Port/FingerHelper.cs

61 lines
1.9 KiB
C#

using Common.Logging;
using DM_Weight.Finger;
using Mina.Core.Future;
using Mina.Filter.Codec;
using Mina.Transport.Socket;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace DM_Weight.Port
{
public class FingerHelper
{
private readonly ILog logger = LogManager.GetLogger(typeof(SocketHelper));
AsyncSocketConnector acceptor = new AsyncSocketConnector();
IConnectFuture iConnectFuture;
string ip = ConfigurationManager.AppSettings["fingerIp"].ToString();
FingerprintUtil _fingerprintUtil;
public FingerHelper(FingerprintUtil fingerprintUtil)
{
_fingerprintUtil = fingerprintUtil;
acceptor.ExceptionCaught += (o, e) => logger.Error(e.Exception);
//acceptor.FilterChain.AddLast("logger", new LoggingFilter());
acceptor.FilterChain.AddLast("encoding", new ProtocolCodecFilter(new MyMinaCodecFactory()));
acceptor.SessionIdle += (o, e) => logger.Info("IDLE " + e.Session.GetIdleCount(e.IdleStatus));
acceptor.MessageReceived += (o, e) =>
{
logger.Info("MessageReceived>>>>>>>>>>>>>>>>");
};
acceptor.SessionClosed += (o, e) =>
{
logger.Info("SessionClosed");
Task.Delay(50).Wait();
SocketConnect();
_fingerprintUtil.FingerDisconnect();
};
this.SocketConnect();
}
public void SocketConnect()
{
iConnectFuture = acceptor.Connect(new IPEndPoint(IPAddress.Parse(ip), 4370)).Await();
logger.Info($"再次连接结果:{iConnectFuture.Connected.ToString()}");
}
public void SendMessage(MyBaseMessage baseMessage)
{
iConnectFuture.Session.Write(baseMessage);
}
}
}