63 lines
2.0 KiB
C#
63 lines
2.0 KiB
C#
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;
|
|
}
|
|
}
|