using log4net; using Mina.Core.Buffer; using Mina.Core.Session; using Mina.Filter.Codec; using Mina.Filter.Codec.Demux; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DM_Weight.Port { internal class MyMinaDecoder : IMessageDecoder { private readonly ILog logger = LogManager.GetLogger(typeof(SocketHelper)); public MessageDecoderResult Decodable(IoSession session, IoBuffer input) { logger.Info("Decodable"); return MessageDecoderResult.OK; } public MessageDecoderResult Decode(IoSession session, IoBuffer input, IProtocolDecoderOutput output) { DecodeReturn decodeReturn= new DecodeReturn(); logger.Info("Decode"); int length = input.Remaining; byte functionCode = input.Get(7); if (functionCode == 4) { int a = input.Get(length - 2); int b = input.Get(length - 1); int c = input.Get(length - 3); int d = input.Get(length - 4); //Console.WriteLine("a"); //Console.WriteLine(a); //Console.WriteLine("b"); //Console.WriteLine(b); //var r = Convert.ToString((a >> 14) | (b << 2), 2).PadLeft(18, '0').ToCharArray(); //bool f = r.Any(c => c == '1'); logger.Info($"查状态收到返回a:{a};b:{b};c:{c};d:{d}"); bool f = false; if(a>0|| b>0||c>0||d>0) { f= true; } output.Write(f); } input.Position = length; return MessageDecoderResult.OK; } public void FinishDecode(IoSession session, IProtocolDecoderOutput output) { } } public class DecodeReturn { public int CodeFunction; public bool Flag; } }