Mercurial > wow > breuesk
comparison Comm.lua @ 93:df94161e6d7c
Working incremental updates
author | John@Yosemite-PC |
---|---|
date | Sun, 22 Apr 2012 17:12:39 -0400 |
parents | a227f3b61cda |
children | 2058d86778b4 |
comparison
equal
deleted
inserted
replaced
92:a227f3b61cda | 93:df94161e6d7c |
---|---|
116 end | 116 end |
117 while j<n and t[j] <= v.time do j = j+1 end -- advance the foreign pointer past our current entry | 117 while j<n and t[j] <= v.time do j = j+1 end -- advance the foreign pointer past our current entry |
118 end -- j>=n ? add because the remote hit end of road. lt? add because it's a missing stamp | 118 end -- j>=n ? add because the remote hit end of road. lt? add because it's a missing stamp |
119 print("Received request at timebase",remoteBase,"and returning:") | 119 print("Received request at timebase",remoteBase,"and returning:") |
120 PrintTable(o) | 120 PrintTable(o) |
121 if getn(o) > 0 then | |
122 Send("CU",o) -- todo: send privately to the requster | |
123 end | |
121 else | 124 else |
122 print("Received request at differing timebase",remoteBase,db.profile.time) | 125 print("Received request at differing timebase",remoteBase,db.profile.time," ... pushing") |
126 self:Push() -- todo: send privately to requester | |
123 end | 127 end |
124 end | 128 end |
125 end, | 129 end, |
126 | 130 |
127 ["CU"] = function(self,packet,sender,isloop) -- blindly trust an admin loot master | 131 ["CU"] = function(self,packet,sender,isloop) -- blindly trust an admin loot master |
128 if isloop then return end | 132 if isloop then return end |
129 print("CU") | 133 |
130 db.profile.persons,db.profile.lists,db.profile.time = unpack(packet) | 134 local c = packet |
131 db.profile.changes = {} | 135 local old = db.profile.changes |
136 | |
137 local new = {} | |
138 | |
139 local op = 1 | |
140 local cp = 1 | |
141 | |
142 local no = getn(old) | |
143 local nc = getn(c) | |
144 | |
145 if no == 0 then | |
146 db.profile.changes = c | |
147 else | |
148 while op <= no and cp <= nc do | |
149 if c[cp].time == old[op].time then | |
150 error("Bad update received from ",sender) | |
151 end | |
152 if c[cp].time < old[op].time then | |
153 table.insert(new,c[cp]) | |
154 cp = cp + 1 | |
155 else | |
156 table.inert(new,old[cp]) | |
157 op = op + 1 | |
158 end | |
159 end | |
160 db.profile.changes = new | |
161 end | |
162 | |
132 CreateWorkingStateFromChanges(db.profile.changes) | 163 CreateWorkingStateFromChanges(db.profile.changes) |
133 if changeListener then | 164 if changeListener then |
134 changeListener:DataEvent() | 165 changeListener:DataEvent() |
135 end | 166 end |
136 end, | 167 end, |