Initial working version

This commit is contained in:
Lukas Bachschwell 2020-01-01 21:36:10 +01:00
commit f344cf83d9
Signed by: lbsadmin
GPG Key ID: CCC6AA87CC8DF425
13 changed files with 380 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
/target
**/*.rs.bk

6
Cargo.lock generated Normal file
View File

@ -0,0 +1,6 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
[[package]]
name = "chorus-client"
version = "0.1.0"

9
Cargo.toml Normal file
View File

@ -0,0 +1,9 @@
[package]
name = "chorus-client"
version = "0.1.0"
authors = ["Lukas Bachschwell <lukas@lbsfilm.at>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

23
index.html Normal file
View File

@ -0,0 +1,23 @@
<!DOCTYPE html>
<html>
<body onload="init()">
<p><span id="res"></span></p>
<script>
function init() {
setInterval(() => {
loadDoc("racestate.txt");
}, 250);
}
function loadDoc(url) {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("res").innerHTML = this.responseText;
}
};
xhttp.open("GET", url, true);
xhttp.send();
}
</script>
</body>
</html>

1
racestate.txt Normal file
View File

@ -0,0 +1 @@
Race inactive

1
rx1.txt Normal file
View File

@ -0,0 +1 @@
00

1
rx2.txt Normal file
View File

@ -0,0 +1 @@
00

1
rx3.txt Normal file
View File

@ -0,0 +1 @@
00

64
src/main.rs Normal file
View File

@ -0,0 +1,64 @@
use std::io::Write;
use std::net;
fn listen(socket: &net::UdpSocket) {
let mut buf: [u8; 20] = [0; 20];
let number_of_bytes: usize = 0;
let mut result: Vec<u8> = Vec::new();
match socket.recv_from(&mut buf) {
Ok((number_of_bytes, _)) => {
result = Vec::from(&buf[0..number_of_bytes]);
}
Err(fail) => println!("failed listening {:?}", fail),
}
let display_result = result.clone();
let result_str = String::from_utf8(display_result).unwrap();
println!("received message: {:?}", result_str);
if result_str.contains("S0R1") {
write_file("Race active", "racestate.txt");
write_file("00", "rx1.txt");
write_file("00", "rx2.txt");
write_file("00", "rx3.txt");
}
if result_str.contains("S0R0") {
write_file("Race inactive", "racestate.txt");
}
if result_str.contains("S0L") {
// zb sS1L0000000DAF
write_file(&result_str[3..5], "rx1.txt");
}
if result_str.contains("S1L") {
write_file(&result_str[3..5], "rx2.txt");
}
if result_str.contains("S2L") {
write_file(&result_str[3..5], "rx3.txt");
}
}
fn write_file(text: &str, filename: &str) {
let mut file = std::fs::File::create(filename).expect("create failed");
file.write_all(text.as_bytes()).expect("write failed");
//println!("data written to file");
}
fn main() {
write_file("Race inactive", "racestate.txt");
write_file("00", "rx1.txt");
write_file("00", "rx2.txt");
write_file("00", "rx3.txt");
let socket = net::UdpSocket::bind("0.0.0.0:0").expect("failed to bind host socket"); // local bind port
let msg = String::from("ok").into_bytes();
socket
.send_to(&msg, "192.168.0.141:9000")
.expect("cannot send");
loop {
listen(&socket); // this call is blockig
}
}

68
text1.lua Normal file
View File

@ -0,0 +1,68 @@
function script_description()
return "This script lets you select a text source to force it to reread files every frame instead of once per second."
end
obs = obslua
source_name = nil
local open = io.open
local function read_file(path)
local file = open(path, "rb") -- r read mode and b binary mode
if not file then return nil end
local content = file:read "*a" -- *a or *all reads the whole file
file:close()
return content
end
function script_update(settings)
source_name = obs.obs_data_get_string(settings, "source")
filepath = obs.obs_data_get_string(settings, "filepath")
local fileContent = read_file("/Users/LB/Desktop/z_Projects/chorus-client/racestate.txt");
set_text(fileContent)
end
function script_properties()
local props = obs.obs_properties_create()
local p = obs.obs_properties_add_list(props, "source", "Text Source", obs.OBS_COMBO_TYPE_EDITABLE, obs.OBS_COMBO_FORMAT_STRING)
local p2 = obs.obs_properties_add_path(props, "filepath", "File", obs.OBS_PATH_FILE, nil, nil)
local sources = obs.obs_enum_sources()
if sources ~= nil then
for _, source in ipairs(sources) do
source_id = obs.obs_source_get_id(source)
if source_id == "text_gdiplus" or source_id == "text_ft2_source" or source_id == "text_pango_source" then
local name = obs.obs_source_get_name(source)
obs.obs_property_list_add_string(p, name, name)
end
end
end
obs.source_list_release(sources)
return props
end
function set_text(text)
local source = obs.obs_get_source_by_name(source_name)
if source ~= nil then
local settings = obs.obs_data_create()
obs.obs_data_set_string(settings, "text", text)
obs.obs_source_update(source, settings)
obs.obs_data_release(settings)
obs.obs_source_release(source)
end
end
function script_tick(seconds)
if source_name == nil then return end
local fileContent = read_file(filepath);
set_text(fileContent)
end

68
text2.lua Normal file
View File

@ -0,0 +1,68 @@
function script_description()
return "This script lets you select a text source to force it to reread files every frame instead of once per second."
end
obs = obslua
source_name = nil
local open = io.open
local function read_file(path)
local file = open(path, "rb") -- r read mode and b binary mode
if not file then return nil end
local content = file:read "*a" -- *a or *all reads the whole file
file:close()
return content
end
function script_update(settings)
source_name = obs.obs_data_get_string(settings, "source")
filepath = obs.obs_data_get_string(settings, "filepath")
local fileContent = read_file("/Users/LB/Desktop/z_Projects/chorus-client/racestate.txt");
set_text(fileContent)
end
function script_properties()
local props = obs.obs_properties_create()
local p = obs.obs_properties_add_list(props, "source", "Text Source", obs.OBS_COMBO_TYPE_EDITABLE, obs.OBS_COMBO_FORMAT_STRING)
local p2 = obs.obs_properties_add_path(props, "filepath", "File", obs.OBS_PATH_FILE, nil, nil)
local sources = obs.obs_enum_sources()
if sources ~= nil then
for _, source in ipairs(sources) do
source_id = obs.obs_source_get_id(source)
if source_id == "text_gdiplus" or source_id == "text_ft2_source" or source_id == "text_pango_source" then
local name = obs.obs_source_get_name(source)
obs.obs_property_list_add_string(p, name, name)
end
end
end
obs.source_list_release(sources)
return props
end
function set_text(text)
local source = obs.obs_get_source_by_name(source_name)
if source ~= nil then
local settings = obs.obs_data_create()
obs.obs_data_set_string(settings, "text", text)
obs.obs_source_update(source, settings)
obs.obs_data_release(settings)
obs.obs_source_release(source)
end
end
function script_tick(seconds)
if source_name == nil then return end
local fileContent = read_file(filepath);
set_text(fileContent)
end

68
text3.lua Normal file
View File

@ -0,0 +1,68 @@
function script_description()
return "This script lets you select a text source to force it to reread files every frame instead of once per second."
end
obs = obslua
source_name = nil
local open = io.open
local function read_file(path)
local file = open(path, "rb") -- r read mode and b binary mode
if not file then return nil end
local content = file:read "*a" -- *a or *all reads the whole file
file:close()
return content
end
function script_update(settings)
source_name = obs.obs_data_get_string(settings, "source")
filepath = obs.obs_data_get_string(settings, "filepath")
local fileContent = read_file("/Users/LB/Desktop/z_Projects/chorus-client/racestate.txt");
set_text(fileContent)
end
function script_properties()
local props = obs.obs_properties_create()
local p = obs.obs_properties_add_list(props, "source", "Text Source", obs.OBS_COMBO_TYPE_EDITABLE, obs.OBS_COMBO_FORMAT_STRING)
local p2 = obs.obs_properties_add_path(props, "filepath", "File", obs.OBS_PATH_FILE, nil, nil)
local sources = obs.obs_enum_sources()
if sources ~= nil then
for _, source in ipairs(sources) do
source_id = obs.obs_source_get_id(source)
if source_id == "text_gdiplus" or source_id == "text_ft2_source" or source_id == "text_pango_source" then
local name = obs.obs_source_get_name(source)
obs.obs_property_list_add_string(p, name, name)
end
end
end
obs.source_list_release(sources)
return props
end
function set_text(text)
local source = obs.obs_get_source_by_name(source_name)
if source ~= nil then
local settings = obs.obs_data_create()
obs.obs_data_set_string(settings, "text", text)
obs.obs_source_update(source, settings)
obs.obs_data_release(settings)
obs.obs_source_release(source)
end
end
function script_tick(seconds)
if source_name == nil then return end
local fileContent = read_file(filepath);
set_text(fileContent)
end

68
text4.lua Normal file
View File

@ -0,0 +1,68 @@
function script_description()
return "This script lets you select a text source to force it to reread files every frame instead of once per second."
end
obs = obslua
source_name = nil
local open = io.open
local function read_file(path)
local file = open(path, "rb") -- r read mode and b binary mode
if not file then return nil end
local content = file:read "*a" -- *a or *all reads the whole file
file:close()
return content
end
function script_update(settings)
source_name = obs.obs_data_get_string(settings, "source")
filepath = obs.obs_data_get_string(settings, "filepath")
local fileContent = read_file("/Users/LB/Desktop/z_Projects/chorus-client/racestate.txt");
set_text(fileContent)
end
function script_properties()
local props = obs.obs_properties_create()
local p = obs.obs_properties_add_list(props, "source", "Text Source", obs.OBS_COMBO_TYPE_EDITABLE, obs.OBS_COMBO_FORMAT_STRING)
local p2 = obs.obs_properties_add_path(props, "filepath", "File", obs.OBS_PATH_FILE, nil, nil)
local sources = obs.obs_enum_sources()
if sources ~= nil then
for _, source in ipairs(sources) do
source_id = obs.obs_source_get_id(source)
if source_id == "text_gdiplus" or source_id == "text_ft2_source" or source_id == "text_pango_source" then
local name = obs.obs_source_get_name(source)
obs.obs_property_list_add_string(p, name, name)
end
end
end
obs.source_list_release(sources)
return props
end
function set_text(text)
local source = obs.obs_get_source_by_name(source_name)
if source ~= nil then
local settings = obs.obs_data_create()
obs.obs_data_set_string(settings, "text", text)
obs.obs_source_update(source, settings)
obs.obs_data_release(settings)
obs.obs_source_release(source)
end
end
function script_tick(seconds)
if source_name == nil then return end
local fileContent = read_file(filepath);
set_text(fileContent)
end