using DM_Weight.ViewModels; using log4net; using Mina.Core.Future; using Mina.Filter.Codec; using Mina.Filter.Logging; 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; using System.Threading.Tasks; namespace DM_Weight.Port { public class SocketHelper { private readonly ILog logger = LogManager.GetLogger(typeof(SocketHelper)); AsyncSocketConnector acceptor = new AsyncSocketConnector(); IConnectFuture iConnectFuture; public bool OpenStatus=false; string ip = ConfigurationManager.AppSettings["modbusIp"].ToString(); int port =Convert.ToInt32(ConfigurationManager.AppSettings["modbusPort"]); public SocketHelper() { 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) => { OpenStatus = (bool)e.Message; logger.Info("MessageReceived>>>>>>>>>>>>>>>>" + OpenStatus); }; acceptor.SessionClosed += (o, e) => { logger.Info("SessionClosed"); Task.Delay(50).Wait(); SocketConnect(); }; this.SocketConnect(); } public void SocketConnect() { iConnectFuture = acceptor.Connect(new IPEndPoint(IPAddress.Parse(ip), port)).Await(); logger.Info(iConnectFuture.Connected.ToString()); } public void SendMessage(MyBaseMessage baseMessage) { iConnectFuture.Session.Write(baseMessage); } } }