-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathserver.go
65 lines (48 loc) · 955 Bytes
/
server.go
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
package id
import (
"github.com/emersion/go-imap/server"
)
type Conn interface {
ID() ID
setID(id ID)
}
type conn struct {
server.Conn
id ID
}
func (conn *conn) ID() ID {
return conn.id
}
func (conn *conn) setID(id ID) {
conn.id = id
}
type Handler struct {
Command
ext *extension
}
func (hdlr *Handler) Handle(conn server.Conn) error {
if conn, ok := conn.(Conn); ok {
conn.setID(hdlr.Command.ID)
}
return conn.WriteResp(&Response{hdlr.ext.serverID})
}
type extension struct {
serverID ID
}
func (ext *extension) Capabilities(c server.Conn) []string {
return []string{Capability}
}
func (ext *extension) Command(name string) server.HandlerFactory {
if name != commandName {
return nil
}
return func() server.Handler {
return &Handler{ext: ext}
}
}
func (ext *extension) NewConn(c server.Conn) server.Conn {
return &conn{Conn: c}
}
func NewExtension(serverID ID) server.Extension {
return &extension{serverID}
}