John@72: local bsk=bsk John@72: local _G=_G John@72: local table=table John@72: local pairs=pairs John@72: local setmetatable=setmetatable John@72: local ipairs=ipairs John@72: local unpack=unpack John@72: local string=string John@72: local sformat=string.format John@72: local tostring=tostring John@72: local type=type John@72: local getn=getn John@72: John@72: local commlib = LibStub("AceComm-3.0") or _G.error("Couldn't load up AceComm") John@72: local s = LibStub("AceSerializer-3.0") or _G.error("Couldn't load up AceSerializer") John@72: John@72: setfenv(1,bsk) John@72: John@72: local function BuildPacket(handler,message) John@72: local p = {handler,message} John@72: local str = s:Serialize({handler,message}) John@72: print("sending",str) John@72: return p,str John@72: end John@72: John@72: local function SendMessage(str) John@72: --commlib:SendCommMessage("BSKADDON",str,"GUILD") John@72: commlib:SendCommMessage("BSKADDON",str,"RAID") John@72: end John@72: John@72: local function Send(handler,message) John@72: local p,str = BuildPacket(handler,message) John@72: SendMessage(str) John@72: end John@72: John@72: -- todo: ActivateList and AddReserve -> state John@72: Comm = John@72: { John@72: ["SS"] = function(self,packet,sender,isloop) John@72: print("isloop",isloop) John@72: if not isloop then DispatchState(packet) end John@72: end, John@72: ["SendStateChange"] = function(self,...) John@72: local p,str = BuildPacket("SS",{...}) John@72: DispatchState(p[2]) John@72: SendMessage(str) John@72: end, John@72: ["AR"] = function(self,packet,sender,isloop) John@72: if isloop then return end John@72: PersonList:AddReserve(packet) John@72: changeListener:DataEvent() John@72: end, John@72: ["AddReserve"] = function(self,packet) John@72: if changeListener then John@72: changeListener:DataEvent(change) John@72: end John@72: Send("AR",packet) John@72: end, John@72: ["SendChange"] = function(self,change) John@72: if changeListener then John@72: changeListener:DataEvent(change) John@72: end John@72: Send("CC",change) John@72: end, John@72: ["CC"] = function(self,change,sender,isloop) John@72: if isloop then return end John@72: ProcessChange(change) John@72: changeListener:DataEvent() John@72: end, John@72: ["Push"] = function(self) John@72: Send("PU",{db.profile.lists,db.profile.persons,db.profile.changes}) John@72: end, John@72: ["PU"] = function(self,packet,sender,isloop) John@72: if isloop then return end John@72: db.profile.lists,db.profile.persons,db.profile.changes = unpack(packet) John@72: CreateWorkingStateFromChanges(db.profile.changes) John@72: if changeListener then John@72: changeListener:DataEvent() John@72: end John@72: end, John@72: } John@72: John@72: local function OnCommReceived(prefix, message, distribution, sender) John@72: print("Received on", distribution) John@72: local success,packet = s:Deserialize(message) John@72: local isloop = _G.UnitName("player") == sender John@72: John@72: print("received",message) John@72: John@72: Comm[packet[1]](Comm,packet[2],sender,isloop) John@72: end John@72: John@72: function InitializeComm() John@72: commlib:RegisterComm("BSKADDON",OnCommReceived) John@72: end John@72: John@72: function DeinitializeComm() John@72: John@72: end