Add events and refactor
All checks were successful
/ build-artifacts (push) Successful in 55s

Add event listener with JSON output (WIP)
Add notifier on movement events
Refactor Parameter and ParameterList (still shit)
This commit is contained in:
Tobias Reisinger 2024-03-05 03:52:30 +01:00
parent 2c0a8ab616
commit d8cdc2bb11
Signed by: serguzim
GPG key ID: 13AD60C237A28DFE
14 changed files with 338 additions and 186 deletions

View file

@ -1,8 +1,9 @@
use crate::utils::SendTextMessageTarget;
use telnet::Event::Data;
use telnet::Telnet;
use crate::models::EventType;
use crate::parameter::{Parameter, ParameterList};
use crate::parameter::{Parameter, parameters_to_string, ParameterList, parameter_to_string, parameter_list_to_string};
use crate::response::Response;
fn to_single_response(resp: Response) -> Response {
@ -48,7 +49,7 @@ fn send_command(connection: &mut Telnet, command: &str, skip_ok: bool) -> Result
read_response(connection, skip_ok, String::new())
}
fn read_response(connection: &mut Telnet, skip_ok: bool, mut buffer: String) -> Result<Response, String> {
pub fn read_response(connection: &mut Telnet, skip_ok: bool, mut buffer: String) -> Result<Response, String> {
let (response_str, buffer) = read_response_buffer(connection, &mut buffer)?;
match Response::try_from(response_str) {
@ -93,18 +94,22 @@ pub fn whoami(connection: &mut Telnet) -> Result<Response, String> {
pub fn clientmove(connection: &mut Telnet, cid: &i32, clid_list: Vec<&i32>) -> Result<Response, String> {
let clid_param_list = clid_list
.into_iter()
.map(|clid| Parameter::new("clid", &clid.to_string()))
.map(|clid| (String::from("clid"), clid.to_string()))
.collect::<Vec<Parameter>>();
let clid_str = Parameter::list_to_string_sep(clid_param_list, "|");
let clid_str = parameters_to_string(clid_param_list, "|");
send_command(connection, &format!("clientmove cid={} {}", cid, clid_str), false)
}
pub fn clientupdate(connection: &mut Telnet, parameters: ParameterList) -> Result<Response, String> {
let parameters_str = Parameter::list_to_string(parameters);
let parameters_str = parameter_list_to_string(parameters, " ");
send_command(connection, &format!("clientupdate {}", parameters_str), false)
}
pub fn sendtextmessage(connection: &mut Telnet, target: SendTextMessageTarget, msg: String) -> Result<Response, String> {
let msg = String::from(Parameter::new("msg", &msg));
let msg = parameter_to_string((String::from("msg"), msg));
send_command(connection, &format!("sendtextmessage {} {}", msg, String::from(target)), false)
}
pub fn clientnotifyregister(connection: &mut Telnet, schandlerid: u32, event: EventType) -> Result<Response, String> {
send_command(connection, &format!("clientnotifyregister schandlerid={} event={}", schandlerid, String::from(&event)), false)
}