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
use std::time::Duration;
use rotor::Scope;
use rotor_stream::StreamSocket;
use error::Error;
use serialization::{MessageReader, MessageWriter, ReaderOptions};
pub enum Action<E: Endpoint> {
Idle(E),
Recv(E),
Flush(E),
Sleep(E, Duration),
Close,
}
#[derive(Debug)]
pub enum ConnectionState {
Idle,
Receiving,
Sending,
Sleeping,
}
pub trait Endpoint: Sized {
type Context;
type Socket: StreamSocket;
type Seed;
fn create(seed: Self::Seed,
sock: &mut Self::Socket,
scope: &mut Scope<Self::Context>)
-> Action<Self>;
fn message_received(self,
message: &MessageReader,
output: MessageWriter,
scope: &mut Scope<Self::Context>)
-> Action<Self>;
fn message_flushed(self,
output: MessageWriter,
scope: &mut Scope<Self::Context>)
-> Action<Self>;
fn reader_options(&self, _scope: &mut Scope<Self::Context>) -> ReaderOptions {
ReaderOptions::new()
}
fn idle_timeout(&self, _scope: &mut Scope<Self::Context>) -> Duration {
Duration::from_secs(120)
}
fn recv_timeout(&self, scope: &mut Scope<Self::Context>) -> Duration;
fn send_timeout(&self, scope: &mut Scope<Self::Context>) -> Duration;
fn timeout(self,
state: ConnectionState,
output: MessageWriter,
scope: &mut Scope<Self::Context>)
-> Action<Self>;
fn wakeup(&self, scope: &mut Scope<Self::Context>) -> Action<Self>;
fn exception(self, err: Error, scope: &mut Scope<Self::Context>);
}