makepad_studio/build_manager/build_client.rs
1#![allow(unused_imports)]
2#![allow(unused_variables)]
3#![allow(dead_code)]
4
5use {
6 crate::{
7 makepad_micro_serde::*,
8 makepad_file_server::FileSystemRoots,
9 makepad_platform::{*, cx_stdin::aux_chan},
10 build_manager::{
11 build_protocol::{BuildCmd, BuildCmdWrap, BuildClientMessageWrap, LogItem},
12 build_server::{BuildConnection, BuildServer},
13 }
14 },
15 std::{
16 path::Path,
17 io::{Read, Write},
18 net::{TcpListener, TcpStream},
19 sync::mpsc::{self, Receiver, Sender, TryRecvError},
20 thread,
21 env,
22 path::PathBuf
23 },
24};
25
26pub struct BuildClient{
27 pub cmd_sender: Sender<BuildCmdWrap>,
28 pub msg_signal: SignalToUI,
29 pub msg_receiver: Receiver<BuildClientMessageWrap>,
30}
31
32impl BuildClient {
33
34 #[cfg(not(target_arch = "wasm32"))]
35 pub fn send_cmd_with_id(&self, cmd_id: LiveId, cmd: BuildCmd){
36 self.cmd_sender.send(BuildCmdWrap{
37 cmd_id,
38 cmd
39 }).unwrap();
40 }
41
42 #[cfg(target_arch = "wasm32")]
43 pub fn send_cmd_with_id(&self, cmd_id: BuildCmdId, cmd: BuildCmd){}
44
45 #[cfg(target_arch = "wasm32")]
46 pub fn new_with_local_server(_ubdir:&str) -> Self {
47 let (cmd_sender, _cmd_receiver) = mpsc::channel();
48 let msg_signal = LiveId::unique().into();
49 let (_msg_sender, msg_receiver) = mpsc::channel();
50 Self {
51 cmd_sender,
52 msg_signal,
53 msg_receiver,
54 }
55 }
56
57 #[cfg(not(target_arch = "wasm32"))]
58 pub fn new_with_local_server(roots:FileSystemRoots) -> Self {
59 let (cmd_sender, cmd_receiver) = mpsc::channel();
60 let msg_signal = SignalToUI::new();
61 let (msg_sender, msg_receiver) = mpsc::channel();
62 /*
63 let mut root = "./".to_string();
64 for arg in std::env::args(){
65 if let Some(prefix) = arg.strip_prefix("--root="){
66 root = prefix.to_string();
67 break;
68 }
69 }
70 let base_path = env::current_dir().unwrap().join(root);
71 let final_path = base_path.join(subdir.split('/').collect::<PathBuf>());
72 */
73 let mut server = BuildServer::new(roots);
74 spawn_local_cmd_handler(
75 cmd_receiver,
76 server.connect(Box::new({
77 let msg_sender = msg_sender.clone();
78 let msg_signal = msg_signal.clone();
79 move | msg_item:BuildClientMessageWrap | {
80 msg_sender.send(msg_item).unwrap();
81 msg_signal.set()
82 }
83 })),
84 );
85 /*spawn_connection_listener(TcpListener::bind("127.0.0.1:0").unwrap(), server);*/
86
87 Self {
88 cmd_sender,
89 msg_signal,
90 msg_receiver,
91 }
92 }
93
94}
95/*
96fn spawn_connection_listener(listener: TcpListener, mut server: BuildServer) {
97 thread::spawn(move || {
98 log!("Builder Server listening on {}", listener.local_addr().unwrap());
99 for stream in listener.incoming() {
100 let stream = stream.unwrap();
101 log!("Builder Incoming connection from {}", stream.peer_addr().unwrap());
102 let (msg_sender, msg_receiver) = mpsc::channel();
103 let connection = server.connect(Box::new({
104 let msg_sender = msg_sender.clone();
105 move | msg | {
106 msg_sender.send(msg).unwrap();
107 }
108 }));
109 spawn_remote_cmd_handler(
110 connection,
111 stream.try_clone().unwrap(),
112 );
113 spawn_msg_sender(msg_receiver, stream);
114 }
115 });
116}*/
117/*
118fn spawn_remote_cmd_handler(
119 connection: BuildConnection,
120 mut stream: TcpStream,
121) {
122 thread::spawn(move || loop {
123 let mut len_bytes = [0; 4];
124 stream.read_exact(&mut len_bytes).unwrap();
125 let len = u32::from_be_bytes(len_bytes);
126 let mut request_bytes = vec![0; len as usize];
127 stream.read_exact(&mut request_bytes).unwrap();
128
129 let cmd = DeBin::deserialize_bin(request_bytes.as_slice()).unwrap();
130
131 connection.handle_cmd(cmd);
132 });
133}*/
134/*
135fn spawn_msg_sender(
136 msg_receiver: Receiver<BuildMsgWrap>,
137 mut stream: TcpStream,
138) {
139 thread::spawn(move || loop {
140 let msg = msg_receiver.recv().unwrap();
141 let mut msg_bytes = Vec::new();
142
143 msg.ser_bin(&mut msg_bytes);
144
145 let len_bytes = msg_bytes.len().to_be_bytes();
146 stream.write_all(&len_bytes).unwrap();
147 stream.write_all(&msg_bytes).unwrap();
148 });
149}
150
151fn _spawn_cmd_sender(cmd_receiver: Receiver<BuildCmdWrap>, mut stream: TcpStream) {
152 thread::spawn(move || loop {
153 let cmd = cmd_receiver.recv().unwrap();
154 let mut cmd_bytes = Vec::new();
155 cmd.ser_bin(&mut cmd_bytes);
156 let len_bytes = cmd_bytes.len().to_be_bytes();
157 stream.write_all(&len_bytes).unwrap();
158 stream.write_all(&cmd_bytes).unwrap();
159 });
160}
161
162fn _spawn_msg_receiver(
163 mut stream: TcpStream,
164 msg_signal: Signal,
165 msg_sender: Sender<BuildMsgWrap>,
166) {
167 thread::spawn(move || loop {
168 let mut len_bytes = [0; 4];
169 stream.read_exact(&mut len_bytes).unwrap();
170
171 let len = u32::from_be_bytes(len_bytes);
172 let mut msg_bytes = vec![0; len as usize];
173 stream.read_exact(&mut msg_bytes).unwrap();
174
175 let msg = DeBin::deserialize_bin(msg_bytes.as_slice()).unwrap();
176
177 msg_sender.send(msg).unwrap();
178 msg_signal.set()
179 });
180}
181*/
182fn spawn_local_cmd_handler(
183 cmd_receiver: Receiver<BuildCmdWrap>,
184 connection: BuildConnection,
185) {
186 thread::spawn(move || while let Ok(cmd) = cmd_receiver.recv() {
187 connection.handle_cmd(cmd);
188 });
189}