I wrote addon for my raid to distribute loot by our DKP system. It works by this algoritm:
1. Announce in RAID addon channel item (serialized array with current members dkp and min/max bids).
2. After someone makes bid client send message in WHYSPER addon channel to master looter.
3. ML checks if bid is correct and sending it to RAID addon channel (just name of item and bid).
By this way of sending messages AceComms begins to delay them in 2-3 announces (with 5-6 announced for auction items) in 25ppl raid.
I tried to send messages in RAID addon channel through buffer. I gather all updates by item for 5 seconds and then only send all bids again (reduced amount of messages in 3-4 times). But it still works too long (2-3 minutes for some raid members after bid update).
I see method to reduce traffic by sending only id of item and uniq id (2 numbers) and writing own Serialize and Deserialize functions for my sittuation, but it will reduce traffic only 1.5-2 times.
Another way is registering for each item another channel. It will reduce traffic in main channel, but I'm not sure about it...
And last - third method is creating "mirror" for example people with assits will recieve info from me by WHYSPER messages and then send them to others.
I'm not sure what method can help me and if someone solved such problem of writing real time addon, it will help me a lot.
And last one method to stop using AceComm library and start spaming under threat of disconnection.
I don't understand. What is the question? AceSerializer-3.0 already does the serializing / deserializing for you. Why reinvent the wheel? AceComm-3.0 uses ChatThrottleLib in order to prevent disconnection. Plus AceComm breaks up, and reassembles, long messages automatically.
You could also use LibCompress to further shrink your messages. I use all of them in LibGuildBankComm-1.0 ... so again, what is your question? Does it work? Of course it does.
What I don't know if you are intentionally misspelling WHISPER. There is no WHYSPER chat channel.
The problem is in low speed working of this system. By this method I have about 20 messages in 2 minutes. And all this system with AceSerializer+AceComm works too long (it works, but things, that should be done in 1 minute takes 7-8). And this addon should work in real time, because it's goal is reducing time of loot distributing. And I need to reduce traffic to speed it up or something else. And it's nice to understand what to do for this, making many channels isn't good method I think. Reducing traffic by reducing amount of information to send is good, and I think I should look through ChatTrottleLib to understand how it slows message sending...
PS. And yes, some problems with spelling, not native language.
Break it down into two addons. The first one only concerns itself with the player's data. Have the player name and DKP in one array. Adjust the player's DKP as points are earned and spent. Do not worry about any other players.
The second addon is the master DKP addon. As RAID_ROSTER_UPDATE and PARTY_MEMBERS_CHANGED (if you use DKP for parties) fire, have the master send a request to the players who have joined the group. The first addon WHISPERS the master with the player's name and current DKP.
The master addon also needs to check for the LOOT events, and when epics (don't bother checking for blues or greens) drop, and the master wants bids, put the item into the RAID WARNING channel. You do not need the addon channel, just the RW chat channel.
The player enters his bid in the player addon, which is WHISPERed to the master. Compare values and award the loot accordingly. Then the master sends an UPDATE via WHISPER to the winning player, and his local addon updates his DKP value.
Each player would require the player addon, but while everybody could use the master addon, only the master looter needs it installed.
I might have missed some steps, but you get the idea, hopefully. You do not need to be sending all the players' names, and all their DKP all the time. Only send what you require when you require the data.
When the master addon is doing its comparing of bids, use OnUpdate to create a null loop of say, 10 seconds. That means all bids must be sent within 10 seconds. Keeps things moving quickly. You could do 5, 15, 20, whatever you like, but you aren't doing anything other than killing time, allowing players to place their bids.
Myrrodin is right it is better to have a master/slave addon setup with the master being run by only 1 member usually the master looter. Also not sure why you need to send so much over the comms channel. The way I do it in my addon I only send the members and dkp for those that are eligible for the current item not all 25. Just to be clear you also only need to send it once through the raid channel (not once for each member) which I assume you aren't doing:)
Mine raid isn't so big (only 1-2 members on replacement). In this moment I use system with 2 addons. Giving only 20-30 seconds for bid is too small amount, we use almoust "usual" dkp system and people won't understand me if I'll do it.
In this moment I working on redesigning message format between addons - main idea to block repeatable information to reduce traffic to 800CPS (ChatThrottleLib), and seems that it should work, because lenght of messages reduced in 5-6 times after own serialize function for my goals.
You are missing the point about AceComm. It already has, and uses, ChatThrottleLib. What CTL does not do, but AceComm does, is break up messages greater than 254 bytes and reassembles them. So if, even after optimizing for smaller messages, you still exceed 254 bytes, you must use AceComm.
Going to test new system in raid at 8th January, and then will post working code with new problems (hope that they will disapear ^^).
PS. I send messages through AceComm, but now I decided to work with 2 channels - one for bids, another for synhronization log/adjustments information between me and second RL + version check and other mix things.
2 Myrroddin. Mayby it's language barrier, I tried to say, that before writing first post I didn't care for traffic and it was realy surprise for me, that AceComm use ChatThrottleLib and there are so small upper limit for speed. Now I udnerstand where is problem and working on reducing output traffic to that safe maximum.
Main problem for me was - Encode+Decode functions for safe sending message through addon channel. It takes me ~3 hours to find why game freeze at receiving some compressed messages.
As the result maximum length of message is ~450 at announce auctions, then messages have length not more then 200. And 500 if user request full item update (if he was reloging or something and wants to take part in auctions).
Now I have only one problem - when I create window using AceGUI, sometimes frame is not clickable (user see there widgets, but can't click them). But I think before crying that I can't solve it I need to try to use google and forums to find solution for this problem ^^
Thanks a lot 2myrroddin for help.
Rollback Post to RevisionRollBack
To post a comment, please login or register a new account.
I wrote addon for my raid to distribute loot by our DKP system. It works by this algoritm:
1. Announce in RAID addon channel item (serialized array with current members dkp and min/max bids).
2. After someone makes bid client send message in WHYSPER addon channel to master looter.
3. ML checks if bid is correct and sending it to RAID addon channel (just name of item and bid).
By this way of sending messages AceComms begins to delay them in 2-3 announces (with 5-6 announced for auction items) in 25ppl raid.
I tried to send messages in RAID addon channel through buffer. I gather all updates by item for 5 seconds and then only send all bids again (reduced amount of messages in 3-4 times). But it still works too long (2-3 minutes for some raid members after bid update).
I see method to reduce traffic by sending only id of item and uniq id (2 numbers) and writing own Serialize and Deserialize functions for my sittuation, but it will reduce traffic only 1.5-2 times.
Another way is registering for each item another channel. It will reduce traffic in main channel, but I'm not sure about it...
And last - third method is creating "mirror" for example people with assits will recieve info from me by WHYSPER messages and then send them to others.
I'm not sure what method can help me and if someone solved such problem of writing real time addon, it will help me a lot.
And last one method to stop using AceComm library and start spaming under threat of disconnection.
You could also use LibCompress to further shrink your messages. I use all of them in LibGuildBankComm-1.0 ... so again, what is your question? Does it work? Of course it does.
What I don't know if you are intentionally misspelling WHISPER. There is no WHYSPER chat channel.
PS. And yes, some problems with spelling, not native language.
The second addon is the master DKP addon. As RAID_ROSTER_UPDATE and PARTY_MEMBERS_CHANGED (if you use DKP for parties) fire, have the master send a request to the players who have joined the group. The first addon WHISPERS the master with the player's name and current DKP.
The master addon also needs to check for the LOOT events, and when epics (don't bother checking for blues or greens) drop, and the master wants bids, put the item into the RAID WARNING channel. You do not need the addon channel, just the RW chat channel.
The player enters his bid in the player addon, which is WHISPERed to the master. Compare values and award the loot accordingly. Then the master sends an UPDATE via WHISPER to the winning player, and his local addon updates his DKP value.
Each player would require the player addon, but while everybody could use the master addon, only the master looter needs it installed.
I might have missed some steps, but you get the idea, hopefully. You do not need to be sending all the players' names, and all their DKP all the time. Only send what you require when you require the data.
In this moment I working on redesigning message format between addons - main idea to block repeatable information to reduce traffic to 800CPS (ChatThrottleLib), and seems that it should work, because lenght of messages reduced in 5-6 times after own serialize function for my goals.
m9ist, could you post a link to your code (using paste.wowace.com for example) ?
PS. I send messages through AceComm, but now I decided to work with 2 channels - one for bids, another for synhronization log/adjustments information between me and second RL + version check and other mix things.
2 Myrroddin. Mayby it's language barrier, I tried to say, that before writing first post I didn't care for traffic and it was realy surprise for me, that AceComm use ChatThrottleLib and there are so small upper limit for speed. Now I udnerstand where is problem and working on reducing output traffic to that safe maximum.
main addon admin addon
How message looks like:
Main problem for me was - Encode+Decode functions for safe sending message through addon channel. It takes me ~3 hours to find why game freeze at receiving some compressed messages.
As the result maximum length of message is ~450 at announce auctions, then messages have length not more then 200. And 500 if user request full item update (if he was reloging or something and wants to take part in auctions).
Now I have only one problem - when I create window using AceGUI, sometimes frame is not clickable (user see there widgets, but can't click them). But I think before crying that I can't solve it I need to try to use google and forums to find solution for this problem ^^
Thanks a lot 2myrroddin for help.