2016-08-17 16:39:05 +08:00
|
|
|
#![no_std]
|
|
|
|
|
|
|
|
#[macro_use]
|
|
|
|
extern crate std_artiq as std;
|
|
|
|
|
|
|
|
use std::prelude::v1::*;
|
2016-08-30 19:20:04 +08:00
|
|
|
|
2016-09-07 00:42:13 +08:00
|
|
|
pub mod io;
|
|
|
|
|
|
|
|
extern {
|
|
|
|
fn network_init();
|
|
|
|
fn lwip_service();
|
|
|
|
}
|
|
|
|
|
2016-09-20 22:03:31 +08:00
|
|
|
fn timer(waiter: io::Waiter) {
|
2016-09-07 00:42:13 +08:00
|
|
|
loop {
|
2016-09-07 06:52:16 +08:00
|
|
|
println!("tick");
|
|
|
|
waiter.sleep(std::time::Duration::from_millis(1000)).unwrap();
|
2016-09-07 00:42:13 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-09-20 22:03:31 +08:00
|
|
|
fn echo(waiter: io::Waiter) {
|
|
|
|
let addr = io::SocketAddr::new(io::IP_ANY, 1234);
|
|
|
|
let listener = io::TcpListener::bind(waiter, addr).unwrap();
|
2016-09-07 00:42:13 +08:00
|
|
|
loop {
|
2016-09-20 22:03:31 +08:00
|
|
|
let (mut stream, _addr) = listener.accept().unwrap();
|
|
|
|
loop {
|
|
|
|
let mut buf = [0];
|
|
|
|
stream.read(&mut buf).unwrap();
|
|
|
|
stream.write(&buf).unwrap();
|
|
|
|
}
|
2016-09-07 00:42:13 +08:00
|
|
|
}
|
|
|
|
}
|
2016-08-17 16:39:05 +08:00
|
|
|
|
|
|
|
#[no_mangle]
|
2016-09-07 00:42:13 +08:00
|
|
|
pub unsafe extern fn rust_main() {
|
|
|
|
println!("Accepting network sessions in Rust.");
|
|
|
|
network_init();
|
|
|
|
|
2016-09-07 06:52:16 +08:00
|
|
|
let mut scheduler = io::Scheduler::new();
|
|
|
|
scheduler.spawn(4096, timer);
|
|
|
|
scheduler.spawn(4096, echo);
|
2016-09-07 00:42:13 +08:00
|
|
|
loop {
|
|
|
|
lwip_service();
|
2016-09-07 06:52:16 +08:00
|
|
|
scheduler.run()
|
2016-09-07 00:42:13 +08:00
|
|
|
}
|
2016-08-17 16:39:05 +08:00
|
|
|
}
|