rust_rsm/rsm/xlog/
syslog.rs

1#![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