1
+ #![ allow( dead_code) ]
2
+ #![ allow( clippy:: result_large_err) ]
1
3
use super :: {
2
4
error:: { PoolError , PoolResult } ,
3
5
mining_pool:: { EitherFrame , StdFrame } ,
@@ -23,6 +25,7 @@ mod message_handler;
23
25
mod setup_connection;
24
26
use setup_connection:: SetupConnectionHandler ;
25
27
28
+ #[ derive( Clone ) ]
26
29
pub struct TemplateRx {
27
30
receiver : tokio:: sync:: broadcast:: Sender < EitherFrame > ,
28
31
sender : tokio:: sync:: broadcast:: Sender < EitherFrame > ,
@@ -68,15 +71,14 @@ impl TemplateRx {
68
71
69
72
SetupConnectionHandler :: setup ( & mut receiver, & mut sender, address) . await ?;
70
73
71
- let self_ = Arc :: new ( Mutex :: new ( Self {
74
+ let self_ = Self {
72
75
receiver,
73
- sender,
76
+ sender : sender . clone ( ) ,
74
77
new_template_sender : templ_sender,
75
78
new_prev_hash_sender : prev_h_sender,
76
79
message_received_signal,
77
- status_tx,
78
- } ) ) ;
79
- let cloned = self_. clone ( ) ;
80
+ status_tx : status_tx. clone ( ) ,
81
+ } ;
80
82
81
83
let c_additional_size = CoinbaseOutputDataSize {
82
84
coinbase_output_max_additional_size : coinbase_out_len,
@@ -86,29 +88,26 @@ impl TemplateRx {
86
88
)
87
89
. try_into ( ) ?;
88
90
89
- Self :: send ( self_ . clone ( ) , frame) . await ?;
91
+ Self :: send ( sender . clone ( ) , frame) ?;
90
92
91
- task:: spawn ( async { Self :: start ( cloned ) . await } ) ;
92
- task:: spawn ( async { Self :: on_new_solution ( self_ , solution_receiver) . await } ) ;
93
+ task:: spawn ( async { Self :: start ( self_ ) . await } ) ;
94
+ task:: spawn ( async { Self :: on_new_solution ( sender , status_tx , solution_receiver) . await } ) ;
93
95
94
96
Ok ( ( ) )
95
97
}
96
98
97
- pub async fn start ( self_ : Arc < Mutex < Self > > ) {
98
- let ( mut recv_msg_signal, receiver, new_template_sender, new_prev_hash_sender, status_tx) =
99
- self_
100
- . safe_lock ( |s| {
101
- (
102
- s. message_received_signal . subscribe ( ) ,
103
- s. receiver . clone ( ) ,
104
- s. new_template_sender . clone ( ) ,
105
- s. new_prev_hash_sender . clone ( ) ,
106
- s. status_tx . clone ( ) ,
107
- )
108
- } )
109
- . unwrap ( ) ;
99
+ pub async fn start ( self_ : Self ) {
100
+ let ( mut recv_msg_signal, receiver, new_template_sender, new_prev_hash_sender, status_tx) = (
101
+ self_. message_received_signal . subscribe ( ) ,
102
+ self_. receiver . clone ( ) ,
103
+ self_. new_template_sender . clone ( ) ,
104
+ self_. new_prev_hash_sender . clone ( ) ,
105
+ self_. status_tx . clone ( ) ,
106
+ ) ;
107
+ let mut receiver = receiver. subscribe ( ) ;
110
108
loop {
111
- let message_from_tp = handle_result ! ( status_tx, receiver. subscribe( ) . recv( ) . await ) ;
109
+ let message_from_tp = handle_result ! ( status_tx, receiver. recv( ) . await ) ;
110
+ info ! ( "Message: {:?}" , message_from_tp) ;
112
111
let mut message_from_tp: StdFrame = handle_result ! (
113
112
status_tx,
114
113
message_from_tp
@@ -123,7 +122,7 @@ impl TemplateRx {
123
122
let msg = handle_result ! (
124
123
status_tx,
125
124
ParseServerTemplateDistributionMessages :: handle_message_template_distribution(
126
- self_. clone( ) ,
125
+ Arc :: new ( Mutex :: new ( self_. clone( ) ) ) ,
127
126
message_type,
128
127
payload,
129
128
)
@@ -155,34 +154,35 @@ impl TemplateRx {
155
154
}
156
155
}
157
156
158
- pub async fn send ( self_ : Arc < Mutex < Self > > , sv2_frame : StdFrame ) -> PoolResult < ( ) > {
157
+ pub fn send (
158
+ sender : tokio:: sync:: broadcast:: Sender < EitherFrame > ,
159
+ sv2_frame : StdFrame ,
160
+ ) -> PoolResult < ( ) > {
159
161
let either_frame = sv2_frame. into ( ) ;
160
- let sender = self_
161
- . safe_lock ( |self_| self_. sender . clone ( ) )
162
- . map_err ( |e| PoolError :: PoisonLock ( e. to_string ( ) ) ) ?;
163
162
sender. send ( either_frame) ?;
164
163
Ok ( ( ) )
165
164
}
166
165
167
166
async fn on_new_solution (
168
- self_ : Arc < Mutex < Self > > ,
167
+ sender : tokio:: sync:: broadcast:: Sender < EitherFrame > ,
168
+ status_tx : status:: Sender ,
169
169
mut rx : tokio:: sync:: mpsc:: Receiver < SubmitSolution < ' static > > ,
170
- ) {
171
- let status_tx = self_. safe_lock ( |s| s. status_tx . clone ( ) ) . unwrap ( ) ;
170
+ ) -> PoolResult < ( ) > {
172
171
while let Some ( solution) = rx. recv ( ) . await {
173
172
info ! ( "Sending Solution to TP: {:?}" , & solution) ;
174
173
let sv2_frame_res: Result < StdFrame , _ > =
175
174
PoolMessages :: TemplateDistribution ( TemplateDistribution :: SubmitSolution ( solution) )
176
175
. try_into ( ) ;
177
176
match sv2_frame_res {
178
177
Ok ( frame) => {
179
- handle_result ! ( status_tx, Self :: send( self_ . clone( ) , frame) . await ) ;
178
+ handle_result ! ( status_tx, Self :: send( sender . clone( ) , frame) ) ;
180
179
}
181
180
Err ( _e) => {
182
181
// return submit error
183
182
todo ! ( )
184
183
}
185
184
} ;
186
185
}
186
+ Ok ( ( ) )
187
187
}
188
188
}
0 commit comments