1
2
3
4 package ca.uhn.hl7v2.protocol.impl;
5
6 import ca.uhn.hl7v2.protocol.TransportException;
7 import ca.uhn.hl7v2.protocol.TransportLayer;
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 public class DualTransportConnector {
23
24 private final TransportLayer myTransportA;
25 private final TransportLayer myTransportB;
26 private boolean isConnecting;
27
28
29
30
31
32 public DualTransportConnector(TransportLayer./ca/uhn/hl7v2/protocol/TransportLayer.html#TransportLayer">TransportLayer theTransportA, TransportLayer theTransportB) {
33 myTransportA = theTransportA;
34 myTransportB = theTransportB;
35 }
36
37
38
39
40 public TransportLayer getTransportA() {
41 return myTransportA;
42 }
43
44
45
46
47 public TransportLayer getTransportB() {
48 return myTransportB;
49 }
50
51
52
53
54
55
56 public void connect() throws TransportException {
57 isConnecting = true;
58 ConnectThread c1 = new ConnectThread(myTransportA);
59 ConnectThread c2 = new ConnectThread(myTransportB);
60 c1.start();
61 c2.start();
62
63 while (isConnecting
64 && (!c1.isConnected() || !c2.isConnected())
65 && c1.getException() == null
66 && c2.getException() == null) {
67
68 try {
69 Thread.sleep(1);
70 } catch (InterruptedException ignored) {}
71 }
72
73 if (c1.getException() != null) throw c1.getException();
74 if (c2.getException() != null) throw c2.getException();
75 }
76
77 public void disconnect() throws TransportException {
78 myTransportA.disconnect();
79 myTransportB.disconnect();
80 }
81
82
83
84
85
86 public void cancelConnect() {
87 isConnecting = false;
88 }
89
90
91
92
93
94
95
96
97
98
99 private static class ConnectThread extends Thread {
100
101 private final TransportLayer myTransport;
102 private TransportException myException;
103
104 public ConnectThread(TransportLayer theTransport) {
105 myTransport = theTransport;
106 }
107
108 public boolean isConnected() {
109 return myTransport.isConnected();
110 }
111
112
113
114
115 public TransportException getException() {
116 return myException;
117 }
118
119 public void run() {
120 myException = null;
121 try {
122 myTransport.connect();
123 } catch (TransportException e) {
124 myException = e;
125 }
126 }
127 }
128
129 }