-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmsgcodes.txt
78 lines (64 loc) · 3.47 KB
/
msgcodes.txt
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
sig = signature(dest)
delta = delta(src, sig)
patch(dest, delta)
message format:
# is a delimeter
[messagecode][#][clientid][#][filename][#][data]
SERVERID : 'S0000'
Client DATABASE <fileid, server_m_time, client_m_time>
Server DATABASE <fileid, server_m_time, client_m_time>
timestamp = (server_m_time, client_m_time)
CREQ : 0001 : data : timestamp , both times are separated by #
SENDSIG : 0002 : data : signature
SENDDEL : 0003 : data : delta
REQSIG : 0004 : data : \0
REQSMT : 0005 : data : \0
SENDSMT : 0006 : data : server.server_m_time
SENDNOC : 0007 : data : \0
REQTOT : 0008 : data : \0
SENDDATA: 0009 : data : filedata
SERVSYNC: 0010 : data : \0
CONFLICT: 0011 : data : \0
Sync-ing Algorithm
-------------------------------------------------------------------------------------------------------------------
for each file
C : update client.client_m_time from stat
C : client sends CREQ packet to server
S : if not present request to send the total file
client sends the total file to server
else
if server.server_m_time == client.server_m_time // sent by client, client is synced with server but has new upates, need to be synced
if server.client_m_time == client.client_m_time (1)
NO CHANGE SENDNOC
else: (2)
if client.client_m_time > server.client_m_time // obviously
request client to give updates
[dest = server, src = client]
1. send a signature to client (server) SENDSIG
2. compute delta and send to server (client) SENDDEL
3. patch to the dest file (server)
update server.client_m_time
update server.server_m_time
else // only when parallel multiple access
CONFLICT
else: // server.server_m_time != client.server_m_time // client is not synced with server (for a specific client)
// implies some other client has updated this data in server
// obviously (server.server_m_time > client.server_m_time)
if client.client_m_time > server.client_m_time // present client has recent data
[dest = server, src = client]
1. send a signature to client (server) SENDSIG
2. compute delta and send to server (client) SENDDEL
3. patch to the dest file (server)
update server.server_m_time = getmtime(file)
4. send server.server_m_time to client(server) SENDSMT
5. update client.server_m_time (client)
else // present client has old data
[dest = client, src = server]
1. REQ client to send a signature (server) REQSIG
2. send a signature to server (client) SENDSIG
3. compute delta and send to client(server) SENDDEL
4. patch to the dest file (client)
update client.client_m_time
5. request server to send server.server_m_time REQSMT
6. send server.server_m_time (server) SENDSMT
7. update client.server_m_time (client)