From 90677812801f68e0a738723990de7b419f977b09 Mon Sep 17 00:00:00 2001 From: kaizhi.wu Date: Tue, 23 Mar 2021 16:31:03 +0800 Subject: [PATCH] feat: 实现 protocolFactory的实例 --- src/main/java/com/example/mina/client/box/aeroflex/AeroFlexClientFactory.java | 7 +++++++ src/main/java/com/example/mina/client/box/aeroflex/AeroFlexProtocolFactory.java | 45 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 0 deletions(-) create mode 100644 src/main/java/com/example/mina/client/box/aeroflex/AeroFlexProtocolFactory.java diff --git a/src/main/java/com/example/mina/client/box/aeroflex/AeroFlexClientFactory.java b/src/main/java/com/example/mina/client/box/aeroflex/AeroFlexClientFactory.java index b71ab27..1ec479b 100644 --- a/src/main/java/com/example/mina/client/box/aeroflex/AeroFlexClientFactory.java +++ b/src/main/java/com/example/mina/client/box/aeroflex/AeroFlexClientFactory.java @@ -3,6 +3,8 @@ package com.example.mina.client.box.aeroflex; import com.example.mina.client.base.AbstractClientFactory; import com.example.mina.client.base.AbstractMatrixIoHandler; import com.example.mina.client.base.MatrixConstants; +import org.apache.mina.core.filterchain.IoFilterChain; +import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.springframework.stereotype.Component; @Component(MatrixConstants.MATRIX_TYPE_AERO) @@ -12,4 +14,9 @@ public class AeroFlexClientFactory extends AbstractClientFactory { public AbstractMatrixIoHandler getClientHandler() { return null; } + + @Override + public void buildFilterChain(IoFilterChain ioFilterChain) { + ioFilterChain.addLast("codec", new ProtocolCodecFilter(new AeroFlexProtocolFactory())); + } } diff --git a/src/main/java/com/example/mina/client/box/aeroflex/AeroFlexProtocolFactory.java b/src/main/java/com/example/mina/client/box/aeroflex/AeroFlexProtocolFactory.java new file mode 100644 index 0000000..0b4ceae --- /dev/null +++ b/src/main/java/com/example/mina/client/box/aeroflex/AeroFlexProtocolFactory.java @@ -0,0 +1,45 @@ +package com.example.mina.client.box.aeroflex; + +import com.example.mina.client.base.MatrixCommand; +import com.example.mina.client.base.MatrixResponse; +import lombok.extern.slf4j.Slf4j; +import org.apache.mina.core.buffer.IoBuffer; +import org.apache.mina.core.session.IoSession; +import org.apache.mina.filter.codec.*; + +@Slf4j +public class AeroFlexProtocolFactory implements ProtocolCodecFactory { + + @Override + public ProtocolEncoder getEncoder(IoSession ioSession) throws Exception { + return new AeroFlexProtocolEncoder(); + } + + @Override + public ProtocolDecoder getDecoder(IoSession ioSession) throws Exception { + return new AeroFlexProtocolDecoder(); + } + + public static class AeroFlexProtocolEncoder extends ProtocolEncoderAdapter { + @Override + public void encode(IoSession ioSession, Object msg, ProtocolEncoderOutput protocolEncoderOutput) throws Exception { + + if(! (msg instanceof MatrixCommand) ) { + log.error("error msg, msg is: {}", msg); + return; + } + } + } + + + public static class AeroFlexProtocolDecoder extends ProtocolDecoderAdapter { + + @Override + public void decode(IoSession ioSession, IoBuffer ioBuffer, ProtocolDecoderOutput protocolDecoderOutput) throws Exception { + int cmd = ioBuffer.get(); + MatrixResponse response = new MatrixResponse(); + + protocolDecoderOutput.write(response); + } + } +} -- libgit2 0.21.2