Question for the DragonSnot crew. Have you experimented with using flick() to handle the flow rather than rapidly updating the icon state? The dissadvantage is that you might have to fudge the timing, since you won't know exactly when the flick will finish from the user's point of view (and it may even be very slightly different to different people).
The advantage is that the flow would be driven on the client-side--avoiding a big stream of rapid icon state changes. I could be wrong, but I think this could noticably improve the responsiveness of the game.
I haven't thought about the specifics too carefully, so perhaps you have already discovered the flaw in this approach. Roughly speaking, I think you would start the flow flick(), set the icon_state to "full", and sleep until the flick should be finished. Unless I am overlooking something, that should produce the same effect with a lot less network data.