0
|
1 package suikwasha.distributedalgorithm.simulator;
|
|
2
|
|
3 import suikwasha.distributedalgorithm.framework.Link;
|
|
4 import suikwasha.distributedalgorithm.framework.LinkBuilder;
|
|
5 import suikwasha.distributedalgorithm.framework.Message;
|
|
6 import suikwasha.distributedalgorithm.framework.Port;
|
|
7
|
|
8 public class LoggingMessageLinkBuilder implements LinkBuilder
|
|
9 {
|
|
10 private final LinkBuilder builder;
|
|
11 private final Summary summary;
|
|
12
|
|
13 public LoggingMessageLinkBuilder(Summary _summary,LinkBuilder _builder)
|
|
14 {
|
|
15 summary = _summary;
|
|
16 builder = _builder;
|
|
17 }
|
|
18
|
|
19 public Link build()
|
|
20 {
|
|
21 return new LoggingLink(summary,builder.build());
|
|
22 }
|
|
23
|
|
24 public static class LoggingLink implements Link
|
|
25 {
|
|
26 private Link link;
|
|
27 private Summary summary;
|
|
28
|
|
29 public LoggingLink(Summary _summary,Link _link)
|
|
30 {
|
|
31 summary = _summary;
|
|
32 link = _link;
|
|
33 }
|
|
34
|
|
35 public Port getPort1()
|
|
36 {
|
|
37 return new LoggingPort(summary,link.getPort1());
|
|
38 }
|
|
39
|
|
40 public Port getPort2()
|
|
41 {
|
|
42 return new LoggingPort(summary,link.getPort2());
|
|
43 }
|
|
44 }
|
|
45
|
|
46 public static class LoggingPort implements Port
|
|
47 {
|
|
48 private Summary summary;
|
|
49 private Port port;
|
|
50
|
|
51 public LoggingPort(Summary _summary,Port _port)
|
|
52 {
|
|
53 summary = _summary;
|
|
54 port = _port;
|
|
55 }
|
|
56
|
|
57 public void send(Message _mes)
|
|
58 {
|
|
59 long bits = _mes.getMessage().limit();
|
|
60 summary.addMessageBitCount(bits);
|
|
61 summary.incrementMessageCount();
|
|
62 summary.trySetMessageChain(_mes.getMessageChain());
|
|
63
|
|
64 port.send(_mes);
|
|
65 }
|
|
66
|
|
67 public Message blockingReceive() throws InterruptedException
|
|
68 {
|
|
69 return port.blockingReceive();
|
|
70 }
|
|
71
|
|
72 public Message tryReceive()
|
|
73 {
|
|
74 return port.tryReceive();
|
|
75 }
|
2
|
76
|
|
77 public boolean isReady()
|
|
78 {
|
|
79 return port.isReady();
|
|
80 }
|
0
|
81 }
|
|
82 }
|