I'm trying to implement a simple server to obtain and save automatically some informations.
When I use Telnet to connect to the server, I get this error from WS:
WS Error <Parse(Token)>: Invalid byte where token is required.
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
hi
HTTP/1.1 500 Internal Server Error
Unable to parse HTTP: Invalid byte where token is required.Connection closed by foreign host.
extern crate argparse;
extern crate env_logger;
#[macro_use] extern crate log;
extern crate ws;
use argparse::{ArgumentParser, Store, StoreTrue};
use std::cell::Cell;
use std::rc::Rc;
use std::thread;
use ws::{CloseCode, connect, Error, Handshake, Handler, listen, Message, Result, Sender};
fn main() {
// Initialize the environment logger
env_logger::init().unwrap();
// Ip field; default is localhost
let mut ip : String = "127.0.0.1".to_string();
// Port field; default is 8888
let mut port : u16 = 8888;
// Verbose mod for logs
let mut verbose : bool = false;
// Parse arguments
{
let mut arguments_parser = ArgumentParser::new();
arguments_parser.set_description("Carolina reaper: The Hot-Pepper framework server.");
arguments_parser.refer(&mut ip)
.add_option(&["--ip"], Store, "IP to launch the server");
arguments_parser.refer(&mut port)
.add_option(&["--port"], Store, "Port to listen");
arguments_parser.refer(&mut verbose)
.add_option(&["-v", "--verbose"], StoreTrue, "Be verbose");
arguments_parser.parse_args_or_exit();
}
debug!("Initialize server with ip {} on port {}", ip, port);
struct Server {
out: Sender,
}
impl Handler for Server {
fn on_open(&mut self, _: Handshake) -> Result<()> {
println!("Open new connection!");
self.out.send("Hello_World!")
}
fn on_message(&mut self, msg: Message) -> Result<()> {
self.out.send(msg)
}
fn on_error(&mut self, err: Error) {
println!("The server encountered an error: {:?}", err);
}
}
let server = thread::spawn(move || {
listen("127.0.0.1:8888", |out| {
Server { out: out }
}).unwrap()
});
let _ = server.join();
}