1
1
use std:: io;
2
- use std:: io:: Read ;
2
+ use std:: io:: { Read , Write } ;
3
3
use std:: net:: { IpAddr , SocketAddr , TcpStream , UdpSocket } ;
4
4
use std:: sync:: { mpsc, Arc , Mutex } ;
5
5
use std:: thread;
@@ -9,7 +9,7 @@ use std::time::{Duration, Instant};
9
9
use byteorder:: { ByteOrder , NetworkEndian } ;
10
10
11
11
use ds:: DriverStationState ;
12
- use messages:: rio:: * ;
12
+ use messages:: { ds :: tcp :: * , rio:: * } ;
13
13
14
14
pub struct DSConnection {
15
15
thread : JoinHandle < ( ) > ,
@@ -46,9 +46,21 @@ impl DSConnection {
46
46
let mut tcp = TcpStream :: connect ( SocketAddr :: new ( addr. clone ( ) , 1740 ) ) . unwrap ( ) ;
47
47
tcp. set_nonblocking ( true ) . unwrap ( ) ;
48
48
49
+ tcp. write (
50
+ GameData :: new ( state. lock ( ) . unwrap ( ) . game_data . clone ( ) )
51
+ . to_packet ( )
52
+ . as_slice ( ) ,
53
+ ) ;
54
+
49
55
loop {
50
56
match receiver_signal. try_recv ( ) {
51
57
Ok ( Signal :: Disconnect ) | Err ( mpsc:: TryRecvError :: Disconnected ) => break ,
58
+ Ok ( Signal :: Tcp ( tag) ) => {
59
+ match tcp. write ( tag. to_packet ( ) . as_slice ( ) ) {
60
+ Ok ( n) => { }
61
+ Err ( e) => { } //TODO
62
+ }
63
+ }
52
64
_ => { }
53
65
}
54
66
@@ -129,6 +141,10 @@ impl DSConnection {
129
141
Ok ( ior) => ior,
130
142
}
131
143
}
144
+
145
+ pub fn send_tcp ( & self , tag : TcpTag ) {
146
+ self . sender . send ( Signal :: Tcp ( tag) ) . unwrap ( ) ;
147
+ }
132
148
}
133
149
134
150
impl Drop for DSConnection {
@@ -138,6 +154,6 @@ impl Drop for DSConnection {
138
154
}
139
155
140
156
pub enum Signal {
141
- Tcp ,
157
+ Tcp ( TcpTag ) ,
142
158
Disconnect ,
143
159
}
0 commit comments