Commit 23416fa69f8f79ae220688001bb34f27d61b1232
1 parent
8cb7be3c
Exists in
develop
feat: refactor the client and the step iterations;
Showing
18 changed files
with
164 additions
and
114 deletions
Show diff stats
src/main/java/com/example/mina/client/base/AbstractClientFactory.java
@@ -15,8 +15,10 @@ public abstract class AbstractClientFactory { | @@ -15,8 +15,10 @@ public abstract class AbstractClientFactory { | ||
15 | 15 | ||
16 | abstract public AbstractMatrixIoHandler getClientHandler(); | 16 | abstract public AbstractMatrixIoHandler getClientHandler(); |
17 | 17 | ||
18 | - public void buildFilterChain(IoFilterChain ioFilterChain){ | 18 | + public void buildFilterChain(IoFilterChain ioFilterChain) throws Exception{ |
19 | + | ||
19 | ioFilterChain.addLast("codec", new ProtocolCodecFilter(new ByteProtocolFactory())); | 20 | ioFilterChain.addLast("codec", new ProtocolCodecFilter(new ByteProtocolFactory())); |
21 | + | ||
20 | } | 22 | } |
21 | 23 | ||
22 | public MatrixClient createClient(MatrixConnectConfig connectConfig){ | 24 | public MatrixClient createClient(MatrixConnectConfig connectConfig){ |
@@ -27,9 +29,10 @@ public abstract class AbstractClientFactory { | @@ -27,9 +29,10 @@ public abstract class AbstractClientFactory { | ||
27 | MatrixClient client = new MatrixClient(connectConfig); | 29 | MatrixClient client = new MatrixClient(connectConfig); |
28 | 30 | ||
29 | client.setClientHandler(getClientHandler()); | 31 | client.setClientHandler(getClientHandler()); |
30 | - //TODO initiate the client | ||
31 | - buildFilterChain(client.getFilterChain()); | 32 | + client.setMatrixDataProxy(matrixDataProxy); |
33 | + client.connect(); | ||
32 | 34 | ||
35 | + buildFilterChain(client.getFilterChain()); | ||
33 | return client; | 36 | return client; |
34 | }catch (Exception e) { | 37 | }catch (Exception e) { |
35 | log.error("Can not create the client, error: ", e); | 38 | log.error("Can not create the client, error: ", e); |
src/main/java/com/example/mina/client/base/AbstractMatrixIoHandler.java
@@ -3,7 +3,6 @@ package com.example.mina.client.base; | @@ -3,7 +3,6 @@ package com.example.mina.client.base; | ||
3 | 3 | ||
4 | import lombok.Data; | 4 | import lombok.Data; |
5 | import lombok.extern.slf4j.Slf4j; | 5 | import lombok.extern.slf4j.Slf4j; |
6 | -import org.apache.mina.core.buffer.IoBuffer; | ||
7 | import org.apache.mina.core.service.IoHandlerAdapter; | 6 | import org.apache.mina.core.service.IoHandlerAdapter; |
8 | import org.apache.mina.core.session.IdleStatus; | 7 | import org.apache.mina.core.session.IdleStatus; |
9 | import org.apache.mina.core.session.IoSession; | 8 | import org.apache.mina.core.session.IoSession; |
@@ -15,12 +14,6 @@ import org.apache.mina.core.session.IoSession; | @@ -15,12 +14,6 @@ import org.apache.mina.core.session.IoSession; | ||
15 | @Slf4j | 14 | @Slf4j |
16 | public abstract class AbstractMatrixIoHandler extends IoHandlerAdapter { | 15 | public abstract class AbstractMatrixIoHandler extends IoHandlerAdapter { |
17 | 16 | ||
18 | - protected MatrixDataProxy matrixDataProxy; | ||
19 | - | ||
20 | - public AbstractMatrixIoHandler(MatrixDataProxy matrixDataProxy) { | ||
21 | - this.matrixDataProxy = matrixDataProxy; | ||
22 | - } | ||
23 | - | ||
24 | protected MatrixConnectConfig getConnectConfig(IoSession session) { | 17 | protected MatrixConnectConfig getConnectConfig(IoSession session) { |
25 | Object boxConnectConfig = session.getAttribute(MatrixConstants.SESSION_CONFIG_NAME); | 18 | Object boxConnectConfig = session.getAttribute(MatrixConstants.SESSION_CONFIG_NAME); |
26 | 19 | ||
@@ -30,6 +23,15 @@ public abstract class AbstractMatrixIoHandler extends IoHandlerAdapter { | @@ -30,6 +23,15 @@ public abstract class AbstractMatrixIoHandler extends IoHandlerAdapter { | ||
30 | return null; | 23 | return null; |
31 | } | 24 | } |
32 | 25 | ||
26 | + protected MatrixDataProxy getMatrixDataProxy(IoSession session) { | ||
27 | + Object matrixDataProxy = session.getAttribute(MatrixConstants.SESSION_DATA_PROXY_NAME); | ||
28 | + | ||
29 | + if( matrixDataProxy instanceof MatrixDataProxy) { | ||
30 | + return (MatrixDataProxy) matrixDataProxy; | ||
31 | + } | ||
32 | + return null; | ||
33 | + } | ||
34 | + | ||
33 | @Override | 35 | @Override |
34 | public void exceptionCaught(IoSession session, Throwable throwable) { | 36 | public void exceptionCaught(IoSession session, Throwable throwable) { |
35 | } | 37 | } |
src/main/java/com/example/mina/client/base/Experiment.java
@@ -53,7 +53,7 @@ public abstract class Experiment <T extends MatrixClient, O extends ExperimentOp | @@ -53,7 +53,7 @@ public abstract class Experiment <T extends MatrixClient, O extends ExperimentOp | ||
53 | } | 53 | } |
54 | 54 | ||
55 | public boolean isContinue() { | 55 | public boolean isContinue() { |
56 | - return iteratedTimes < options.getMaxIterCount() && | 56 | + return iteratedTimes < options.getIterations() && |
57 | ZonedDateTime.now().isBefore(options.getFinishAt()) && | 57 | ZonedDateTime.now().isBefore(options.getFinishAt()) && |
58 | isRunning; | 58 | isRunning; |
59 | } | 59 | } |
src/main/java/com/example/mina/client/base/ExperimentOptions.java
@@ -6,11 +6,14 @@ import lombok.Data; | @@ -6,11 +6,14 @@ import lombok.Data; | ||
6 | 6 | ||
7 | @Data | 7 | @Data |
8 | public abstract class ExperimentOptions { | 8 | public abstract class ExperimentOptions { |
9 | + | ||
9 | protected String experimentId; | 10 | protected String experimentId; |
10 | 11 | ||
11 | - protected Integer startAttenuation; | 12 | + protected String experimentType; |
13 | + | ||
14 | + protected Integer startAttn; | ||
12 | 15 | ||
13 | - protected Integer endAttenuation; | 16 | + protected Integer endAttn; |
14 | 17 | ||
15 | protected Integer step; | 18 | protected Integer step; |
16 | 19 | ||
@@ -27,11 +30,17 @@ public abstract class ExperimentOptions { | @@ -27,11 +30,17 @@ public abstract class ExperimentOptions { | ||
27 | /** | 30 | /** |
28 | * 最大循环次数 | 31 | * 最大循环次数 |
29 | */ | 32 | */ |
30 | - protected Integer maxIterCount; | 33 | + protected Integer iterations; |
31 | 34 | ||
32 | protected ZonedDateTime finishAt; | 35 | protected ZonedDateTime finishAt; |
33 | 36 | ||
34 | - protected List<StationPair> pairs; | ||
35 | 37 | ||
36 | - protected abstract boolean checkOptions(); | 38 | + protected boolean checkOptions(){ |
39 | + if(startAttn<0 || endAttn<0 || startAttn>endAttn || step<=0 | ||
40 | + || pause<0 || period<=0 || iterations<=0 || finishAt==null || | ||
41 | + finishAt.isBefore(ZonedDateTime.now())) { | ||
42 | + return false; | ||
43 | + } | ||
44 | + return true; | ||
45 | + } | ||
37 | } | 46 | } |
src/main/java/com/example/mina/client/base/MatrixClient.java
1 | package com.example.mina.client.base; | 1 | package com.example.mina.client.base; |
2 | 2 | ||
3 | import lombok.extern.slf4j.Slf4j; | 3 | import lombok.extern.slf4j.Slf4j; |
4 | -import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder; | ||
5 | import org.apache.mina.core.filterchain.IoFilterChain; | 4 | import org.apache.mina.core.filterchain.IoFilterChain; |
6 | import org.apache.mina.core.future.ConnectFuture; | 5 | import org.apache.mina.core.future.ConnectFuture; |
7 | import org.apache.mina.core.future.WriteFuture; | 6 | import org.apache.mina.core.future.WriteFuture; |
8 | import org.apache.mina.core.service.IoConnector; | 7 | import org.apache.mina.core.service.IoConnector; |
9 | import org.apache.mina.core.session.IoSession; | 8 | import org.apache.mina.core.session.IoSession; |
10 | -import org.apache.mina.filter.codec.ProtocolCodecFilter; | ||
11 | import org.apache.mina.transport.socket.nio.NioSocketConnector; | 9 | import org.apache.mina.transport.socket.nio.NioSocketConnector; |
12 | import org.springframework.util.Assert; | 10 | import org.springframework.util.Assert; |
13 | 11 | ||
14 | import java.net.InetSocketAddress; | 12 | import java.net.InetSocketAddress; |
15 | import java.util.concurrent.LinkedBlockingQueue; | 13 | import java.util.concurrent.LinkedBlockingQueue; |
16 | -import java.util.concurrent.TimeUnit; | ||
17 | 14 | ||
18 | /** | 15 | /** |
19 | * @author dy | 16 | * @author dy |
@@ -32,6 +29,11 @@ public class MatrixClient { | @@ -32,6 +29,11 @@ public class MatrixClient { | ||
32 | */ | 29 | */ |
33 | protected LinkedBlockingQueue<MatrixCommand> requestsPool; | 30 | protected LinkedBlockingQueue<MatrixCommand> requestsPool; |
34 | 31 | ||
32 | + /** | ||
33 | + * the data proxy | ||
34 | + */ | ||
35 | + private MatrixDataProxy matrixDataProxy; | ||
36 | + | ||
35 | protected AbstractMatrixIoHandler clientHandler; | 37 | protected AbstractMatrixIoHandler clientHandler; |
36 | 38 | ||
37 | protected IoSession ioSession; | 39 | protected IoSession ioSession; |
@@ -42,8 +44,6 @@ public class MatrixClient { | @@ -42,8 +44,6 @@ public class MatrixClient { | ||
42 | this.matrixConnectConfig = connectConfig; | 44 | this.matrixConnectConfig = connectConfig; |
43 | this.requestsPool = new LinkedBlockingQueue<>(); | 45 | this.requestsPool = new LinkedBlockingQueue<>(); |
44 | this.sender = new CommandSender(this, this.requestsPool); | 46 | this.sender = new CommandSender(this, this.requestsPool); |
45 | - | ||
46 | - this.sender.start(); | ||
47 | } | 47 | } |
48 | 48 | ||
49 | /** | 49 | /** |
@@ -75,16 +75,22 @@ public class MatrixClient { | @@ -75,16 +75,22 @@ public class MatrixClient { | ||
75 | this.clientHandler = clientHandler; | 75 | this.clientHandler = clientHandler; |
76 | } | 76 | } |
77 | 77 | ||
78 | + /** | ||
79 | + * get the io filter chain | ||
80 | + */ | ||
81 | + public IoFilterChain getFilterChain() { | ||
82 | + return ioSession.getFilterChain(); | ||
83 | + } | ||
78 | 84 | ||
79 | /** | 85 | /** |
80 | - * 返回该盒子的编解码器,默认为tcp的协议,如果是其它协议,可以在自类中重写改方法 | 86 | + * Set the data proxy |
81 | * @return | 87 | * @return |
82 | */ | 88 | */ |
83 | - protected void setFilterChain(DefaultIoFilterChainBuilder filterChainBuilder) { | ||
84 | - filterChainBuilder.addLast("codec", new ProtocolCodecFilter(new ByteProtocolFactory())); | 89 | + public void setMatrixDataProxy(MatrixDataProxy matrixDataProxy) { |
90 | + this.matrixDataProxy = matrixDataProxy; | ||
85 | } | 91 | } |
86 | 92 | ||
87 | - public IoFilterChain getFilterChain() { | 93 | + public void connect() { |
88 | //1、创建客户端IoService | 94 | //1、创建客户端IoService |
89 | IoConnector connector = new NioSocketConnector(); | 95 | IoConnector connector = new NioSocketConnector(); |
90 | //客户端链接超时时间 | 96 | //客户端链接超时时间 |
@@ -103,8 +109,8 @@ public class MatrixClient { | @@ -103,8 +109,8 @@ public class MatrixClient { | ||
103 | // 获取连接会话 | 109 | // 获取连接会话 |
104 | this.ioSession = connectFuture.getSession(); | 110 | this.ioSession = connectFuture.getSession(); |
105 | this.ioSession.setAttribute(MatrixConstants.SESSION_CONFIG_NAME, matrixConnectConfig); | 111 | this.ioSession.setAttribute(MatrixConstants.SESSION_CONFIG_NAME, matrixConnectConfig); |
112 | + this.ioSession.setAttribute(MatrixConstants.SESSION_DATA_PROXY_NAME, matrixDataProxy); | ||
106 | 113 | ||
107 | - return ioSession.getFilterChain(); | ||
108 | } | 114 | } |
109 | 115 | ||
110 | public void start() { | 116 | public void start() { |
src/main/java/com/example/mina/client/base/MatrixConstants.java
@@ -4,6 +4,8 @@ public class MatrixConstants { | @@ -4,6 +4,8 @@ public class MatrixConstants { | ||
4 | 4 | ||
5 | public static final String SESSION_CONFIG_NAME = "SESSION_CONFIG"; | 5 | public static final String SESSION_CONFIG_NAME = "SESSION_CONFIG"; |
6 | 6 | ||
7 | + public static final String SESSION_DATA_PROXY_NAME = "DATA_PROXY"; | ||
8 | + | ||
7 | public static final String MATRIX_TYPE_AERO = "AEROFLEX"; | 9 | public static final String MATRIX_TYPE_AERO = "AEROFLEX"; |
8 | 10 | ||
9 | public static final String MATRIX_TYPE_LTE3000 = "LTE3000"; | 11 | public static final String MATRIX_TYPE_LTE3000 = "LTE3000"; |
src/main/java/com/example/mina/client/base/MatrixDataProxy.java
1 | package com.example.mina.client.base; | 1 | package com.example.mina.client.base; |
2 | 2 | ||
3 | -public class MatrixDataProxy { | 3 | +public interface MatrixDataProxy { |
4 | 4 | ||
5 | /** | 5 | /** |
6 | * 当从设备端将数据同步到客户端的时候,将数据直接存入数据中, | 6 | * 当从设备端将数据同步到客户端的时候,将数据直接存入数据中, |
7 | * 该类会在ioHandler及其子类中被调用 | 7 | * 该类会在ioHandler及其子类中被调用 |
8 | * 设置attenuation的值,并将其存储到matrix_data的数据表中 | 8 | * 设置attenuation的值,并将其存储到matrix_data的数据表中 |
9 | */ | 9 | */ |
10 | - public void setAttenuation(String deviceId, int row, int col, int val) { | ||
11 | - //TODO 实现将数据写入到数据库的逻辑 | ||
12 | - } | 10 | + void setAttenuation(String deviceId, int row, int col, int val); |
13 | 11 | ||
14 | - public int getAttenuation(String deviceId, int row, int col) { | ||
15 | - return -1; | ||
16 | - } | 12 | + int getAttenuation(String deviceId, int row, int col); |
17 | 13 | ||
18 | - public void setOffset(int row, int val) { | 14 | + void setOffset(int row, int val); |
19 | 15 | ||
20 | - } | 16 | + void resetAttenuation(); |
21 | 17 | ||
22 | - public int getOffset(int row) { | ||
23 | - return -1; | ||
24 | - } | 18 | + int getOffset(int row); |
25 | 19 | ||
26 | - public void resetAttenuation() { | ||
27 | - | ||
28 | - } | ||
29 | - | ||
30 | - private String getCurrentThreadId() { | ||
31 | - return Thread.currentThread().getName(); | ||
32 | - } | ||
33 | } | 20 | } |
src/main/java/com/example/mina/client/base/SendMessage.java
@@ -1,19 +0,0 @@ | @@ -1,19 +0,0 @@ | ||
1 | -package com.example.mina.client.base; | ||
2 | - | ||
3 | -import lombok.AllArgsConstructor; | ||
4 | -import lombok.Data; | ||
5 | -import lombok.NoArgsConstructor; | ||
6 | -import lombok.experimental.SuperBuilder; | ||
7 | - | ||
8 | -/** | ||
9 | - * @author dy | ||
10 | - * @date 2021/3/12 | ||
11 | - */ | ||
12 | -@SuperBuilder | ||
13 | -@Data | ||
14 | -@AllArgsConstructor | ||
15 | -@NoArgsConstructor | ||
16 | -public class SendMessage { | ||
17 | - | ||
18 | - private byte[] sendMessage; | ||
19 | -} |
src/main/java/com/example/mina/client/base/StationPair.java
1 | package com.example.mina.client.base; | 1 | package com.example.mina.client.base; |
2 | 2 | ||
3 | import java.util.List; | 3 | import java.util.List; |
4 | + | ||
5 | +import lombok.Builder; | ||
4 | import lombok.Data; | 6 | import lombok.Data; |
5 | 7 | ||
6 | /** | 8 | /** |
@@ -9,6 +11,7 @@ import lombok.Data; | @@ -9,6 +11,7 @@ import lombok.Data; | ||
9 | * @date 2021/4/2 | 11 | * @date 2021/4/2 |
10 | */ | 12 | */ |
11 | @Data | 13 | @Data |
14 | +@Builder | ||
12 | public class StationPair { | 15 | public class StationPair { |
13 | /** | 16 | /** |
14 | * 输出端口 | 17 | * 输出端口 |
src/main/java/com/example/mina/client/box/aeroflex/AeroflexClientIoHandler.java
@@ -13,14 +13,6 @@ import org.apache.mina.core.session.IoSession; | @@ -13,14 +13,6 @@ import org.apache.mina.core.session.IoSession; | ||
13 | @Slf4j | 13 | @Slf4j |
14 | public class AeroflexClientIoHandler extends AbstractMatrixIoHandler { | 14 | public class AeroflexClientIoHandler extends AbstractMatrixIoHandler { |
15 | 15 | ||
16 | - //public AeroflexClientIoHandler(MatrixDataProxy matrixDataProxy) { | ||
17 | - // super(matrixDataProxy); | ||
18 | - // } | ||
19 | - | ||
20 | - public AeroflexClientIoHandler() { | ||
21 | - super(new MatrixDataProxy()); | ||
22 | - } | ||
23 | - | ||
24 | 16 | ||
25 | @Override | 17 | @Override |
26 | public boolean handleCommandResponse(MatrixResponse matrixResponse) { | 18 | public boolean handleCommandResponse(MatrixResponse matrixResponse) { |
src/main/java/com/example/mina/client/box/lte3000/Lte3000ClientIoHandler.java
@@ -14,10 +14,6 @@ import org.apache.mina.core.session.IoSession; | @@ -14,10 +14,6 @@ import org.apache.mina.core.session.IoSession; | ||
14 | @Slf4j | 14 | @Slf4j |
15 | public class Lte3000ClientIoHandler extends AbstractMatrixIoHandler { | 15 | public class Lte3000ClientIoHandler extends AbstractMatrixIoHandler { |
16 | 16 | ||
17 | - public Lte3000ClientIoHandler() { | ||
18 | - super(new MatrixDataProxy()); | ||
19 | - } | ||
20 | - | ||
21 | protected boolean isSameValue(byte value, int expect) { | 17 | protected boolean isSameValue(byte value, int expect) { |
22 | return ((0xFF & value) == expect); | 18 | return ((0xFF & value) == expect); |
23 | } | 19 | } |
src/main/java/com/example/mina/client/box/qrb3000/Qrb3000ClientIoHandler.java
@@ -13,15 +13,6 @@ import org.apache.mina.core.session.IoSession; | @@ -13,15 +13,6 @@ import org.apache.mina.core.session.IoSession; | ||
13 | @Slf4j | 13 | @Slf4j |
14 | public class Qrb3000ClientIoHandler extends AbstractMatrixIoHandler { | 14 | public class Qrb3000ClientIoHandler extends AbstractMatrixIoHandler { |
15 | 15 | ||
16 | - //public AeroflexClientIoHandler(MatrixDataProxy matrixDataProxy) { | ||
17 | - // super(matrixDataProxy); | ||
18 | - // } | ||
19 | - | ||
20 | - public Qrb3000ClientIoHandler() { | ||
21 | - super(new MatrixDataProxy()); | ||
22 | - } | ||
23 | - | ||
24 | - | ||
25 | @Override | 16 | @Override |
26 | public boolean handleCommandResponse(MatrixResponse matrixResponse) { | 17 | public boolean handleCommandResponse(MatrixResponse matrixResponse) { |
27 | log.info("------Qrb3000ClientIoHandler-----{}",matrixResponse); | 18 | log.info("------Qrb3000ClientIoHandler-----{}",matrixResponse); |
src/main/java/com/example/mina/client/box/rbm3000/Rbm3000ClientIoHandler.java
@@ -13,15 +13,6 @@ import org.apache.mina.core.session.IoSession; | @@ -13,15 +13,6 @@ import org.apache.mina.core.session.IoSession; | ||
13 | @Slf4j | 13 | @Slf4j |
14 | public class Rbm3000ClientIoHandler extends AbstractMatrixIoHandler { | 14 | public class Rbm3000ClientIoHandler extends AbstractMatrixIoHandler { |
15 | 15 | ||
16 | - //public AeroflexClientIoHandler(MatrixDataProxy matrixDataProxy) { | ||
17 | - // super(matrixDataProxy); | ||
18 | - // } | ||
19 | - | ||
20 | - public Rbm3000ClientIoHandler() { | ||
21 | - super(new MatrixDataProxy()); | ||
22 | - } | ||
23 | - | ||
24 | - | ||
25 | @Override | 16 | @Override |
26 | public boolean handleCommandResponse(MatrixResponse matrixResponse) { | 17 | public boolean handleCommandResponse(MatrixResponse matrixResponse) { |
27 | log.info("------Rbm3000ClientIoHandler-----{}",matrixResponse); | 18 | log.info("------Rbm3000ClientIoHandler-----{}",matrixResponse); |
src/main/java/com/example/mina/client/box/rec6000/REC6000ClientIoHandler.java
@@ -13,15 +13,6 @@ import org.apache.mina.core.session.IoSession; | @@ -13,15 +13,6 @@ import org.apache.mina.core.session.IoSession; | ||
13 | @Slf4j | 13 | @Slf4j |
14 | public class REC6000ClientIoHandler extends AbstractMatrixIoHandler { | 14 | public class REC6000ClientIoHandler extends AbstractMatrixIoHandler { |
15 | 15 | ||
16 | - //public AeroflexClientIoHandler(MatrixDataProxy matrixDataProxy) { | ||
17 | - // super(matrixDataProxy); | ||
18 | - // } | ||
19 | - | ||
20 | - public REC6000ClientIoHandler() { | ||
21 | - super(new MatrixDataProxy()); | ||
22 | - } | ||
23 | - | ||
24 | - | ||
25 | @Override | 16 | @Override |
26 | public boolean handleCommandResponse(MatrixResponse matrixResponse) { | 17 | public boolean handleCommandResponse(MatrixResponse matrixResponse) { |
27 | log.info("------REC3000ClientIoHandler-----{}",matrixResponse); | 18 | log.info("------REC3000ClientIoHandler-----{}",matrixResponse); |
src/main/java/com/example/mina/client/experiment/HandOverExperimentOptions.java
1 | package com.example.mina.client.experiment; | 1 | package com.example.mina.client.experiment; |
2 | 2 | ||
3 | import com.example.mina.client.base.ExperimentOptions; | 3 | import com.example.mina.client.base.ExperimentOptions; |
4 | +import com.example.mina.client.base.Mimo; | ||
5 | +import com.example.mina.client.base.StationPair; | ||
4 | import lombok.Data; | 6 | import lombok.Data; |
5 | import lombok.EqualsAndHashCode; | 7 | import lombok.EqualsAndHashCode; |
6 | import lombok.ToString; | 8 | import lombok.ToString; |
7 | 9 | ||
10 | +import java.util.List; | ||
11 | + | ||
8 | @Data | 12 | @Data |
9 | @EqualsAndHashCode(callSuper = true) | 13 | @EqualsAndHashCode(callSuper = true) |
10 | @ToString(callSuper = true) | 14 | @ToString(callSuper = true) |
11 | public class HandOverExperimentOptions extends ExperimentOptions { | 15 | public class HandOverExperimentOptions extends ExperimentOptions { |
12 | 16 | ||
13 | 17 | ||
18 | + private Mimo mimo; | ||
19 | + | ||
20 | + protected List<StationPair> pairs; | ||
21 | + | ||
14 | @Override | 22 | @Override |
15 | protected boolean checkOptions() { | 23 | protected boolean checkOptions() { |
24 | + | ||
25 | + if(!super.checkOptions()) { | ||
26 | + return false; | ||
27 | + } | ||
28 | + | ||
29 | + if(pairs.size()<=2) { | ||
30 | + return false; | ||
31 | + } | ||
32 | + | ||
16 | return true; | 33 | return true; |
17 | } | 34 | } |
18 | } | 35 | } |
src/main/java/com/example/mina/client/experiment/HandoverExperiment.java
1 | package com.example.mina.client.experiment; | 1 | package com.example.mina.client.experiment; |
2 | 2 | ||
3 | -import com.example.mina.client.base.Experiment; | ||
4 | -import com.example.mina.client.base.ExperimentOptions; | ||
5 | -import com.example.mina.client.base.MatrixClient; | ||
6 | -import com.example.mina.client.base.MatrixCommand; | ||
7 | -import com.example.mina.client.base.MatrixConstants; | ||
8 | -import com.example.mina.client.base.StationPair; | 3 | +import com.example.mina.client.base.*; |
4 | +import org.springframework.util.CollectionUtils; | ||
5 | + | ||
9 | import java.util.ArrayList; | 6 | import java.util.ArrayList; |
10 | import java.util.List; | 7 | import java.util.List; |
11 | -import org.springframework.util.CollectionUtils; | ||
12 | 8 | ||
13 | -public class HandoverExperiment extends Experiment { | 9 | +public class HandoverExperiment extends Experiment<MatrixClient, HandOverExperimentOptions> { |
14 | 10 | ||
15 | - public HandoverExperiment(MatrixClient client, ExperimentOptions options) { | 11 | + public HandoverExperiment(MatrixClient client, HandOverExperimentOptions options) { |
16 | super(client, options); | 12 | super(client, options); |
17 | } | 13 | } |
18 | 14 | ||
@@ -37,12 +33,12 @@ public class HandoverExperiment extends Experiment { | @@ -37,12 +33,12 @@ public class HandoverExperiment extends Experiment { | ||
37 | return; | 33 | return; |
38 | } | 34 | } |
39 | // circle count | 35 | // circle count |
40 | - Integer count = options.getMaxIterCount(); | 36 | + Integer count = options.getIterations(); |
41 | if (count == null || count < 1) { | 37 | if (count == null || count < 1) { |
42 | return; | 38 | return; |
43 | } | 39 | } |
44 | Integer step = options.getStep(); | 40 | Integer step = options.getStep(); |
45 | - Integer endAttenuation = options.getEndAttenuation(); | 41 | + Integer endAttenuation = options.getEndAttn(); |
46 | if (step == null || step <= 0) { | 42 | if (step == null || step <= 0) { |
47 | return; | 43 | return; |
48 | } | 44 | } |
src/main/java/com/example/mina/client/experiment/StepIterator.java
0 → 100644
@@ -0,0 +1,75 @@ | @@ -0,0 +1,75 @@ | ||
1 | +package com.example.mina.client.experiment; | ||
2 | + | ||
3 | +import com.example.mina.client.base.MatrixCommand; | ||
4 | +import com.example.mina.client.base.StationPair; | ||
5 | + | ||
6 | +import java.util.Iterator; | ||
7 | + | ||
8 | +/** | ||
9 | + * This is used for handover iterations | ||
10 | + * Usage: | ||
11 | + * StationPair stationPair = StationPair.builder().out(5).inList(Arrays.asList(1,2,3)).build(); | ||
12 | + * StepIterator stepIterator = new StepIterator(stationPair, 3, 43, 10); | ||
13 | + * | ||
14 | + * | ||
15 | + * while (stepIterator.hasNext()) { | ||
16 | + * MatrixCommand[] cmds = stepIterator.next(); | ||
17 | + * System.out.println(cmds[0] + "----------"+ cmds[1]); | ||
18 | + * } | ||
19 | + * | ||
20 | + */ | ||
21 | + | ||
22 | +public class StepIterator implements Iterator{ | ||
23 | + | ||
24 | + private StationPair stationPair; | ||
25 | + private int minAttn; | ||
26 | + private int maxAttn; | ||
27 | + private int step; | ||
28 | + | ||
29 | + private int curInputIndex; | ||
30 | + private int nextInputIndex; | ||
31 | + | ||
32 | + private int curAttn1; | ||
33 | + private int curAttn2; | ||
34 | + | ||
35 | + public StepIterator(StationPair station, int min, int max, int step) { | ||
36 | + this.stationPair = station; | ||
37 | + this.minAttn = min; | ||
38 | + this.maxAttn = max; | ||
39 | + this.step = step; | ||
40 | + | ||
41 | + curInputIndex = 0; | ||
42 | + nextInputIndex = curInputIndex + 1; | ||
43 | + curAttn1 = minAttn; | ||
44 | + curAttn2 = maxAttn; | ||
45 | + } | ||
46 | + | ||
47 | + @Override | ||
48 | + public boolean hasNext() { | ||
49 | + return curInputIndex<stationPair.getInList().size() && curAttn2<=maxAttn; | ||
50 | + } | ||
51 | + | ||
52 | + @Override | ||
53 | + public MatrixCommand[] next() { | ||
54 | + MatrixCommand[] cmds = new MatrixCommand[2]; | ||
55 | + | ||
56 | + cmds[0] = MatrixCommand.builder().row(stationPair.getInList().get(curInputIndex)) | ||
57 | + .col(stationPair.getOut()).attn(curAttn1).build(); | ||
58 | + cmds[1] = MatrixCommand.builder().row(stationPair.getInList().get(nextInputIndex)) | ||
59 | + .col(stationPair.getOut()).attn(curAttn2).build(); | ||
60 | + if(curAttn1 >= maxAttn) { | ||
61 | + cmds[0].setAttn(maxAttn); | ||
62 | + cmds[1].setAttn(minAttn); | ||
63 | + curInputIndex++; | ||
64 | + nextInputIndex = (curInputIndex + 1) % stationPair.getInList().size(); | ||
65 | + | ||
66 | + curAttn1 = minAttn; | ||
67 | + curAttn2 = maxAttn; | ||
68 | + }else{ | ||
69 | + curAttn1 = curAttn1 + step; | ||
70 | + curAttn2 = curAttn2 - step; | ||
71 | + } | ||
72 | + | ||
73 | + return cmds; | ||
74 | + } | ||
75 | +} |