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);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 |