diff options
author | Teravus Ovares | 2007-11-22 19:01:53 +0000 |
---|---|---|
committer | Teravus Ovares | 2007-11-22 19:01:53 +0000 |
commit | 999eec603ea62056f599761b90c7a0510336cdd9 (patch) | |
tree | 436e7a97ec06ab22b2378d24c5feb5296cfd7a6a /OpenSim/Region/ClientStack/ClientView.PacketQueue.cs | |
parent | * removed erroneous comments (diff) | |
download | opensim-SC-999eec603ea62056f599761b90c7a0510336cdd9.zip opensim-SC-999eec603ea62056f599761b90c7a0510336cdd9.tar.gz opensim-SC-999eec603ea62056f599761b90c7a0510336cdd9.tar.bz2 opensim-SC-999eec603ea62056f599761b90c7a0510336cdd9.tar.xz |
Created a client driven packet throttler. The sim now respects the client's network throttle settings but does sanity checks to avoid too little(nothing gets sent) or too much(the sim crashes) data.
* Consider this experimental.. however, it looks very promising.
Diffstat (limited to 'OpenSim/Region/ClientStack/ClientView.PacketQueue.cs')
-rw-r--r-- | OpenSim/Region/ClientStack/ClientView.PacketQueue.cs | 50 |
1 files changed, 47 insertions, 3 deletions
diff --git a/OpenSim/Region/ClientStack/ClientView.PacketQueue.cs b/OpenSim/Region/ClientStack/ClientView.PacketQueue.cs index 179d02a..3ce3d8c 100644 --- a/OpenSim/Region/ClientStack/ClientView.PacketQueue.cs +++ b/OpenSim/Region/ClientStack/ClientView.PacketQueue.cs | |||
@@ -40,6 +40,17 @@ namespace OpenSim.Region.ClientStack | |||
40 | public partial class ClientView | 40 | public partial class ClientView |
41 | { | 41 | { |
42 | protected BlockingQueue<QueItem> PacketQueue; | 42 | protected BlockingQueue<QueItem> PacketQueue; |
43 | |||
44 | protected Queue<QueItem> IncomingPacketQueue; | ||
45 | protected Queue<QueItem> OutgoingPacketQueue; | ||
46 | protected Queue<QueItem> ResendOutgoingPacketQueue; | ||
47 | protected Queue<QueItem> LandOutgoingPacketQueue; | ||
48 | protected Queue<QueItem> WindOutgoingPacketQueue; | ||
49 | protected Queue<QueItem> CloudOutgoingPacketQueue; | ||
50 | protected Queue<QueItem> TaskOutgoingPacketQueue; | ||
51 | protected Queue<QueItem> TextureOutgoingPacketQueue; | ||
52 | protected Queue<QueItem> AssetOutgoingPacketQueue; | ||
53 | |||
43 | protected Dictionary<uint, uint> PendingAcks = new Dictionary<uint, uint>(); | 54 | protected Dictionary<uint, uint> PendingAcks = new Dictionary<uint, uint>(); |
44 | protected Dictionary<uint, Packet> NeedAck = new Dictionary<uint, Packet>(); | 55 | protected Dictionary<uint, Packet> NeedAck = new Dictionary<uint, Packet>(); |
45 | 56 | ||
@@ -213,7 +224,39 @@ namespace OpenSim.Region.ClientStack | |||
213 | QueItem item = new QueItem(); | 224 | QueItem item = new QueItem(); |
214 | item.Packet = NewPack; | 225 | item.Packet = NewPack; |
215 | item.Incoming = false; | 226 | item.Incoming = false; |
216 | PacketQueue.Enqueue(item); | 227 | item.throttleType = throttlePacketType; // Packet throttle type |
228 | switch (throttlePacketType) | ||
229 | { | ||
230 | case ThrottleOutPacketType.Resend: | ||
231 | ResendOutgoingPacketQueue.Enqueue(item); | ||
232 | break; | ||
233 | case ThrottleOutPacketType.Texture: | ||
234 | TextureOutgoingPacketQueue.Enqueue(item); | ||
235 | break; | ||
236 | case ThrottleOutPacketType.Task: | ||
237 | TaskOutgoingPacketQueue.Enqueue(item); | ||
238 | break; | ||
239 | case ThrottleOutPacketType.Land: | ||
240 | LandOutgoingPacketQueue.Enqueue(item); | ||
241 | break; | ||
242 | case ThrottleOutPacketType.Asset: | ||
243 | AssetOutgoingPacketQueue.Enqueue(item); | ||
244 | break; | ||
245 | case ThrottleOutPacketType.Cloud: | ||
246 | CloudOutgoingPacketQueue.Enqueue(item); | ||
247 | break; | ||
248 | case ThrottleOutPacketType.Wind: | ||
249 | WindOutgoingPacketQueue.Enqueue(item); | ||
250 | break; | ||
251 | |||
252 | default: | ||
253 | |||
254 | // Acknowledgements and other such stuff should go directly to the blocking Queue | ||
255 | // Throttling them may and likely 'will' be problematic | ||
256 | PacketQueue.Enqueue(item); | ||
257 | break; | ||
258 | } | ||
259 | //OutgoingPacketQueue.Enqueue(item); | ||
217 | } | 260 | } |
218 | 261 | ||
219 | # region Low Level Packet Methods | 262 | # region Low Level Packet Methods |
@@ -228,7 +271,7 @@ namespace OpenSim.Region.ClientStack | |||
228 | ack_it.Packets[0].ID = Pack.Header.Sequence; | 271 | ack_it.Packets[0].ID = Pack.Header.Sequence; |
229 | ack_it.Header.Reliable = false; | 272 | ack_it.Header.Reliable = false; |
230 | 273 | ||
231 | OutPacket(ack_it, ThrottleOutPacketType.Task); | 274 | OutPacket(ack_it, ThrottleOutPacketType.Unknown); |
232 | } | 275 | } |
233 | /* | 276 | /* |
234 | if (Pack.Header.Reliable) | 277 | if (Pack.Header.Reliable) |
@@ -289,7 +332,7 @@ namespace OpenSim.Region.ClientStack | |||
289 | } | 332 | } |
290 | 333 | ||
291 | acks.Header.Reliable = false; | 334 | acks.Header.Reliable = false; |
292 | OutPacket(acks, ThrottleOutPacketType.Task); | 335 | OutPacket(acks, ThrottleOutPacketType.Unknown); |
293 | 336 | ||
294 | PendingAcks.Clear(); | 337 | PendingAcks.Clear(); |
295 | } | 338 | } |
@@ -314,6 +357,7 @@ namespace OpenSim.Region.ClientStack | |||
314 | 357 | ||
315 | public Packet Packet; | 358 | public Packet Packet; |
316 | public bool Incoming; | 359 | public bool Incoming; |
360 | public ThrottleOutPacketType throttleType; | ||
317 | } | 361 | } |
318 | 362 | ||
319 | #endregion | 363 | #endregion |