/
schemas.go
117 lines (100 loc) · 2.18 KB
/
schemas.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
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
package channel
import (
"encoding/json"
"github.com/cyber-rhizome/p2p-channel/msglist"
)
/* constant */
const (
chatMESSAGE string = "chat"
syncMESSAGE string = "sync"
stateMESSAGE string = "state"
peerJOIN string = "join"
peerCONNECTED string = "connected"
peerLEAVE string = "leave"
addPEER string = "add"
unixMinute int64 = 60
)
///////////////////
/* channel level */
///////////////////
// one per channel, recore channel meta data
type channelData struct {
ChannelName string `storm:"id"`
ChannelType string `storm:"index"`
PeerList map[string]struct{}
}
// many chat to one user, recore one chat message
type chatConent string
// state: INPUTTING, INSERT, DELETE
// comes with sync, For rope structure
type docContent struct {
Action string
Position int
Length int
Edit string
}
////////////////////////////////////
/* communication between channels */
////////////////////////////////////
// data sent between users in the channel
// message types chatMESSAGE, syncMESSAGE, stateMESSAGE
type pubsubRawMessage struct {
MsgType string
Data json.RawMessage
}
type pubsubMessage struct {
MsgType string
Sender string
Data json.RawMessage
}
// sync every 5 minute, or when user log in, send my message latest id list
type syncRawMessage struct {
TargerID string
TargetName string
P2pAddrs []string
LastSyncTime int64
LatestMsgID int
}
type syncMessage struct {
SenderID string
TargerID string
TargetName string
P2pAddrs []string
LastSyncTime int64
LatestMsgID int
}
type syncRawState struct {
P2pAddrs []string
State string
}
type syncState struct {
SenderID string
P2pAddrs []string
State string
}
type chatRawMessage struct {
ID int
Content string
CreatedAt int64
}
type chatMessage struct {
ID int
AuthorID string
Content string
CreatedAt int64
}
///////////////////////////
/* sync between channels */
///////////////////////////
// ask for missing messages
type syncRequest struct {
ChannelName string
TargerID string
MissingMsgIDs []int
}
// response for asking
type syncResponse struct {
ChannelName string
TargerID string
MissingMsg msglist.Message
}