use crate::syscall;
use crate::service::service_request::ServiceRequestData;
use crate::service::service_reply::ServiceReplyData;
use crate::error_kind::ErrorKind;
pub fn create_server(server_name: &str) {
syscall::syscall_create_server(server_name);
}
pub fn receive_service_request<T>(server_name: &str) -> Result<(u64, u64, ServiceRequestData<T>), ErrorKind> {
match syscall::syscall_receive_service_request(server_name) {
Ok((request_client_thread_id, request_message_type, request_message_ptr, request_message_size)) => {
Ok((request_client_thread_id, request_message_type, ServiceRequestData::new(request_message_ptr as *const T, request_message_size)))
},
Err(e) => Err(e.into()),
}
}
pub fn reply_to_service_request<T>(server_name: &str, request_client_thread_id: u64, reply_data: &ServiceReplyData<T>) -> Result<(), ErrorKind> {
let reply_message_ptr = reply_data.get_reply_message_ptr();
let reply_message_size = reply_data.get_reply_message_size();
let reply_message_error = reply_data.get_reply_message_error().unwrap_or(0);
match syscall::syscall_reply_to_service_request(server_name, request_client_thread_id, reply_message_ptr as *const u8, reply_message_size, reply_message_error) {
Ok(_) => Ok(()),
Err(_) => Err(ErrorKind::Other.into()),
}
}