@@ -35,7 +35,7 @@ public class HumanObjectPeerTestInstance {
35
35
fileprivate class Peer {
36
36
37
37
private( set) var txBroadcaster : BroadcasterInterface !
38
- let master : HumanObjectPeerTestInstance
38
+ weak var master : HumanObjectPeerTestInstance !
39
39
let logger : Logger
40
40
let feeEstimator : FeeEstimator
41
41
let seed : UInt8
@@ -60,36 +60,39 @@ public class HumanObjectPeerTestInstance {
60
60
var chainMonitor : ChainMonitor ?
61
61
62
62
fileprivate class TestBroadcaster : BroadcasterInterface {
63
- let master : Peer
64
- fileprivate init ( master: Peer ) {
65
- self . master = master
63
+ weak var master : Peer !
64
+
65
+ fileprivate init ( master: Peer ) {
66
+ self . master = master
66
67
super. init ( )
67
68
}
68
69
}
69
70
70
71
fileprivate class TestFilter : Filter {
71
72
72
- let master : Peer
73
+ weak var master : Peer !
73
74
74
75
fileprivate init ( master: Peer ) {
75
76
self . master = master
76
77
super. init ( )
77
78
}
79
+
78
80
override func register_output( output: WatchedOutput ) -> Option_C2Tuple_usizeTransactionZZ {
79
81
self . master. filterAdditions. insert ( " \( output. get_outpoint ( ) . get_txid ( ) ) : \( output. get_outpoint ( ) . get_index ( ) ) " )
80
82
return Option_C2Tuple_usizeTransactionZZ ( value: nil )
81
83
}
84
+
82
85
override func register_tx( txid: [ UInt8 ] ? , script_pubkey: [ UInt8 ] ) {
83
86
self . master. filterAdditions. insert ( " \( txid) " )
84
87
}
85
88
}
86
89
87
90
fileprivate class TestKeysInterface : KeysInterface {
88
91
89
- let master : Peer
92
+ weak var master : Peer !
90
93
let interface : KeysInterface
91
94
92
- fileprivate init ( master: Peer , underlyingInterface: KeysInterface ) {
95
+ fileprivate init ( master: Peer , underlyingInterface: KeysInterface ) {
93
96
self . master = master
94
97
self . interface = underlyingInterface
95
98
super. init ( )
@@ -104,7 +107,7 @@ public class HumanObjectPeerTestInstance {
104
107
105
108
fileprivate class TestChannelManagerPersister : ChannelManagerPersister , ExtendedChannelManagerPersister {
106
109
107
- let master : Peer
110
+ weak var master : Peer !
108
111
109
112
fileprivate init ( master: Peer ) {
110
113
self . master = master
@@ -121,6 +124,7 @@ public class HumanObjectPeerTestInstance {
121
124
override func persist_new_channel( id: OutPoint , data: ChannelMonitor ) -> Result_NoneChannelMonitorUpdateErrZ {
122
125
return Result_NoneChannelMonitorUpdateErrZ . ok ( )
123
126
}
127
+
124
128
override func update_persisted_channel( id: OutPoint , update: ChannelMonitorUpdate , data: ChannelMonitor ) -> Result_NoneChannelMonitorUpdateErrZ {
125
129
return Result_NoneChannelMonitorUpdateErrZ . ok ( )
126
130
}
@@ -144,7 +148,7 @@ public class HumanObjectPeerTestInstance {
144
148
145
149
if master. use_manual_watch || false { // don't support manual watch yet
146
150
// self.chainMonitor
147
- } else {
151
+ } else {
148
152
self . chainMonitor = ChainMonitor ( chain_source: self . filter, broadcaster: self . txBroadcaster, logger: self . logger, feeest: self . feeEstimator, persister: persister)
149
153
self . chainWatch = self . chainMonitor!. as_Watch ( )
150
154
}
@@ -160,7 +164,7 @@ public class HumanObjectPeerTestInstance {
160
164
161
165
if master. use_km_wrapper {
162
166
// self.keysInterface = manual_
163
- } else {
167
+ } else {
164
168
self . keysInterface = keysManager. as_KeysInterface ( )
165
169
self . explicitKeysManager = keysManager
166
170
}
@@ -169,7 +173,7 @@ public class HumanObjectPeerTestInstance {
169
173
170
174
}
171
175
172
- fileprivate convenience init ( master: HumanObjectPeerTestInstance , seed: UInt8 ) {
176
+ fileprivate convenience init ( master: HumanObjectPeerTestInstance , seed: UInt8 ) {
173
177
self . init ( master: master, _dummy: ( ) , seed: seed)
174
178
175
179
if master. use_chan_manager_constructor {
@@ -182,13 +186,13 @@ public class HumanObjectPeerTestInstance {
182
186
self . channelManager = ChannelManager ( fee_est: self . feeEstimator, chain_monitor: self . chainWatch!, tx_broadcaster: self . txBroadcaster, logger: self . logger, keys_manager: self . keysInterface, config: UserConfig ( ) , params: chainParameters)
183
187
let randomData = self . keysInterface. get_secure_random_bytes ( )
184
188
let messageHandler = MessageHandler ( chan_handler_arg: self . channelManager. as_ChannelMessageHandler ( ) , route_handler_arg: self . router. as_RoutingMessageHandler ( ) )
185
- PeerManager ( message_handler: messageHandler, our_node_secret: self . keysInterface. get_node_secret ( ) , ephemeral_random_data: randomData, logger: self . logger)
189
+ self . peerManager = PeerManager ( message_handler: messageHandler, our_node_secret: self . keysInterface. get_node_secret ( ) , ephemeral_random_data: randomData, logger: self . logger)
186
190
}
187
191
self . nodeId = self . channelManager. get_our_node_id ( )
188
192
self . bindSocketHandler ( )
189
193
}
190
194
191
- fileprivate convenience init ( original: Peer ) {
195
+ fileprivate convenience init ( original: Peer ) {
192
196
self . init ( master: original. master, _dummy: ( ) , seed: original. seed)
193
197
194
198
if master. use_chan_manager_constructor {
@@ -229,6 +233,10 @@ public class HumanObjectPeerTestInstance {
229
233
230
234
}
231
235
236
+ deinit {
237
+ print ( " deiniting Peer " )
238
+ }
239
+
232
240
}
233
241
234
242
func do_read_event( pm: PeerManager , descriptor: SocketDescriptor , data: [ UInt8 ] ) {
@@ -241,7 +249,7 @@ public class HumanObjectPeerTestInstance {
241
249
if self . use_nio_peer_handler {
242
250
let connectionResult = peerA. tcpSocketHandler? . connect ( address: " 127.0.0.1 " , port: peerB. tcpPort!, theirNodeId: peerB. nodeId!)
243
251
print ( " connection result: \( connectionResult) " )
244
- } else {
252
+ } else {
245
253
// not currently relevant; we need the TCP connection simulation
246
254
}
247
255
}
@@ -253,16 +261,18 @@ public class HumanObjectPeerTestInstance {
253
261
connectPeers ( peerA: peer1, peerB: peer2)
254
262
255
263
let semaphore = DispatchSemaphore ( value: 0 )
264
+
256
265
DispatchQueue . global ( qos: . background) . async {
257
266
print ( " waiting five seconds " )
258
267
sleep ( 5 )
259
268
semaphore. signal ( )
260
269
print ( " finished waiting five seconds " )
261
270
}
271
+
262
272
semaphore. wait ( )
263
273
peer1. constructor? . interrupt ( )
264
274
peer2. constructor? . interrupt ( )
275
+
265
276
}
266
277
267
278
}
268
-
0 commit comments