rust_rsm/rsm/xlog/
syslog.rs1#![allow(non_camel_case_types)]
2#![allow(non_snake_case)]
3#![allow(non_upper_case_globals)]
4#![allow(dead_code)]
5
6use super::*;
7use crate::common::{errcode};
8use std::net::{SocketAddr,UdpSocket,IpAddr};
9
10pub struct sys_log_client_t {
11 server_addr:SocketAddr,
12 self_addr:SocketAddr,
13 sock: UdpSocket,
14 seq:u64,
15 sent_msg:u64,
16 drop_msg:u64,
17}
18
19impl sys_log_client_t {
20 pub fn new(self_addr:&SocketAddr)->Result<Self,errcode::RESULT>{
21 let sck = match UdpSocket::bind(self_addr) {
22 Ok(s)=>s,
23 Err(_)=>return Err(errcode::ERROR_BIND_SOCKET),
24 };
25 let log= Self {
26 server_addr:SocketAddr::new(IpAddr::from([127,0,0,1]),SYSLOG_DEF_UDP_PORT),
27 self_addr:self_addr.clone(),
28 sock:sck,
29 seq:1,
30 sent_msg:0,
31 drop_msg:0,
32 };
33 return Ok(log)
34 }
35
36 pub fn sendto_server(&mut self,msg:&InnerLogMsg) {
37 let msg = LogFormat(msg,self.get_cur_msg_seq(),&self.self_addr);
38 match self.sock.send_to(msg.as_bytes(), self.server_addr) {
39 Ok(_)=>self.sent_msg+=1,
40 Err(_)=>self.drop_msg+=1,
41 }
42
43 }
44
45 pub fn send_encoded_msg(&mut self,encoded_msg:&String) {
46 match self.sock.send_to(encoded_msg.as_bytes(), self.server_addr) {
47 Ok(_)=>self.sent_msg+=1,
48 Err(_)=>self.drop_msg+=1,
49 }
50 }
51
52 fn get_cur_msg_seq(&mut self)->u64 {
53 let seq=self.seq;
54 self.seq+=1;
55 return seq
56 }
57
58 pub fn set_server_addr(&mut self,server_addr:&SocketAddr)->errcode::RESULT {
59 if server_addr.eq(&self.server_addr) {
60 return errcode::ERROR_ALREADY_EXIST
61 }
62
63 self.server_addr = server_addr.clone();
64
65 return errcode::RESULT_SUCCESS
66 }
67}
68
69