1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
pub mod loader;
use crate::message::common::Message;
use crate::services::certificate::CertificateService;
use crate::services::name::NameService;
use crate::transport::TransportService;
///
/// A data bus for modules
/// Allows exchanging data between modules and MilkyWay on a local machine
///
pub trait ModuleDataBus: Send + Sync{
///
/// Gets a transport service
///
/// returns: Box<dyn TransportService>: a boxed trait object of a TransportService
///
fn get_transport_service(&self) -> Box<dyn TransportService>;
///
/// Gets a name service
///
/// returns: Box<dyn NameService>: a boxed trait object of a NameService
///
fn get_name_service(&self) -> Box<dyn NameService>;
///
/// Gets a certificate service
///
/// returns: Box<dyn CertificateService>: a boxed trait object of a CertificateService
///
fn get_certificate_service(&self) -> Box<dyn CertificateService>;
}
///
/// A dynamically loadable module
///
pub trait MilkywayModule: Send + Sync{
///
/// Gets a unique ID of module
///
fn get_id(&self) -> u64;
///
/// Gets a supported CLI commands by a module
///
fn get_commands(&self) -> Vec<String>;
///
/// Called when module is loaded
///
/// # Arguments
/// * data_bus: Arc<Box<dyn ModuleDataBus>>: an implementation of a data bus
///
fn on_load(&mut self, data_bus: Box<dyn ModuleDataBus>);
///
/// Called when some CLI command is received.
///
/// # Arguments
/// * command: String: a command received from CLI
/// * arguments Vec<String>: arguments passed from CLI
///
/// # Command examples
/// Level 2 command
/// ```sh
/// mway certman/list
/// ```
/// Level 3 command
/// ```sh
/// mway certman/encryption/generate name="my_encryption_cert"
///```
fn on_cli_command(&self, command: Vec<String>, arguments: Vec<String>);
///
/// Handles message on milkyway server
///
/// # Arguments
/// * packet: &Message: a message received
///
fn on_server_receive(&self, packet: &Message);
///
/// Handles message on milkyway client
///
/// # Arguments
/// * packet: &Message: a message received
///
fn on_client_receive(&self, packet: &Message);
///
/// Handles messages received by CLI
///
/// # Arguments
/// * packet: &Message: a message received
///
fn on_cli_receive(&self, packet: &Message);
}