bug fixes and stuff

This commit is contained in:
Nickiel12 2021-12-30 15:15:14 -08:00
parent 156c3e8475
commit f4161c8dbb
8 changed files with 75 additions and 24 deletions

45
.vscode/launch.json vendored Normal file
View file

@ -0,0 +1,45 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug executable 'church_controller'",
"cargo": {
"args": [
"build",
"--bin=church_controller",
"--package=church_controller"
],
"filter": {
"name": "church_controller",
"kind": "bin"
}
},
"args": [],
"cwd": "${workspaceFolder}"
},
{
"type": "lldb",
"request": "launch",
"name": "Debug unit tests in executable 'church_controller'",
"cargo": {
"args": [
"test",
"--no-run",
"--bin=church_controller",
"--package=church_controller"
],
"filter": {
"name": "church_controller",
"kind": "bin"
}
},
"args": [],
"cwd": "${workspaceFolder}"
}
]
}

View file

@ -50,7 +50,7 @@ fn main() {
while !control_c_called_flag_rx.get() { while !control_c_called_flag_rx.get() {
match from_socket_rx.recv_timeout(Duration::from_millis(100)) { match from_socket_rx.recv_timeout(Duration::from_millis(100)) {
Ok(message) => { Ok(message) => {
println!("{}", message); println!("main recieved: {}", message);
let json = serde_json::from_str(&message).unwrap(); let json = serde_json::from_str(&message).unwrap();
let update = StateUpdate::json_to_state_update(json); let update = StateUpdate::json_to_state_update(json);
if update == StateUpdate::UpdateClient { if update == StateUpdate::UpdateClient {
@ -94,6 +94,7 @@ fn setup_control_c(mut control_c_flag_tx: sync_flag::SyncFlagTx) {
} }
fn update_all(state: &StreamState, socket: &Socket) { fn update_all(state: &StreamState, socket: &Socket) {
println!("updating all");
socket.send(StateUpdate::StreamRunning(state.stream_running).to_json().to_string()); socket.send(StateUpdate::StreamRunning(state.stream_running).to_json().to_string());
socket.send(StateUpdate::StreamSoundToggleOn(state.stream_is_muted).to_json().to_string()); socket.send(StateUpdate::StreamSoundToggleOn(state.stream_is_muted).to_json().to_string());
socket.send(StateUpdate::ToggleComputerSoundOn(state.computer_sound_is_on).to_json().to_string()); socket.send(StateUpdate::ToggleComputerSoundOn(state.computer_sound_is_on).to_json().to_string());

View file

@ -106,7 +106,7 @@ impl Hotkeys {
}; };
} }
pub fn toggle_media_play_pause(&self, _value: bool) { pub fn toggle_media_play_pause(&self) {
if cfg!(target_os = "windows") { if cfg!(target_os = "windows") {
Command::new(String::from(AHK_FILES_FOLDER) + "music_toggle.exe") Command::new(String::from(AHK_FILES_FOLDER) + "music_toggle.exe")
.arg(self.hotkeys["windows"]["propresenter_re"].to_string()) .arg(self.hotkeys["windows"]["propresenter_re"].to_string())
@ -139,5 +139,5 @@ fn hotkeys() {
hk.send_obs(String::from("a hotkey")); hk.send_obs(String::from("a hotkey"));
hk.toggle_computer_sound(true); hk.toggle_computer_sound(true);
hk.toggle_stream_sound(true); hk.toggle_stream_sound(true);
hk.toggle_media_play_pause(false); hk.toggle_media_play_pause();
} }

View file

@ -12,7 +12,10 @@ pub trait MessageHandler { //the first one goes to
impl MessageHandler for StreamState { impl MessageHandler for StreamState {
fn handle_update(&mut self, update: StateUpdate, hotkey_handler: &Hotkeys) fn handle_update(&mut self, update: StateUpdate, hotkey_handler: &Hotkeys)
-> (Option<StateUpdate>, Option<Vec<StateUpdate>>) { -> (Option<StateUpdate>, Option<Vec<StateUpdate>>) {
self.update(update.clone());
if update != StateUpdate::UpdateClient{
self.update(update.clone());
}
if self.debug_mode { if self.debug_mode {
return (None, None) return (None, None)
@ -80,7 +83,7 @@ impl MessageHandler for StreamState {
}, },
StateUpdate::StreamSoundToggleOn(value) => {hotkey_handler.toggle_stream_sound(value); return (Some(update), None)}, StateUpdate::StreamSoundToggleOn(value) => {hotkey_handler.toggle_stream_sound(value); return (Some(update), None)},
StateUpdate::ToggleComputerSoundOn(value) => {hotkey_handler.toggle_computer_sound(value); return (Some(update), None)}, StateUpdate::ToggleComputerSoundOn(value) => {hotkey_handler.toggle_computer_sound(value); return (Some(update), None)},
StateUpdate::ComputerMediaDoPause(value) => {hotkey_handler.toggle_media_play_pause(value); return (Some(update), None)}, StateUpdate::ComputerMediaDoPause => {hotkey_handler.toggle_media_play_pause(); return (Some(update), None)},
StateUpdate::UpdateClient => {}, StateUpdate::UpdateClient => {},
StateUpdate::StreamRunning(_) => {}, StateUpdate::StreamRunning(_) => {},
//_ => {} //_ => {}

View file

@ -35,7 +35,8 @@ impl Socket {
let mut streams = thread_owned_streams.lock().unwrap(); let mut streams = thread_owned_streams.lock().unwrap();
streams.push(Arc::clone(&stream)); streams.push(Arc::clone(&stream));
//pass off a clone of the thread-passable pointer //pass off a clone of the thread-passable pointer
Socket::handle_client(stream.as_ref(), messenger_tx.clone(), thread_stop_flag.clone()); drop(streams);
Socket::handle_client(Arc::clone(&stream), messenger_tx.clone(), thread_stop_flag.clone());
} }
thread::sleep(Duration::from_millis(100)); thread::sleep(Duration::from_millis(100));
} }
@ -50,11 +51,11 @@ impl Socket {
} }
} }
pub fn handle_client(mut stream: &TcpStream, update_tx: Sender<String>, program_shutdown_flag: sync_flag::SyncFlagRx) { pub fn handle_client(stream: Arc<TcpStream>, update_tx: Sender<String>, program_shutdown_flag: sync_flag::SyncFlagRx) {
let mut buffer = [0; 1024]; let mut buffer = [0; 1024];
stream.set_read_timeout(Some(Duration::from_millis(100))).expect("Could not set a read timeout"); stream.set_read_timeout(Some(Duration::from_millis(100))).expect("Could not set a read timeout");
while program_shutdown_flag.get() { while program_shutdown_flag.get() {
match stream.read(&mut buffer) { match stream.as_ref().read(&mut buffer) {
Err(_) => {}, Err(_) => {},
Ok(read_size) => { Ok(read_size) => {
//Tcp is supposed to have a 0 byte read if closed by client //Tcp is supposed to have a 0 byte read if closed by client
@ -79,11 +80,16 @@ impl Socket {
} }
pub fn send(&self, message: String) { pub fn send(&self, message: String) {
let streams = self.socket_txs.lock().unwrap(); let mut streams = self.socket_txs.lock().unwrap();
for socket_tx in streams.iter(){ for i in 0..streams.len(){
let mut tx = socket_tx.as_ref(); let mut tx = streams.get(i).unwrap().as_ref();
tx.write(message.clone().as_bytes()).unwrap();
match tx.write(message.clone().as_bytes()) {
Err(_) => {streams.remove(i); continue;},
Ok(_) => {},
}
tx.flush().unwrap(); tx.flush().unwrap();
println!("sent");
} }
} }
} }

View file

@ -8,7 +8,7 @@ pub enum StateUpdate {
StreamRunning(bool), StreamRunning(bool),
StreamSoundToggleOn(bool), StreamSoundToggleOn(bool),
ToggleComputerSoundOn(bool), ToggleComputerSoundOn(bool),
ComputerMediaDoPause(bool), ComputerMediaDoPause,
ChangeSceneOnChangeSlide(bool), ChangeSceneOnChangeSlide(bool),
SceneIsAugmented(bool), SceneIsAugmented(bool),
TimerCanRun(bool), TimerCanRun(bool),
@ -66,7 +66,7 @@ impl StateUpdate {
//Extra Toggles //Extra Toggles
"Toggle_Computer_Volume" => {StateUpdate::ToggleComputerSoundOn(string_to_bool(incoming_json["data"].as_str().unwrap()))}, "Toggle_Computer_Volume" => {StateUpdate::ToggleComputerSoundOn(string_to_bool(incoming_json["data"].as_str().unwrap()))},
"Toggle_Stream_Volume" => {StateUpdate::StreamSoundToggleOn(string_to_bool(incoming_json["data"].as_str().unwrap()))}, "Toggle_Stream_Volume" => {StateUpdate::StreamSoundToggleOn(string_to_bool(incoming_json["data"].as_str().unwrap()))},
"Media_Pause_Play" => {StateUpdate::ComputerMediaDoPause(string_to_bool(incoming_json["data"].as_str().unwrap()))}, "Media_Pause_Play" => {StateUpdate::ComputerMediaDoPause},
"Timer_Text" => {StateUpdate::TimerText(incoming_json["data"].as_str().unwrap().to_string())} "Timer_Text" => {StateUpdate::TimerText(incoming_json["data"].as_str().unwrap().to_string())}
"all" => {StateUpdate::UpdateClient}, "all" => {StateUpdate::UpdateClient},
@ -107,8 +107,8 @@ impl StateUpdate {
("SubScene", scene.to_string())}, ("SubScene", scene.to_string())},
StateUpdate::Scene(scene) => { StateUpdate::Scene(scene) => {
("Scene", scene.to_string())}, ("Scene", scene.to_string())},
StateUpdate::ComputerMediaDoPause(is_true) => { StateUpdate::ComputerMediaDoPause => {
("Toggle_Computer_Volume", is_true.to_string())}, ("Toggle_Computer_Volume", "".to_string())},
StateUpdate::ChangeSlide(value) => { StateUpdate::ChangeSlide(value) => {
match value { match value {
SlideChange::Next => {("Next_Slide", "".to_string())}, SlideChange::Next => {("Next_Slide", "".to_string())},

View file

@ -69,9 +69,9 @@ impl StreamState {
StateUpdate::SceneIsAugmented(new_val) => { StateUpdate::SceneIsAugmented(new_val) => {
self.scene_is_augmented = new_val; self.scene_is_augmented = new_val;
self.change_scene(&Scenes::Augmented)}, self.change_scene(&Scenes::Augmented)},
StateUpdate::UpdateClient => todo!(), StateUpdate::ComputerMediaDoPause => {},
StateUpdate::ComputerMediaDoPause(do_pause) => {self.computer_sound_is_on = do_pause;}, StateUpdate::ChangeSlide(_value) => {panic!("Stream_states_class is not supposed to get this update type");},
StateUpdate::ChangeSlide(_value) => {panic!("Stream_states_class is not supposed to get this update type");}, StateUpdate::UpdateClient => {},
} }
} }

View file

@ -50,11 +50,7 @@ fn test_json_to_state_update() {
assert_eq!(StateUpdate::json_to_state_update(serde_json::from_str( assert_eq!(StateUpdate::json_to_state_update(serde_json::from_str(
"{\"type\": \"update\", \"update\": \"Media_Pause_Play\", \"data\": \"true\"}" "{\"type\": \"update\", \"update\": \"Media_Pause_Play\", \"data\": \"true\"}"
).unwrap()), StateUpdate::ComputerMediaDoPause(true)); ).unwrap()), StateUpdate::ComputerMediaDoPause);
assert_eq!(StateUpdate::json_to_state_update(serde_json::from_str(
"{\"type\": \"update\", \"update\": \"Media_Pause_Play\", \"data\": \"false\"}"
).unwrap()), StateUpdate::ComputerMediaDoPause(false));
assert_eq!(StateUpdate::json_to_state_update(serde_json::from_str( assert_eq!(StateUpdate::json_to_state_update(serde_json::from_str(
"{\"type\": \"update\", \"update\": \"SubScene\", \"data\": \"Camera_None\"}" "{\"type\": \"update\", \"update\": \"SubScene\", \"data\": \"Camera_None\"}"