62 lines
1.8 KiB
C#
62 lines
1.8 KiB
C#
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
|
|
{
|
|
public class MyMinaEncoder : IMessageEncoder<MyBaseMessage>
|
|
{
|
|
|
|
|
|
private short accumulate = 0;
|
|
public void Encode(IoSession session, MyBaseMessage message, IProtocolEncoderOutput output)
|
|
{
|
|
IoBuffer input = IoBuffer.Allocate(12);
|
|
input.AutoExpand = true;
|
|
input.PutInt16(accumulate);
|
|
input.PutInt16(0);
|
|
input.PutInt16(6);
|
|
input.Put((byte)message.addr);
|
|
// 功能码
|
|
input.Put((byte)message.functionCode);
|
|
// 锁号
|
|
input.PutInt16(message.lockNo);
|
|
// 开锁时间
|
|
input.PutInt16(message.delay);
|
|
input.Flip();
|
|
accumulate += 1;
|
|
session.Write(input);
|
|
|
|
}
|
|
|
|
public void Encode(IoSession session, object message, IProtocolEncoderOutput output)
|
|
{
|
|
IoBuffer input = IoBuffer.Allocate(12);
|
|
input.AutoExpand = true;
|
|
if (message is MyBaseMessage)
|
|
{
|
|
var m = message as MyBaseMessage;
|
|
input.PutInt16(accumulate);
|
|
input.PutInt16(0);
|
|
input.PutInt16(6);
|
|
input.Put((byte)m.addr);
|
|
// 功能码
|
|
input.Put((byte)m.functionCode);
|
|
// 锁号
|
|
input.PutInt16(m.lockNo);
|
|
// 开锁时间
|
|
input.PutInt16(m.delay);
|
|
input.Flip();
|
|
accumulate += 1;
|
|
}
|
|
session.Write(input);
|
|
}
|
|
}
|
|
}
|