Files
@ 2113bc7bdbc3
Branch filter:
Location: CSY/reowolf/src/runtime2/tests/internet.rs - annotation
2113bc7bdbc3
2.2 KiB
application/rls-services+xml
WIP on implementation of TCP listener component
1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 7e5f19869dd2 1cc3bd69b119 1cc3bd69b119 7e5f19869dd2 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 7e5f19869dd2 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 7e5f19869dd2 1cc3bd69b119 1cc3bd69b119 d65eb4f44f1a 7e5f19869dd2 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 7e5f19869dd2 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 d65eb4f44f1a d65eb4f44f1a d65eb4f44f1a 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 7e5f19869dd2 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 1cc3bd69b119 | use super::*;
// silly test to make sure that the PDL will never be an issue when doing TCP
// stuff with the actual components
#[test]
fn test_stdlib_file() {
compile_and_create_component("
import std.internet as inet;
comp fake_listener_once(out<inet::TcpConnection> tx) {
channel cmd_tx -> cmd_rx;
channel data_tx -> data_rx;
new fake_socket(cmd_rx, data_tx);
sync put(tx, inet::TcpConnection{
tx: cmd_tx,
rx: data_rx,
});
}
comp fake_socket(in<inet::Cmd> cmds, out<u8[]> tx) {
auto to_send = {};
auto shutdown = false;
while (!shutdown) {
auto keep_going = true;
sync {
while (keep_going) {
auto cmd = get(cmds);
if (let inet::Cmd::Send(data) = cmd) {
to_send = data;
keep_going = false;
} else if (let inet::Cmd::Receive = cmd) {
put(tx, to_send);
} else if (let inet::Cmd::Finish = cmd) {
keep_going = false;
} else if (let inet::Cmd::Shutdown = cmd) {
keep_going = false;
shutdown = true;
}
}
}
}
}
comp fake_client(inet::TcpConnection conn) {
sync put(conn.tx, inet::Cmd::Send({1, 3, 3, 7}));
sync {
put(conn.tx, inet::Cmd::Receive);
auto val = get(conn.rx);
while (val[0] != 1 || val[1] != 3 || val[2] != 3 || val[3] != 7) {
print(\"this is going very wrong\");
}
put(conn.tx, inet::Cmd::Finish);
}
sync put(conn.tx, inet::Cmd::Shutdown);
}
comp constructor() {
channel conn_tx -> conn_rx;
new fake_listener_once(conn_tx);
// Same crap as before:
channel cmd_tx -> unused_cmd_rx;
channel unused_data_tx -> data_rx;
auto connection = inet::TcpConnection{ tx: cmd_tx, rx: data_rx };
sync {
connection = get(conn_rx);
}
new fake_client(connection);
}
", "constructor", no_args());
}
|