Commit 321b0c9ec5d9d64a1558d0f7174b8cfc8ef94fab
1 parent
90677812
Exists in
develop
调试
Showing
9 changed files
with
89 additions
and
18 deletions
Show diff stats
src/main/java/com/example/mina/Application.java
1 | 1 | package com.example.mina; |
2 | 2 | |
3 | +import com.example.mina.client.base.ClientManager; | |
4 | +import com.example.mina.client.base.MatrixClient; | |
5 | +import com.example.mina.client.base.MatrixCommand; | |
6 | +import com.example.mina.client.base.MatrixConnectConfig; | |
3 | 7 | import org.springframework.boot.SpringApplication; |
4 | 8 | import org.springframework.boot.autoconfigure.SpringBootApplication; |
9 | +import org.springframework.context.ConfigurableApplicationContext; | |
10 | + | |
11 | +import java.util.HashMap; | |
12 | +import java.util.Map; | |
5 | 13 | |
6 | 14 | /** |
7 | 15 | * @author 杜云山 |
... | ... | @@ -11,7 +19,24 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; |
11 | 19 | public class Application { |
12 | 20 | |
13 | 21 | public static void main(String[] args) { |
14 | - SpringApplication.run(Application.class, args); | |
22 | +// SpringApplication.run(Application.class, args); | |
23 | + | |
24 | + ConfigurableApplicationContext run = SpringApplication.run(Application.class, args); | |
25 | + | |
26 | + ClientManager clientManager = run.getBean(ClientManager.class); | |
27 | + | |
28 | + MatrixConnectConfig connectConfig = MatrixConnectConfig.builder() | |
29 | + .deviceId("15") | |
30 | + .deviceType("AEROFLEX") | |
31 | + .host("127.0.0.1") | |
32 | + .port(9100) | |
33 | + .build(); | |
34 | + | |
35 | + MatrixClient client = clientManager.getOrCreateClient(connectConfig); | |
36 | + | |
37 | + | |
38 | + client.setAttenuation(1,2,3); | |
39 | + | |
15 | 40 | } |
16 | 41 | |
17 | 42 | } | ... | ... |
src/main/java/com/example/mina/client/base/AbstractClientFactory.java
... | ... | @@ -26,9 +26,10 @@ public abstract class AbstractClientFactory { |
26 | 26 | |
27 | 27 | MatrixClient client = new MatrixClient(connectConfig); |
28 | 28 | |
29 | + client.setClientHandler(getClientHandler()); | |
29 | 30 | //TODO initiate the client |
30 | 31 | buildFilterChain(client.getFilterChain()); |
31 | - client.setClientHandler(getClientHandler()); | |
32 | + | |
32 | 33 | return client; |
33 | 34 | }catch (Exception e) { |
34 | 35 | log.error("Can not create the client, error: ", e); | ... | ... |
src/main/java/com/example/mina/client/base/AbstractMatrixIoHandler.java
src/main/java/com/example/mina/client/base/ClientManager.java
1 | 1 | package com.example.mina.client.base; |
2 | 2 | |
3 | 3 | import lombok.extern.slf4j.Slf4j; |
4 | +import org.springframework.beans.factory.annotation.Autowired; | |
4 | 5 | import org.springframework.stereotype.Component; |
5 | 6 | import org.springframework.util.Assert; |
6 | 7 | |
7 | 8 | import java.util.Collections; |
9 | +import java.util.HashMap; | |
8 | 10 | import java.util.Map; |
9 | 11 | import java.util.Set; |
10 | 12 | |
... | ... | @@ -14,12 +16,15 @@ public class ClientManager<T extends AbstractClientFactory> { |
14 | 16 | |
15 | 17 | private Map<String, T> clientFactories; |
16 | 18 | |
17 | - private Map<String, MatrixClient> clients; | |
19 | + private Map<String, MatrixClient> clients ; | |
18 | 20 | |
19 | 21 | public ClientManager() { |
20 | - this.clients = Collections.emptyMap(); | |
22 | + | |
23 | + // this.clients = Collections.emptyMap(); | |
24 | + this.clients = new HashMap<>(); | |
21 | 25 | } |
22 | 26 | |
27 | + @Autowired | |
23 | 28 | public void setClientFactories(Map<String, T> clientFactories) { |
24 | 29 | this.clientFactories = clientFactories; |
25 | 30 | } | ... | ... |
src/main/java/com/example/mina/client/base/MatrixClient.java
... | ... | @@ -4,6 +4,7 @@ import lombok.extern.slf4j.Slf4j; |
4 | 4 | import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder; |
5 | 5 | import org.apache.mina.core.filterchain.IoFilterChain; |
6 | 6 | import org.apache.mina.core.future.ConnectFuture; |
7 | +import org.apache.mina.core.future.WriteFuture; | |
7 | 8 | import org.apache.mina.core.service.IoConnector; |
8 | 9 | import org.apache.mina.core.session.IoSession; |
9 | 10 | import org.apache.mina.filter.codec.ProtocolCodecFilter; |
... | ... | @@ -84,10 +85,6 @@ public class MatrixClient { |
84 | 85 | } |
85 | 86 | |
86 | 87 | public IoFilterChain getFilterChain() { |
87 | - return ioSession.getFilterChain(); | |
88 | - } | |
89 | - | |
90 | - public void start() { | |
91 | 88 | //1、创建客户端IoService |
92 | 89 | IoConnector connector = new NioSocketConnector(); |
93 | 90 | //客户端链接超时时间 |
... | ... | @@ -106,6 +103,11 @@ public class MatrixClient { |
106 | 103 | // 获取连接会话 |
107 | 104 | this.ioSession = connectFuture.getSession(); |
108 | 105 | this.ioSession.setAttribute(MatrixConstants.SESSION_CONFIG_NAME, matrixConnectConfig); |
106 | + | |
107 | + return ioSession.getFilterChain(); | |
108 | + } | |
109 | + | |
110 | + public void start() { | |
109 | 111 | //将数据发送线程启动 |
110 | 112 | this.sender.start(); |
111 | 113 | } |
... | ... | @@ -165,7 +167,11 @@ public class MatrixClient { |
165 | 167 | try { |
166 | 168 | MatrixCommand command = commands.poll(5, TimeUnit.SECONDS); |
167 | 169 | |
168 | - client.ioSession.write(command); | |
170 | + if(command != null){ | |
171 | + log.info("======================"); | |
172 | + WriteFuture a =client.ioSession.write(command); | |
173 | + } | |
174 | + | |
169 | 175 | }catch (Exception e) { |
170 | 176 | log.error("error occurred when send the request to device, device: " + client.matrixConnectConfig, e); |
171 | 177 | } | ... | ... |
src/main/java/com/example/mina/client/box/aeroflex/AeroFlexClientFactory.java
1 | 1 | package com.example.mina.client.box.aeroflex; |
2 | 2 | |
3 | 3 | import com.example.mina.client.base.AbstractClientFactory; |
4 | -import com.example.mina.client.base.AbstractMatrixIoHandler; | |
5 | 4 | import com.example.mina.client.base.MatrixConstants; |
5 | +import com.example.mina.client.base.MatrixDataProxy; | |
6 | 6 | import org.apache.mina.core.filterchain.IoFilterChain; |
7 | 7 | import org.apache.mina.filter.codec.ProtocolCodecFilter; |
8 | 8 | import org.springframework.stereotype.Component; |
... | ... | @@ -11,8 +11,9 @@ import org.springframework.stereotype.Component; |
11 | 11 | public class AeroFlexClientFactory extends AbstractClientFactory { |
12 | 12 | |
13 | 13 | @Override |
14 | - public AbstractMatrixIoHandler getClientHandler() { | |
15 | - return null; | |
14 | + public AeroflexClientIoHandler getClientHandler() { | |
15 | + System.out.println("=============getClientHandler=================="); | |
16 | + return new AeroflexClientIoHandler(); | |
16 | 17 | } |
17 | 18 | |
18 | 19 | @Override | ... | ... |
src/main/java/com/example/mina/client/box/aeroflex/AeroFlexProtocolFactory.java
... | ... | @@ -27,6 +27,20 @@ public class AeroFlexProtocolFactory implements ProtocolCodecFactory { |
27 | 27 | if(! (msg instanceof MatrixCommand) ) { |
28 | 28 | log.error("error msg, msg is: {}", msg); |
29 | 29 | return; |
30 | + }else{ | |
31 | + MatrixCommand mc = (MatrixCommand) msg; | |
32 | + log.info("---发送数据参数!Attn = {},Col = {},Command = {},Row = {},MatrixId = {}", mc.getAttn(),mc.getCol(),mc.getCommand(),mc.getRow(),mc.getMatrixId()); | |
33 | + IoBuffer buffer = IoBuffer.allocate(100, false).setAutoExpand(true); | |
34 | + buffer.putInt(mc.getCommand()); | |
35 | + buffer.putInt(mc.getAttn()); | |
36 | + buffer.putInt(mc.getCol()); | |
37 | + buffer.putInt(mc.getRow()); | |
38 | + | |
39 | + //buffer.put(lm.getContent().getBytes(charset)); | |
40 | + | |
41 | + buffer.flip(); | |
42 | + protocolEncoderOutput.write(buffer); | |
43 | + log.info("-=-=-=-=-=-=send finish=="); | |
30 | 44 | } |
31 | 45 | } |
32 | 46 | } |
... | ... | @@ -36,10 +50,11 @@ public class AeroFlexProtocolFactory implements ProtocolCodecFactory { |
36 | 50 | |
37 | 51 | @Override |
38 | 52 | public void decode(IoSession ioSession, IoBuffer ioBuffer, ProtocolDecoderOutput protocolDecoderOutput) throws Exception { |
53 | + log.info("--server返回给----client ------IoBuffer{}" , ioBuffer); | |
39 | 54 | int cmd = ioBuffer.get(); |
40 | - MatrixResponse response = new MatrixResponse(); | |
55 | + MatrixResponse response = new MatrixResponse(); // todo | |
41 | 56 | |
42 | - protocolDecoderOutput.write(response); | |
57 | + protocolDecoderOutput.write(ioBuffer); | |
43 | 58 | } |
44 | 59 | } |
45 | 60 | } | ... | ... |
src/main/java/com/example/mina/client/box/aeroflex/AeroflexClientIoHandler.java
... | ... | @@ -2,21 +2,36 @@ package com.example.mina.client.box.aeroflex; |
2 | 2 | |
3 | 3 | import com.example.mina.client.base.AbstractMatrixIoHandler; |
4 | 4 | import com.example.mina.client.base.MatrixDataProxy; |
5 | +import lombok.extern.slf4j.Slf4j; | |
6 | +import org.apache.mina.core.session.IoSession; | |
5 | 7 | |
6 | 8 | /** |
7 | 9 | * @author dy |
8 | 10 | * @date 2021/3/10 |
9 | 11 | */ |
12 | +@Slf4j | |
10 | 13 | public class AeroflexClientIoHandler extends AbstractMatrixIoHandler { |
11 | 14 | |
12 | - public AeroflexClientIoHandler(MatrixDataProxy matrixDataProxy) { | |
13 | - super(matrixDataProxy); | |
15 | + //public AeroflexClientIoHandler(MatrixDataProxy matrixDataProxy) { | |
16 | + // super(matrixDataProxy); | |
17 | + // } | |
18 | + | |
19 | + public AeroflexClientIoHandler() { | |
20 | + super(new MatrixDataProxy()); | |
14 | 21 | } |
15 | 22 | |
23 | + | |
16 | 24 | @Override |
17 | 25 | public boolean handleCommandResponse(byte[] response) { |
18 | - | |
26 | + log.info("------AeroflexClientIoHandler-----{}",response); | |
19 | 27 | return false; |
20 | 28 | } |
21 | 29 | |
30 | + @Override | |
31 | + public void sessionCreated(IoSession session) { | |
32 | + System.out.println("=========111========"); | |
33 | + } | |
34 | + | |
35 | + | |
36 | + | |
22 | 37 | } | ... | ... |
src/main/java/com/example/mina/server/box/aeroflex/AeroflexVirtualBoxHandler.java
1 | 1 | package com.example.mina.server.box.aeroflex; |
2 | 2 | |
3 | +import com.example.mina.client.base.MatrixCommand; | |
3 | 4 | import com.example.mina.server.base.AbstractVirtualBoxHandler; |
4 | 5 | import com.example.mina.server.entity.AeroflexDataBuffer; |
5 | 6 | import lombok.extern.slf4j.Slf4j; |
... | ... | @@ -94,7 +95,8 @@ public class AeroflexVirtualBoxHandler |
94 | 95 | |
95 | 96 | @Override |
96 | 97 | public void messageSent(IoSession session, Object message) { |
97 | - | |
98 | + //MatrixCommand mc=(MatrixCommand)message; | |
99 | + //log.info("--- abstractVirtual 发送数据成功!Attn = {},Col = {},Command = {},Row = {},MatrixId = {}", mc.getAttn(),mc.getCol(),mc.getCommand(),mc.getRow(),mc.getMatrixId()); | |
98 | 100 | log.info("--- abstractVirtual 发送数据成功!{}", message); |
99 | 101 | } |
100 | 102 | ... | ... |