Mercurial > wow > breuesk
comparison Comm.lua @ 94:2058d86778b4
Corrections on the receiver end of an incremental update.
author | John@Yosemite-PC |
---|---|
date | Sun, 22 Apr 2012 23:13:43 -0400 |
parents | df94161e6d7c |
children | 082ff877c443 |
comparison
equal
deleted
inserted
replaced
93:df94161e6d7c | 94:2058d86778b4 |
---|---|
83 ["TS"] = function(self,packet,sender,isloop) | 83 ["TS"] = function(self,packet,sender,isloop) |
84 if isloop then return end | 84 if isloop then return end |
85 if masterLooterIsMe and admin then | 85 if masterLooterIsMe and admin then |
86 -- only non-admins will send this message, send them the present | 86 -- only non-admins will send this message, send them the present |
87 -- working state | 87 -- working state |
88 -- todo: if they send a timestamp that's somewhere along our | |
89 -- timeline, then just catch them up | |
90 --local dbPersons = {toons=PersonList.toons,time=PersonList.time} | |
91 --Send("CU",{dbPersons,LootLists.l,timestamp}) -- todo: send privately | |
92 | 88 |
93 local t = packet | 89 local t = packet |
94 local remoteBase = table.remove(t,1) | 90 local remoteBase = table.remove(t,1) |
95 | 91 |
96 -- if their base is older than ours, this is easy - send them our | 92 -- if their base is older than ours, this is easy - send them our |
143 local nc = getn(c) | 139 local nc = getn(c) |
144 | 140 |
145 if no == 0 then | 141 if no == 0 then |
146 db.profile.changes = c | 142 db.profile.changes = c |
147 else | 143 else |
148 while op <= no and cp <= nc do | 144 while op <= no or cp <= nc do -- lists are pre-sorted. insertion merge them |
149 if c[cp].time == old[op].time then | 145 if cp > nc then -- inelegant |
146 table.insert(new,old[op]) | |
147 op = op + 1 | |
148 elseif op > no then | |
149 table.insert(new,c[cp]) | |
150 cp = cp + 1 | |
151 elseif c[cp].time < old[op].time then | |
152 table.insert(new,c[cp]) | |
153 cp = cp + 1 | |
154 elseif c[cp].time > old[op].time then | |
155 table.insert(new,old[op]) | |
156 op = op + 1 | |
157 else | |
150 error("Bad update received from ",sender) | 158 error("Bad update received from ",sender) |
151 end | 159 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 end |
161 print("Updating changes - ",getn(new), "entries") | |
160 db.profile.changes = new | 162 db.profile.changes = new |
161 end | 163 end |
162 | 164 |
163 CreateWorkingStateFromChanges(db.profile.changes) | 165 CreateWorkingStateFromChanges(db.profile.changes) |
164 if changeListener then | 166 if changeListener then |