aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim.RegionServer
diff options
context:
space:
mode:
authorMW2007-05-21 16:06:58 +0000
committerMW2007-05-21 16:06:58 +0000
commitfe46b045f75dec5ecdd0a29273c70df3e6ea540e (patch)
tree554c0fb47e513fc6a89f496d99b7b67de24edde7 /OpenSim.RegionServer
parentIncreased version number to 0.2! ZOMG! (diff)
downloadopensim-SC_OLD-fe46b045f75dec5ecdd0a29273c70df3e6ea540e.zip
opensim-SC_OLD-fe46b045f75dec5ecdd0a29273c70df3e6ea540e.tar.gz
opensim-SC_OLD-fe46b045f75dec5ecdd0a29273c70df3e6ea540e.tar.bz2
opensim-SC_OLD-fe46b045f75dec5ecdd0a29273c70df3e6ea540e.tar.xz
Start of a redesign of SimClient (now renamed ClientView)/World/Avatar/Prim , switching to a event based system (World/Avatar register as event handlers). It is possible that I've broke something with this commit but it doesn't matter as I'll just hide and no one will find me.
Diffstat (limited to 'OpenSim.RegionServer')
-rw-r--r--OpenSim.RegionServer/AgentAssetUpload.cs4
-rw-r--r--OpenSim.RegionServer/Assets/AssetCache.cs6
-rw-r--r--OpenSim.RegionServer/Assets/InventoryCache.cs20
-rw-r--r--OpenSim.RegionServer/ClientView.Grid.cs (renamed from OpenSim.RegionServer/SimClient.Grid.cs)2
-rw-r--r--OpenSim.RegionServer/ClientView.PacketHandlers.cs (renamed from OpenSim.RegionServer/SimClient.PacketHandlers.cs)10
-rw-r--r--OpenSim.RegionServer/ClientView.ProcessPackets.cs (renamed from OpenSim.RegionServer/SimClient.ProcessPackets.cs)144
-rw-r--r--OpenSim.RegionServer/ClientView.cs (renamed from OpenSim.RegionServer/SimClient.cs)303
-rw-r--r--OpenSim.RegionServer/ClientViewBase.cs299
-rw-r--r--OpenSim.RegionServer/OpenSim.RegionServer.csproj24
-rw-r--r--OpenSim.RegionServer/OpenSim.RegionServer.dll.build10
-rw-r--r--OpenSim.RegionServer/PacketServer.cs15
-rw-r--r--OpenSim.RegionServer/SimClientBase.cs32
-rw-r--r--OpenSim.RegionServer/UDPServer.cs2
-rw-r--r--OpenSim.RegionServer/world/Avatar.Update.cs57
-rw-r--r--OpenSim.RegionServer/world/Avatar.cs8
-rw-r--r--OpenSim.RegionServer/world/Primitive.cs16
-rw-r--r--OpenSim.RegionServer/world/Primitive2.cs27
-rw-r--r--OpenSim.RegionServer/world/SceneObject.cs4
-rw-r--r--OpenSim.RegionServer/world/World.PacketHandlers.cs56
-rw-r--r--OpenSim.RegionServer/world/World.cs34
-rw-r--r--OpenSim.RegionServer/world/WorldBase.cs10
21 files changed, 561 insertions, 522 deletions
diff --git a/OpenSim.RegionServer/AgentAssetUpload.cs b/OpenSim.RegionServer/AgentAssetUpload.cs
index cdf49c5..dd2b2a9 100644
--- a/OpenSim.RegionServer/AgentAssetUpload.cs
+++ b/OpenSim.RegionServer/AgentAssetUpload.cs
@@ -12,11 +12,11 @@ namespace OpenSim
12 public class AgentAssetUpload 12 public class AgentAssetUpload
13 { 13 {
14 private Dictionary<LLUUID, AssetTransaction> transactions = new Dictionary<LLUUID, AssetTransaction>(); 14 private Dictionary<LLUUID, AssetTransaction> transactions = new Dictionary<LLUUID, AssetTransaction>();
15 private SimClient ourClient; 15 private ClientView ourClient;
16 private AssetCache m_assetCache; 16 private AssetCache m_assetCache;
17 private InventoryCache m_inventoryCache; 17 private InventoryCache m_inventoryCache;
18 18
19 public AgentAssetUpload(SimClient client, AssetCache assetCache, InventoryCache inventoryCache) 19 public AgentAssetUpload(ClientView client, AssetCache assetCache, InventoryCache inventoryCache)
20 { 20 {
21 this.ourClient = client; 21 this.ourClient = client;
22 m_assetCache = assetCache; 22 m_assetCache = assetCache;
diff --git a/OpenSim.RegionServer/Assets/AssetCache.cs b/OpenSim.RegionServer/Assets/AssetCache.cs
index e8bf292..ccebb24 100644
--- a/OpenSim.RegionServer/Assets/AssetCache.cs
+++ b/OpenSim.RegionServer/Assets/AssetCache.cs
@@ -324,7 +324,7 @@ namespace OpenSim.Assets
324 /// </summary> 324 /// </summary>
325 /// <param name="userInfo"></param> 325 /// <param name="userInfo"></param>
326 /// <param name="transferRequest"></param> 326 /// <param name="transferRequest"></param>
327 public void AddAssetRequest(SimClient userInfo, TransferRequestPacket transferRequest) 327 public void AddAssetRequest(ClientView userInfo, TransferRequestPacket transferRequest)
328 { 328 {
329 LLUUID requestID = new LLUUID(transferRequest.TransferInfo.Params, 0); 329 LLUUID requestID = new LLUUID(transferRequest.TransferInfo.Params, 0);
330 //check to see if asset is in local cache, if not we need to request it from asset server. 330 //check to see if asset is in local cache, if not we need to request it from asset server.
@@ -464,7 +464,7 @@ namespace OpenSim.Assets
464 /// </summary> 464 /// </summary>
465 /// <param name="userInfo"></param> 465 /// <param name="userInfo"></param>
466 /// <param name="imageID"></param> 466 /// <param name="imageID"></param>
467 public void AddTextureRequest(SimClient userInfo, LLUUID imageID) 467 public void AddTextureRequest(ClientView userInfo, LLUUID imageID)
468 { 468 {
469 //check to see if texture is in local cache, if not request from asset server 469 //check to see if texture is in local cache, if not request from asset server
470 if (!this.Textures.ContainsKey(imageID)) 470 if (!this.Textures.ContainsKey(imageID))
@@ -517,7 +517,7 @@ namespace OpenSim.Assets
517 517
518 public class AssetRequest 518 public class AssetRequest
519 { 519 {
520 public SimClient RequestUser; 520 public ClientView RequestUser;
521 public LLUUID RequestAssetID; 521 public LLUUID RequestAssetID;
522 public AssetInfo AssetInf; 522 public AssetInfo AssetInf;
523 public TextureImage ImageInfo; 523 public TextureImage ImageInfo;
diff --git a/OpenSim.RegionServer/Assets/InventoryCache.cs b/OpenSim.RegionServer/Assets/InventoryCache.cs
index 136ae53..64a7a32 100644
--- a/OpenSim.RegionServer/Assets/InventoryCache.cs
+++ b/OpenSim.RegionServer/Assets/InventoryCache.cs
@@ -94,12 +94,12 @@ namespace OpenSim.Assets
94 } 94 }
95 } 95 }
96 96
97 public bool CreateNewInventoryFolder(SimClient remoteClient, LLUUID folderID) 97 public bool CreateNewInventoryFolder(ClientView remoteClient, LLUUID folderID)
98 { 98 {
99 return this.CreateNewInventoryFolder(remoteClient, folderID, 0); 99 return this.CreateNewInventoryFolder(remoteClient, folderID, 0);
100 } 100 }
101 101
102 public bool CreateNewInventoryFolder(SimClient remoteClient, LLUUID folderID, ushort type) 102 public bool CreateNewInventoryFolder(ClientView remoteClient, LLUUID folderID, ushort type)
103 { 103 {
104 bool res = false; 104 bool res = false;
105 if (folderID != LLUUID.Zero) //don't create a folder with a zero id 105 if (folderID != LLUUID.Zero) //don't create a folder with a zero id
@@ -112,7 +112,7 @@ namespace OpenSim.Assets
112 return res; 112 return res;
113 } 113 }
114 114
115 public bool CreateNewInventoryFolder(SimClient remoteClient, LLUUID folderID, ushort type, string folderName, LLUUID parent) 115 public bool CreateNewInventoryFolder(ClientView remoteClient, LLUUID folderID, ushort type, string folderName, LLUUID parent)
116 { 116 {
117 bool res = false; 117 bool res = false;
118 if (folderID != LLUUID.Zero) //don't create a folder with a zero id 118 if (folderID != LLUUID.Zero) //don't create a folder with a zero id
@@ -125,7 +125,7 @@ namespace OpenSim.Assets
125 return res; 125 return res;
126 } 126 }
127 127
128 public LLUUID AddNewInventoryItem(SimClient remoteClient, LLUUID folderID, OpenSim.Framework.Types.AssetBase asset) 128 public LLUUID AddNewInventoryItem(ClientView remoteClient, LLUUID folderID, OpenSim.Framework.Types.AssetBase asset)
129 { 129 {
130 LLUUID newItem = null; 130 LLUUID newItem = null;
131 if (this._agentsInventory.ContainsKey(remoteClient.AgentID)) 131 if (this._agentsInventory.ContainsKey(remoteClient.AgentID))
@@ -140,7 +140,7 @@ namespace OpenSim.Assets
140 140
141 return newItem; 141 return newItem;
142 } 142 }
143 public bool DeleteInventoryItem(SimClient remoteClient, LLUUID itemID) 143 public bool DeleteInventoryItem(ClientView remoteClient, LLUUID itemID)
144 { 144 {
145 bool res = false; 145 bool res = false;
146 if (this._agentsInventory.ContainsKey(remoteClient.AgentID)) 146 if (this._agentsInventory.ContainsKey(remoteClient.AgentID))
@@ -161,7 +161,7 @@ namespace OpenSim.Assets
161 return res; 161 return res;
162 } 162 }
163 163
164 public bool UpdateInventoryItemAsset(SimClient remoteClient, LLUUID itemID, OpenSim.Framework.Types.AssetBase asset) 164 public bool UpdateInventoryItemAsset(ClientView remoteClient, LLUUID itemID, OpenSim.Framework.Types.AssetBase asset)
165 { 165 {
166 if (this._agentsInventory.ContainsKey(remoteClient.AgentID)) 166 if (this._agentsInventory.ContainsKey(remoteClient.AgentID))
167 { 167 {
@@ -177,7 +177,7 @@ namespace OpenSim.Assets
177 return false; 177 return false;
178 } 178 }
179 179
180 public bool UpdateInventoryItemDetails(SimClient remoteClient, LLUUID itemID, UpdateInventoryItemPacket.InventoryDataBlock packet) 180 public bool UpdateInventoryItemDetails(ClientView remoteClient, LLUUID itemID, UpdateInventoryItemPacket.InventoryDataBlock packet)
181 { 181 {
182 if (this._agentsInventory.ContainsKey(remoteClient.AgentID)) 182 if (this._agentsInventory.ContainsKey(remoteClient.AgentID))
183 { 183 {
@@ -193,7 +193,7 @@ namespace OpenSim.Assets
193 return false; 193 return false;
194 } 194 }
195 195
196 public void FetchInventoryDescendents(SimClient userInfo, FetchInventoryDescendentsPacket FetchDescend) 196 public void FetchInventoryDescendents(ClientView userInfo, FetchInventoryDescendentsPacket FetchDescend)
197 { 197 {
198 if (this._agentsInventory.ContainsKey(userInfo.AgentID)) 198 if (this._agentsInventory.ContainsKey(userInfo.AgentID))
199 { 199 {
@@ -250,7 +250,7 @@ namespace OpenSim.Assets
250 } 250 }
251 } 251 }
252 252
253 public void FetchInventory(SimClient userInfo, FetchInventoryPacket FetchItems) 253 public void FetchInventory(ClientView userInfo, FetchInventoryPacket FetchItems)
254 { 254 {
255 if (this._agentsInventory.ContainsKey(userInfo.AgentID)) 255 if (this._agentsInventory.ContainsKey(userInfo.AgentID))
256 { 256 {
@@ -291,7 +291,7 @@ namespace OpenSim.Assets
291 } 291 }
292 } 292 }
293 293
294 private void SendItemUpdateCreate(SimClient remoteClient, InventoryItem Item) 294 private void SendItemUpdateCreate(ClientView remoteClient, InventoryItem Item)
295 { 295 {
296 296
297 UpdateCreateInventoryItemPacket InventoryReply = new UpdateCreateInventoryItemPacket(); 297 UpdateCreateInventoryItemPacket InventoryReply = new UpdateCreateInventoryItemPacket();
diff --git a/OpenSim.RegionServer/SimClient.Grid.cs b/OpenSim.RegionServer/ClientView.Grid.cs
index 493d4d7..a3b191c 100644
--- a/OpenSim.RegionServer/SimClient.Grid.cs
+++ b/OpenSim.RegionServer/ClientView.Grid.cs
@@ -18,7 +18,7 @@ using OpenSim.Assets;
18 18
19namespace OpenSim 19namespace OpenSim
20{ 20{
21 public partial class SimClient 21 public partial class ClientView
22 { 22 {
23 23
24 public void EnableNeighbours() 24 public void EnableNeighbours()
diff --git a/OpenSim.RegionServer/SimClient.PacketHandlers.cs b/OpenSim.RegionServer/ClientView.PacketHandlers.cs
index 62919ba..070c200 100644
--- a/OpenSim.RegionServer/SimClient.PacketHandlers.cs
+++ b/OpenSim.RegionServer/ClientView.PacketHandlers.cs
@@ -18,7 +18,7 @@ using OpenSim.Assets;
18 18
19namespace OpenSim 19namespace OpenSim
20{ 20{
21 public partial class SimClient 21 public partial class ClientView
22 { 22 {
23 protected virtual void RegisterLocalPacketHandlers() 23 protected virtual void RegisterLocalPacketHandlers()
24 { 24 {
@@ -27,7 +27,7 @@ namespace OpenSim
27 this.AddLocalPacketHandler(PacketType.MultipleObjectUpdate, this.MultipleObjUpdate); 27 this.AddLocalPacketHandler(PacketType.MultipleObjectUpdate, this.MultipleObjUpdate);
28 } 28 }
29 29
30 protected virtual bool Logout(SimClient simClient, Packet packet) 30 protected virtual bool Logout(ClientView simClient, Packet packet)
31 { 31 {
32 OpenSim.Framework.Console.MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.LOW, "OpenSimClient.cs:ProcessInPacket() - Got a logout request"); 32 OpenSim.Framework.Console.MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.LOW, "OpenSimClient.cs:ProcessInPacket() - Got a logout request");
33 //send reply to let the client logout 33 //send reply to let the client logout
@@ -43,7 +43,7 @@ namespace OpenSim
43 kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1]; 43 kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1];
44 kill.ObjectData[0] = new KillObjectPacket.ObjectDataBlock(); 44 kill.ObjectData[0] = new KillObjectPacket.ObjectDataBlock();
45 kill.ObjectData[0].ID = this.ClientAvatar.localid; 45 kill.ObjectData[0].ID = this.ClientAvatar.localid;
46 foreach (SimClient client in m_clientThreads.Values) 46 foreach (ClientView client in m_clientThreads.Values)
47 { 47 {
48 client.OutPacket(kill); 48 client.OutPacket(kill);
49 } 49 }
@@ -69,7 +69,7 @@ namespace OpenSim
69 return true; 69 return true;
70 } 70 }
71 71
72 protected bool AgentTextureCached(SimClient simclient, Packet packet) 72 protected bool AgentTextureCached(ClientView simclient, Packet packet)
73 { 73 {
74 // Console.WriteLine(packet.ToString()); 74 // Console.WriteLine(packet.ToString());
75 AgentCachedTexturePacket chechedtex = (AgentCachedTexturePacket)packet; 75 AgentCachedTexturePacket chechedtex = (AgentCachedTexturePacket)packet;
@@ -90,7 +90,7 @@ namespace OpenSim
90 return true; 90 return true;
91 } 91 }
92 92
93 protected bool MultipleObjUpdate(SimClient simClient, Packet packet) 93 protected bool MultipleObjUpdate(ClientView simClient, Packet packet)
94 { 94 {
95 MultipleObjectUpdatePacket multipleupdate = (MultipleObjectUpdatePacket)packet; 95 MultipleObjectUpdatePacket multipleupdate = (MultipleObjectUpdatePacket)packet;
96 for (int i = 0; i < multipleupdate.ObjectData.Length; i++) 96 for (int i = 0; i < multipleupdate.ObjectData.Length; i++)
diff --git a/OpenSim.RegionServer/SimClient.ProcessPackets.cs b/OpenSim.RegionServer/ClientView.ProcessPackets.cs
index c9592c2..0079d96 100644
--- a/OpenSim.RegionServer/SimClient.ProcessPackets.cs
+++ b/OpenSim.RegionServer/ClientView.ProcessPackets.cs
@@ -18,9 +18,14 @@ using OpenSim.Assets;
18 18
19namespace OpenSim 19namespace OpenSim
20{ 20{
21 public partial class SimClient 21 public partial class ClientView
22 { 22 {
23 protected virtual void ProcessInPacket(Packet Pack) 23 public delegate void ChatFromViewer(byte[] message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID);
24
25
26 public event ChatFromViewer OnChatFromViewer;
27
28 protected override void ProcessInPacket(Packet Pack)
24 { 29 {
25 ack_pack(Pack); 30 ack_pack(Pack);
26 if (debug) 31 if (debug)
@@ -42,6 +47,24 @@ namespace OpenSim
42 47
43 switch (Pack.Type) 48 switch (Pack.Type)
44 { 49 {
50 #region New Event system
51 case PacketType.ChatFromViewer:
52 ChatFromViewerPacket inchatpack = (ChatFromViewerPacket)Pack;
53 if (Util.FieldToString(inchatpack.ChatData.Message) == "")
54 {
55 //empty message so don't bother with it
56 break;
57 }
58 string fromName = ClientAvatar.firstname + " " + ClientAvatar.lastname;
59 byte[] message = inchatpack.ChatData.Message;
60 byte type = inchatpack.ChatData.Type;
61 LLVector3 fromPos = ClientAvatar.Pos;
62 LLUUID fromAgentID = AgentID;
63 this.OnChatFromViewer(message, type, fromPos, fromName, fromAgentID);
64 break;
65 #endregion
66
67 #region World/Avatar/Primitive related packets
45 case PacketType.CompleteAgentMovement: 68 case PacketType.CompleteAgentMovement:
46 if (this.m_child) this.UpgradeClient(); 69 if (this.m_child) this.UpgradeClient();
47 ClientAvatar.CompleteMovement(m_world); 70 ClientAvatar.CompleteMovement(m_world);
@@ -53,13 +76,13 @@ namespace OpenSim
53 break; 76 break;
54 case PacketType.AgentWearablesRequest: 77 case PacketType.AgentWearablesRequest:
55 ClientAvatar.SendInitialAppearance(); 78 ClientAvatar.SendInitialAppearance();
56 foreach (SimClient client in m_clientThreads.Values) 79 foreach (ClientView client in m_clientThreads.Values)
57 { 80 {
58 if (client.AgentID != this.AgentID) 81 if (client.AgentID != this.AgentID)
59 { 82 {
60 ObjectUpdatePacket objupdate = client.ClientAvatar.CreateUpdatePacket(); 83 ObjectUpdatePacket objupdate = client.ClientAvatar.CreateUpdatePacket();
61 this.OutPacket(objupdate); 84 this.OutPacket(objupdate);
62 client.ClientAvatar.SendAppearanceToOtherAgent(this); 85 client.ClientAvatar.SendAppearanceToOtherAgent(this.ClientAvatar);
63 } 86 }
64 } 87 }
65 m_world.GetInitialPrims(this); 88 m_world.GetInitialPrims(this);
@@ -120,18 +143,6 @@ namespace OpenSim
120 } 143 }
121 } 144 }
122 break; 145 break;
123 case PacketType.RequestImage:
124 RequestImagePacket imageRequest = (RequestImagePacket)Pack;
125 for (int i = 0; i < imageRequest.RequestImage.Length; i++)
126 {
127 m_assetCache.AddTextureRequest(this, imageRequest.RequestImage[i].Image);
128 }
129 break;
130 case PacketType.TransferRequest:
131 //Console.WriteLine("OpenSimClient.cs:ProcessInPacket() - Got transfer request");
132 TransferRequestPacket transfer = (TransferRequestPacket)Pack;
133 m_assetCache.AddAssetRequest(this, transfer);
134 break;
135 case PacketType.AgentUpdate: 146 case PacketType.AgentUpdate:
136 ClientAvatar.HandleUpdate((AgentUpdatePacket)Pack); 147 ClientAvatar.HandleUpdate((AgentUpdatePacket)Pack);
137 break; 148 break;
@@ -158,6 +169,62 @@ namespace OpenSim
158 } 169 }
159 } 170 }
160 break; 171 break;
172 case PacketType.AgentAnimation:
173 if (!m_child)
174 {
175 AgentAnimationPacket AgentAni = (AgentAnimationPacket)Pack;
176 for (int i = 0; i < AgentAni.AnimationList.Length; i++)
177 {
178 if (AgentAni.AnimationList[i].StartAnim)
179 {
180 ClientAvatar.current_anim = AgentAni.AnimationList[i].AnimID;
181 ClientAvatar.anim_seq = 1;
182 ClientAvatar.SendAnimPack();
183 }
184 }
185 }
186 break;
187 case PacketType.ObjectSelect:
188 ObjectSelectPacket incomingselect = (ObjectSelectPacket)Pack;
189 for (int i = 0; i < incomingselect.ObjectData.Length; i++)
190 {
191 foreach (Entity ent in m_world.Entities.Values)
192 {
193 if (ent.localid == incomingselect.ObjectData[i].ObjectLocalID)
194 {
195 ((OpenSim.world.Primitive)ent).GetProperites(this);
196 break;
197 }
198 }
199 }
200 break;
201 case PacketType.ViewerEffect:
202 ViewerEffectPacket viewer = (ViewerEffectPacket)Pack;
203 foreach (ClientView client in m_clientThreads.Values)
204 {
205 if (client.AgentID != this.AgentID)
206 {
207 viewer.AgentData.AgentID = client.AgentID;
208 viewer.AgentData.SessionID = client.SessionID;
209 client.OutPacket(viewer);
210 }
211 }
212 break;
213 #endregion
214
215 #region Inventory/Asset/Other related packets
216 case PacketType.RequestImage:
217 RequestImagePacket imageRequest = (RequestImagePacket)Pack;
218 for (int i = 0; i < imageRequest.RequestImage.Length; i++)
219 {
220 m_assetCache.AddTextureRequest(this, imageRequest.RequestImage[i].Image);
221 }
222 break;
223 case PacketType.TransferRequest:
224 //Console.WriteLine("OpenSimClient.cs:ProcessInPacket() - Got transfer request");
225 TransferRequestPacket transfer = (TransferRequestPacket)Pack;
226 m_assetCache.AddAssetRequest(this, transfer);
227 break;
161 case PacketType.AssetUploadRequest: 228 case PacketType.AssetUploadRequest:
162 AssetUploadRequestPacket request = (AssetUploadRequestPacket)Pack; 229 AssetUploadRequestPacket request = (AssetUploadRequestPacket)Pack;
163 this.UploadAssets.HandleUploadPacket(request, request.AssetBlock.TransactionID.Combine(this.SecureSessionID)); 230 this.UploadAssets.HandleUploadPacket(request, request.AssetBlock.TransactionID.Combine(this.SecureSessionID));
@@ -228,18 +295,6 @@ namespace OpenSim
228 } 295 }
229 } 296 }
230 break; 297 break;
231 case PacketType.ViewerEffect:
232 ViewerEffectPacket viewer = (ViewerEffectPacket)Pack;
233 foreach (SimClient client in m_clientThreads.Values)
234 {
235 if (client.AgentID != this.AgentID)
236 {
237 viewer.AgentData.AgentID = client.AgentID;
238 viewer.AgentData.SessionID = client.SessionID;
239 client.OutPacket(viewer);
240 }
241 }
242 break;
243 case PacketType.RequestTaskInventory: 298 case PacketType.RequestTaskInventory:
244 // Console.WriteLine(Pack.ToString()); 299 // Console.WriteLine(Pack.ToString());
245 RequestTaskInventoryPacket requesttask = (RequestTaskInventoryPacket)Pack; 300 RequestTaskInventoryPacket requesttask = (RequestTaskInventoryPacket)Pack;
@@ -292,35 +347,6 @@ namespace OpenSim
292 } 347 }
293 } 348 }
294 break; 349 break;
295 case PacketType.AgentAnimation:
296 if (!m_child)
297 {
298 AgentAnimationPacket AgentAni = (AgentAnimationPacket)Pack;
299 for (int i = 0; i < AgentAni.AnimationList.Length; i++)
300 {
301 if (AgentAni.AnimationList[i].StartAnim)
302 {
303 ClientAvatar.current_anim = AgentAni.AnimationList[i].AnimID;
304 ClientAvatar.anim_seq = 1;
305 ClientAvatar.SendAnimPack();
306 }
307 }
308 }
309 break;
310 case PacketType.ObjectSelect:
311 ObjectSelectPacket incomingselect = (ObjectSelectPacket)Pack;
312 for (int i = 0; i < incomingselect.ObjectData.Length; i++)
313 {
314 foreach (Entity ent in m_world.Entities.Values)
315 {
316 if (ent.localid == incomingselect.ObjectData[i].ObjectLocalID)
317 {
318 ((OpenSim.world.Primitive)ent).GetProperites(this);
319 break;
320 }
321 }
322 }
323 break;
324 case PacketType.MapLayerRequest: 350 case PacketType.MapLayerRequest:
325 this.RequestMapLayer(); 351 this.RequestMapLayer();
326 break; 352 break;
@@ -329,7 +355,6 @@ namespace OpenSim
329 355
330 this.RequestMapBlocks(MapRequest.PositionData.MinX, MapRequest.PositionData.MinY, MapRequest.PositionData.MaxX, MapRequest.PositionData.MaxY); 356 this.RequestMapBlocks(MapRequest.PositionData.MinX, MapRequest.PositionData.MinY, MapRequest.PositionData.MaxX, MapRequest.PositionData.MaxY);
331 break; 357 break;
332
333 case PacketType.TeleportLandmarkRequest: 358 case PacketType.TeleportLandmarkRequest:
334 TeleportLandmarkRequestPacket tpReq = (TeleportLandmarkRequestPacket)Pack; 359 TeleportLandmarkRequestPacket tpReq = (TeleportLandmarkRequestPacket)Pack;
335 360
@@ -378,7 +403,6 @@ namespace OpenSim
378 OutPacket(tpCancel); 403 OutPacket(tpCancel);
379 } 404 }
380 break; 405 break;
381
382 case PacketType.TeleportLocationRequest: 406 case PacketType.TeleportLocationRequest:
383 TeleportLocationRequestPacket tpLocReq = (TeleportLocationRequestPacket)Pack; 407 TeleportLocationRequestPacket tpLocReq = (TeleportLocationRequestPacket)Pack;
384 Console.WriteLine(tpLocReq.ToString()); 408 Console.WriteLine(tpLocReq.ToString());
@@ -410,8 +434,8 @@ namespace OpenSim
410 OutPacket(tpLocal); 434 OutPacket(tpLocal);
411 435
412 } 436 }
413
414 break; 437 break;
438 #endregion
415 } 439 }
416 } 440 }
417 } 441 }
diff --git a/OpenSim.RegionServer/SimClient.cs b/OpenSim.RegionServer/ClientView.cs
index 3b243cf..a97049d 100644
--- a/OpenSim.RegionServer/SimClient.cs
+++ b/OpenSim.RegionServer/ClientView.cs
@@ -44,43 +44,31 @@ using OpenSim.Assets;
44 44
45namespace OpenSim 45namespace OpenSim
46{ 46{
47 public delegate bool PacketMethod(SimClient simClient, Packet packet); 47 public delegate bool PacketMethod(ClientView simClient, Packet packet);
48 48
49 /// <summary> 49 /// <summary>
50 /// Handles new client connections 50 /// Handles new client connections
51 /// Constructor takes a single Packet and authenticates everything 51 /// Constructor takes a single Packet and authenticates everything
52 /// </summary> 52 /// </summary>
53 public partial class SimClient 53 public partial class ClientView : ClientViewBase
54 { 54 {
55 public LLUUID AgentID; 55 public LLUUID AgentID;
56 public LLUUID SessionID; 56 public LLUUID SessionID;
57 public LLUUID SecureSessionID = LLUUID.Zero; 57 public LLUUID SecureSessionID = LLUUID.Zero;
58 public bool m_child; 58 public bool m_child;
59 public uint CircuitCode;
60 public world.Avatar ClientAvatar; 59 public world.Avatar ClientAvatar;
61 private UseCircuitCodePacket cirpack; 60 private UseCircuitCodePacket cirpack;
62 public Thread ClientThread; 61 public Thread ClientThread;
63 public EndPoint userEP;
64 public LLVector3 startpos; 62 public LLVector3 startpos;
65 private BlockingQueue<QueItem> PacketQueue; 63
66 private Dictionary<uint, uint> PendingAcks = new Dictionary<uint, uint>();
67 private Dictionary<uint, Packet> NeedAck = new Dictionary<uint, Packet>();
68 //private Dictionary<LLUUID, AssetBase> UploadedAssets = new Dictionary<LLUUID, AssetBase>();
69 private System.Timers.Timer AckTimer;
70 private uint Sequence = 0;
71 private object SequenceLock = new object();
72 private const int MAX_APPENDED_ACKS = 10;
73 private const int RESEND_TIMEOUT = 4000;
74 private const int MAX_SEQUENCE = 0xFFFFFF;
75 private AgentAssetUpload UploadAssets; 64 private AgentAssetUpload UploadAssets;
76 private LLUUID newAssetFolder = LLUUID.Zero; 65 private LLUUID newAssetFolder = LLUUID.Zero;
77 private bool debug = false; 66 private bool debug = false;
78 private World m_world; 67 private World m_world;
79 private Dictionary<uint, SimClient> m_clientThreads; 68 private Dictionary<uint, ClientView> m_clientThreads;
80 private AssetCache m_assetCache; 69 private AssetCache m_assetCache;
81 private IGridServer m_gridServer; 70 private IGridServer m_gridServer;
82 private IUserServer m_userServer = null; 71 private IUserServer m_userServer = null;
83 private OpenSimNetworkHandler m_networkServer;
84 private InventoryCache m_inventoryCache; 72 private InventoryCache m_inventoryCache;
85 public bool m_sandboxMode; 73 public bool m_sandboxMode;
86 private int cachedtextureserial = 0; 74 private int cachedtextureserial = 0;
@@ -99,7 +87,7 @@ namespace OpenSim
99 } 87 }
100 } 88 }
101 89
102 public SimClient(EndPoint remoteEP, UseCircuitCodePacket initialcirpack, World world, Dictionary<uint, SimClient> clientThreads, AssetCache assetCache, IGridServer gridServer, OpenSimNetworkHandler application, InventoryCache inventoryCache, bool sandboxMode, bool child, RegionInfo regionDat, AuthenticateSessionsBase authenSessions) 90 public ClientView(EndPoint remoteEP, UseCircuitCodePacket initialcirpack, World world, Dictionary<uint, ClientView> clientThreads, AssetCache assetCache, IGridServer gridServer, OpenSimNetworkHandler application, InventoryCache inventoryCache, bool sandboxMode, bool child, RegionInfo regionDat, AuthenticateSessionsBase authenSessions)
103 { 91 {
104 m_world = world; 92 m_world = world;
105 m_clientThreads = clientThreads; 93 m_clientThreads = clientThreads;
@@ -170,7 +158,7 @@ namespace OpenSim
170 kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1]; 158 kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1];
171 kill.ObjectData[0] = new KillObjectPacket.ObjectDataBlock(); 159 kill.ObjectData[0] = new KillObjectPacket.ObjectDataBlock();
172 kill.ObjectData[0].ID = this.ClientAvatar.localid; 160 kill.ObjectData[0].ID = this.ClientAvatar.localid;
173 foreach (SimClient client in m_clientThreads.Values) 161 foreach (ClientView client in m_clientThreads.Values)
174 { 162 {
175 client.OutPacket(kill); 163 client.OutPacket(kill);
176 } 164 }
@@ -247,246 +235,6 @@ namespace OpenSim
247 235
248 # endregion 236 # endregion
249 237
250 # region Low Level Packet Methods
251
252 private void ack_pack(Packet Pack)
253 {
254 if (Pack.Header.Reliable)
255 {
256 libsecondlife.Packets.PacketAckPacket ack_it = new PacketAckPacket();
257 ack_it.Packets = new PacketAckPacket.PacketsBlock[1];
258 ack_it.Packets[0] = new PacketAckPacket.PacketsBlock();
259 ack_it.Packets[0].ID = Pack.Header.Sequence;
260 ack_it.Header.Reliable = false;
261
262 OutPacket(ack_it);
263
264 }
265 /*
266 if (Pack.Header.Reliable)
267 {
268 lock (PendingAcks)
269 {
270 uint sequence = (uint)Pack.Header.Sequence;
271 if (!PendingAcks.ContainsKey(sequence)) { PendingAcks[sequence] = sequence; }
272 }
273 }*/
274 }
275
276 private void ResendUnacked()
277 {
278 int now = Environment.TickCount;
279
280 lock (NeedAck)
281 {
282 foreach (Packet packet in NeedAck.Values)
283 {
284 if ((now - packet.TickCount > RESEND_TIMEOUT) && (!packet.Header.Resent))
285 {
286 OpenSim.Framework.Console.MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.VERBOSE, "Resending " + packet.Type.ToString() + " packet, " +
287 (now - packet.TickCount) + "ms have passed");
288
289 packet.Header.Resent = true;
290 OutPacket(packet);
291 }
292 }
293 }
294 }
295
296 private void SendAcks()
297 {
298 lock (PendingAcks)
299 {
300 if (PendingAcks.Count > 0)
301 {
302 if (PendingAcks.Count > 250)
303 {
304 // FIXME: Handle the odd case where we have too many pending ACKs queued up
305 OpenSim.Framework.Console.MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.VERBOSE, "Too many ACKs queued up!");
306 return;
307 }
308
309 //OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Sending PacketAck");
310
311
312 int i = 0;
313 PacketAckPacket acks = new PacketAckPacket();
314 acks.Packets = new PacketAckPacket.PacketsBlock[PendingAcks.Count];
315
316 foreach (uint ack in PendingAcks.Values)
317 {
318 acks.Packets[i] = new PacketAckPacket.PacketsBlock();
319 acks.Packets[i].ID = ack;
320 i++;
321 }
322
323 acks.Header.Reliable = false;
324 OutPacket(acks);
325
326 PendingAcks.Clear();
327 }
328 }
329 }
330
331 private void AckTimer_Elapsed(object sender, ElapsedEventArgs ea)
332 {
333 SendAcks();
334 ResendUnacked();
335 }
336
337 # endregion
338
339 #region Packet Queue Processing
340
341 protected virtual void ProcessOutPacket(Packet Pack)
342 {
343 // Keep track of when this packet was sent out
344 Pack.TickCount = Environment.TickCount;
345
346 if (!Pack.Header.Resent)
347 {
348 // Set the sequence number
349 lock (SequenceLock)
350 {
351 if (Sequence >= MAX_SEQUENCE)
352 Sequence = 1;
353 else
354 Sequence++;
355 Pack.Header.Sequence = Sequence;
356 }
357
358 if (Pack.Header.Reliable) //DIRTY HACK
359 {
360 lock (NeedAck)
361 {
362 if (!NeedAck.ContainsKey(Pack.Header.Sequence))
363 {
364 try
365 {
366 NeedAck.Add(Pack.Header.Sequence, Pack);
367 }
368 catch (Exception e) // HACKY
369 {
370 e.ToString();
371 // Ignore
372 // Seems to throw a exception here occasionally
373 // of 'duplicate key' despite being locked.
374 // !?!?!?
375 }
376 }
377 else
378 {
379 // Client.Log("Attempted to add a duplicate sequence number (" +
380 // packet.Header.Sequence + ") to the NeedAck dictionary for packet type " +
381 // packet.Type.ToString(), Helpers.LogLevel.Warning);
382 }
383 }
384
385 // Don't append ACKs to resent packets, in case that's what was causing the
386 // delivery to fail
387 if (!Pack.Header.Resent)
388 {
389 // Append any ACKs that need to be sent out to this packet
390 lock (PendingAcks)
391 {
392 if (PendingAcks.Count > 0 && PendingAcks.Count < MAX_APPENDED_ACKS &&
393 Pack.Type != PacketType.PacketAck &&
394 Pack.Type != PacketType.LogoutRequest)
395 {
396 Pack.Header.AckList = new uint[PendingAcks.Count];
397 int i = 0;
398
399 foreach (uint ack in PendingAcks.Values)
400 {
401 Pack.Header.AckList[i] = ack;
402 i++;
403 }
404
405 PendingAcks.Clear();
406 Pack.Header.AppendedAcks = true;
407 }
408 }
409 }
410 }
411 }
412
413 byte[] ZeroOutBuffer = new byte[4096];
414 byte[] sendbuffer;
415 sendbuffer = Pack.ToBytes();
416
417 try
418 {
419 if (Pack.Header.Zerocoded)
420 {
421 int packetsize = Helpers.ZeroEncode(sendbuffer, sendbuffer.Length, ZeroOutBuffer);
422 m_networkServer.SendPacketTo(ZeroOutBuffer, packetsize, SocketFlags.None, CircuitCode);//userEP);
423 }
424 else
425 {
426 m_networkServer.SendPacketTo(sendbuffer, sendbuffer.Length, SocketFlags.None, CircuitCode); //userEP);
427 }
428 }
429 catch (Exception)
430 {
431 OpenSim.Framework.Console.MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.MEDIUM, "OpenSimClient.cs:ProcessOutPacket() - WARNING: Socket exception occurred on connection " + userEP.ToString() + " - killing thread");
432 ClientThread.Abort();
433 }
434
435 }
436
437 public virtual void InPacket(Packet NewPack)
438 {
439 // Handle appended ACKs
440 if (NewPack.Header.AppendedAcks)
441 {
442 lock (NeedAck)
443 {
444 foreach (uint ack in NewPack.Header.AckList)
445 {
446 NeedAck.Remove(ack);
447 }
448 }
449 }
450
451 // Handle PacketAck packets
452 if (NewPack.Type == PacketType.PacketAck)
453 {
454 PacketAckPacket ackPacket = (PacketAckPacket)NewPack;
455
456 lock (NeedAck)
457 {
458 foreach (PacketAckPacket.PacketsBlock block in ackPacket.Packets)
459 {
460 NeedAck.Remove(block.ID);
461 }
462 }
463 }
464 else if ((NewPack.Type == PacketType.StartPingCheck))
465 {
466 //reply to pingcheck
467 libsecondlife.Packets.StartPingCheckPacket startPing = (libsecondlife.Packets.StartPingCheckPacket)NewPack;
468 libsecondlife.Packets.CompletePingCheckPacket endPing = new CompletePingCheckPacket();
469 endPing.PingID.PingID = startPing.PingID.PingID;
470 OutPacket(endPing);
471 }
472 else
473 {
474 QueItem item = new QueItem();
475 item.Packet = NewPack;
476 item.Incoming = true;
477 this.PacketQueue.Enqueue(item);
478 }
479
480 }
481
482 public virtual void OutPacket(Packet NewPack)
483 {
484 QueItem item = new QueItem();
485 item.Packet = NewPack;
486 item.Incoming = false;
487 this.PacketQueue.Enqueue(item);
488 }
489
490 protected virtual void ClientLoop() 238 protected virtual void ClientLoop()
491 { 239 {
492 OpenSim.Framework.Console.MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.LOW, "OpenSimClient.cs:ClientLoop() - Entered loop"); 240 OpenSim.Framework.Console.MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.LOW, "OpenSimClient.cs:ClientLoop() - Entered loop");
@@ -506,8 +254,6 @@ namespace OpenSim
506 } 254 }
507 } 255 }
508 256
509 #endregion
510
511 # region Setup 257 # region Setup
512 258
513 protected virtual void InitNewClient() 259 protected virtual void InitNewClient()
@@ -556,6 +302,31 @@ namespace OpenSim
556 } 302 }
557 # endregion 303 # endregion
558 304
305
306 protected override void KillThread()
307 {
308 this.ClientThread.Abort();
309 }
310
311 #region World/Avatar To Viewer Methods
312
313 public void SendChatMessage(byte[] message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID)
314 {
315 System.Text.Encoding enc = System.Text.Encoding.ASCII;
316 libsecondlife.Packets.ChatFromSimulatorPacket reply = new ChatFromSimulatorPacket();
317 reply.ChatData.Audible = 1;
318 reply.ChatData.Message = message;
319 reply.ChatData.ChatType = type;
320 reply.ChatData.SourceType = 1;
321 reply.ChatData.Position = fromPos;
322 reply.ChatData.FromName = enc.GetBytes(fromName + "\0");
323 reply.ChatData.OwnerID = fromAgentID;
324 reply.ChatData.SourceID = fromAgentID;
325
326 this.OutPacket(reply);
327 }
328 #endregion
329
559 #region Inventory Creation 330 #region Inventory Creation
560 private void SetupInventory(AuthenticateResponse sessionInfo) 331 private void SetupInventory(AuthenticateResponse sessionInfo)
561 { 332 {
@@ -646,17 +417,5 @@ namespace OpenSim
646 } 417 }
647 #endregion 418 #endregion
648 419
649 #region Nested Classes
650
651 public class QueItem
652 {
653 public QueItem()
654 {
655 }
656
657 public Packet Packet;
658 public bool Incoming;
659 }
660 #endregion
661 } 420 }
662} 421}
diff --git a/OpenSim.RegionServer/ClientViewBase.cs b/OpenSim.RegionServer/ClientViewBase.cs
new file mode 100644
index 0000000..814b025
--- /dev/null
+++ b/OpenSim.RegionServer/ClientViewBase.cs
@@ -0,0 +1,299 @@
1using System;
2using System.Collections;
3using System.Collections.Generic;
4using libsecondlife;
5using libsecondlife.Packets;
6using System.Net;
7using System.Net.Sockets;
8using System.IO;
9using System.Threading;
10using System.Timers;
11using OpenSim.Framework.Utilities;
12
13
14namespace OpenSim
15{
16 public class ClientViewBase
17 {
18 protected BlockingQueue<QueItem> PacketQueue;
19 protected Dictionary<uint, uint> PendingAcks = new Dictionary<uint, uint>();
20 protected Dictionary<uint, Packet> NeedAck = new Dictionary<uint, Packet>();
21
22 protected System.Timers.Timer AckTimer;
23 protected uint Sequence = 0;
24 protected object SequenceLock = new object();
25 protected const int MAX_APPENDED_ACKS = 10;
26 protected const int RESEND_TIMEOUT = 4000;
27 protected const int MAX_SEQUENCE = 0xFFFFFF;
28
29 public uint CircuitCode;
30 public EndPoint userEP;
31
32 protected OpenSimNetworkHandler m_networkServer;
33
34 public ClientViewBase()
35 {
36
37 }
38
39 protected virtual void ProcessInPacket(Packet Pack)
40 {
41
42 }
43
44 protected virtual void ProcessOutPacket(Packet Pack)
45 {
46 // Keep track of when this packet was sent out
47 Pack.TickCount = Environment.TickCount;
48
49 if (!Pack.Header.Resent)
50 {
51 // Set the sequence number
52 lock (SequenceLock)
53 {
54 if (Sequence >= MAX_SEQUENCE)
55 Sequence = 1;
56 else
57 Sequence++;
58 Pack.Header.Sequence = Sequence;
59 }
60
61 if (Pack.Header.Reliable) //DIRTY HACK
62 {
63 lock (NeedAck)
64 {
65 if (!NeedAck.ContainsKey(Pack.Header.Sequence))
66 {
67 try
68 {
69 NeedAck.Add(Pack.Header.Sequence, Pack);
70 }
71 catch (Exception e) // HACKY
72 {
73 e.ToString();
74 // Ignore
75 // Seems to throw a exception here occasionally
76 // of 'duplicate key' despite being locked.
77 // !?!?!?
78 }
79 }
80 else
81 {
82 // Client.Log("Attempted to add a duplicate sequence number (" +
83 // packet.Header.Sequence + ") to the NeedAck dictionary for packet type " +
84 // packet.Type.ToString(), Helpers.LogLevel.Warning);
85 }
86 }
87
88 // Don't append ACKs to resent packets, in case that's what was causing the
89 // delivery to fail
90 if (!Pack.Header.Resent)
91 {
92 // Append any ACKs that need to be sent out to this packet
93 lock (PendingAcks)
94 {
95 if (PendingAcks.Count > 0 && PendingAcks.Count < MAX_APPENDED_ACKS &&
96 Pack.Type != PacketType.PacketAck &&
97 Pack.Type != PacketType.LogoutRequest)
98 {
99 Pack.Header.AckList = new uint[PendingAcks.Count];
100 int i = 0;
101
102 foreach (uint ack in PendingAcks.Values)
103 {
104 Pack.Header.AckList[i] = ack;
105 i++;
106 }
107
108 PendingAcks.Clear();
109 Pack.Header.AppendedAcks = true;
110 }
111 }
112 }
113 }
114 }
115
116 byte[] ZeroOutBuffer = new byte[4096];
117 byte[] sendbuffer;
118 sendbuffer = Pack.ToBytes();
119
120 try
121 {
122 if (Pack.Header.Zerocoded)
123 {
124 int packetsize = Helpers.ZeroEncode(sendbuffer, sendbuffer.Length, ZeroOutBuffer);
125 m_networkServer.SendPacketTo(ZeroOutBuffer, packetsize, SocketFlags.None, CircuitCode);//userEP);
126 }
127 else
128 {
129 m_networkServer.SendPacketTo(sendbuffer, sendbuffer.Length, SocketFlags.None, CircuitCode); //userEP);
130 }
131 }
132 catch (Exception)
133 {
134 OpenSim.Framework.Console.MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.MEDIUM, "OpenSimClient.cs:ProcessOutPacket() - WARNING: Socket exception occurred on connection " + userEP.ToString() + " - killing thread");
135 this.KillThread();
136 }
137
138 }
139
140 public virtual void InPacket(Packet NewPack)
141 {
142 // Handle appended ACKs
143 if (NewPack.Header.AppendedAcks)
144 {
145 lock (NeedAck)
146 {
147 foreach (uint ack in NewPack.Header.AckList)
148 {
149 NeedAck.Remove(ack);
150 }
151 }
152 }
153
154 // Handle PacketAck packets
155 if (NewPack.Type == PacketType.PacketAck)
156 {
157 PacketAckPacket ackPacket = (PacketAckPacket)NewPack;
158
159 lock (NeedAck)
160 {
161 foreach (PacketAckPacket.PacketsBlock block in ackPacket.Packets)
162 {
163 NeedAck.Remove(block.ID);
164 }
165 }
166 }
167 else if ((NewPack.Type == PacketType.StartPingCheck))
168 {
169 //reply to pingcheck
170 libsecondlife.Packets.StartPingCheckPacket startPing = (libsecondlife.Packets.StartPingCheckPacket)NewPack;
171 libsecondlife.Packets.CompletePingCheckPacket endPing = new CompletePingCheckPacket();
172 endPing.PingID.PingID = startPing.PingID.PingID;
173 OutPacket(endPing);
174 }
175 else
176 {
177 QueItem item = new QueItem();
178 item.Packet = NewPack;
179 item.Incoming = true;
180 this.PacketQueue.Enqueue(item);
181 }
182
183 }
184
185 public virtual void OutPacket(Packet NewPack)
186 {
187 QueItem item = new QueItem();
188 item.Packet = NewPack;
189 item.Incoming = false;
190 this.PacketQueue.Enqueue(item);
191 }
192
193 # region Low Level Packet Methods
194
195 protected void ack_pack(Packet Pack)
196 {
197 if (Pack.Header.Reliable)
198 {
199 libsecondlife.Packets.PacketAckPacket ack_it = new PacketAckPacket();
200 ack_it.Packets = new PacketAckPacket.PacketsBlock[1];
201 ack_it.Packets[0] = new PacketAckPacket.PacketsBlock();
202 ack_it.Packets[0].ID = Pack.Header.Sequence;
203 ack_it.Header.Reliable = false;
204
205 OutPacket(ack_it);
206
207 }
208 /*
209 if (Pack.Header.Reliable)
210 {
211 lock (PendingAcks)
212 {
213 uint sequence = (uint)Pack.Header.Sequence;
214 if (!PendingAcks.ContainsKey(sequence)) { PendingAcks[sequence] = sequence; }
215 }
216 }*/
217 }
218
219 protected void ResendUnacked()
220 {
221 int now = Environment.TickCount;
222
223 lock (NeedAck)
224 {
225 foreach (Packet packet in NeedAck.Values)
226 {
227 if ((now - packet.TickCount > RESEND_TIMEOUT) && (!packet.Header.Resent))
228 {
229 OpenSim.Framework.Console.MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.VERBOSE, "Resending " + packet.Type.ToString() + " packet, " +
230 (now - packet.TickCount) + "ms have passed");
231
232 packet.Header.Resent = true;
233 OutPacket(packet);
234 }
235 }
236 }
237 }
238
239 protected void SendAcks()
240 {
241 lock (PendingAcks)
242 {
243 if (PendingAcks.Count > 0)
244 {
245 if (PendingAcks.Count > 250)
246 {
247 // FIXME: Handle the odd case where we have too many pending ACKs queued up
248 OpenSim.Framework.Console.MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.VERBOSE, "Too many ACKs queued up!");
249 return;
250 }
251
252 //OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Sending PacketAck");
253
254
255 int i = 0;
256 PacketAckPacket acks = new PacketAckPacket();
257 acks.Packets = new PacketAckPacket.PacketsBlock[PendingAcks.Count];
258
259 foreach (uint ack in PendingAcks.Values)
260 {
261 acks.Packets[i] = new PacketAckPacket.PacketsBlock();
262 acks.Packets[i].ID = ack;
263 i++;
264 }
265
266 acks.Header.Reliable = false;
267 OutPacket(acks);
268
269 PendingAcks.Clear();
270 }
271 }
272 }
273
274 protected void AckTimer_Elapsed(object sender, ElapsedEventArgs ea)
275 {
276 SendAcks();
277 ResendUnacked();
278 }
279 #endregion
280
281 protected virtual void KillThread()
282 {
283
284 }
285
286 #region Nested Classes
287
288 public class QueItem
289 {
290 public QueItem()
291 {
292 }
293
294 public Packet Packet;
295 public bool Incoming;
296 }
297 #endregion
298 }
299}
diff --git a/OpenSim.RegionServer/OpenSim.RegionServer.csproj b/OpenSim.RegionServer/OpenSim.RegionServer.csproj
index 93285b4..512ee88 100644
--- a/OpenSim.RegionServer/OpenSim.RegionServer.csproj
+++ b/OpenSim.RegionServer/OpenSim.RegionServer.csproj
@@ -136,40 +136,40 @@
136 <Compile Include="AuthenticateSessionsRemote.cs"> 136 <Compile Include="AuthenticateSessionsRemote.cs">
137 <SubType>Code</SubType> 137 <SubType>Code</SubType>
138 </Compile> 138 </Compile>
139 <Compile Include="Grid.cs"> 139 <Compile Include="ClientView.cs">
140 <SubType>Code</SubType> 140 <SubType>Code</SubType>
141 </Compile> 141 </Compile>
142 <Compile Include="OpenSimMain.cs"> 142 <Compile Include="ClientView.Grid.cs">
143 <SubType>Code</SubType> 143 <SubType>Code</SubType>
144 </Compile> 144 </Compile>
145 <Compile Include="OpenSimNetworkHandler.cs"> 145 <Compile Include="ClientView.PacketHandlers.cs">
146 <SubType>Code</SubType> 146 <SubType>Code</SubType>
147 </Compile> 147 </Compile>
148 <Compile Include="PacketServer.cs"> 148 <Compile Include="ClientView.ProcessPackets.cs">
149 <SubType>Code</SubType> 149 <SubType>Code</SubType>
150 </Compile> 150 </Compile>
151 <Compile Include="RegionInfo.cs"> 151 <Compile Include="ClientViewBase.cs">
152 <SubType>Code</SubType> 152 <SubType>Code</SubType>
153 </Compile> 153 </Compile>
154 <Compile Include="RegionInfoBase.cs"> 154 <Compile Include="Grid.cs">
155 <SubType>Code</SubType> 155 <SubType>Code</SubType>
156 </Compile> 156 </Compile>
157 <Compile Include="RegionServerBase.cs"> 157 <Compile Include="OpenSimMain.cs">
158 <SubType>Code</SubType> 158 <SubType>Code</SubType>
159 </Compile> 159 </Compile>
160 <Compile Include="SimClient.cs"> 160 <Compile Include="OpenSimNetworkHandler.cs">
161 <SubType>Code</SubType> 161 <SubType>Code</SubType>
162 </Compile> 162 </Compile>
163 <Compile Include="SimClient.Grid.cs"> 163 <Compile Include="PacketServer.cs">
164 <SubType>Code</SubType> 164 <SubType>Code</SubType>
165 </Compile> 165 </Compile>
166 <Compile Include="SimClient.PacketHandlers.cs"> 166 <Compile Include="RegionInfo.cs">
167 <SubType>Code</SubType> 167 <SubType>Code</SubType>
168 </Compile> 168 </Compile>
169 <Compile Include="SimClient.ProcessPackets.cs"> 169 <Compile Include="RegionInfoBase.cs">
170 <SubType>Code</SubType> 170 <SubType>Code</SubType>
171 </Compile> 171 </Compile>
172 <Compile Include="SimClientBase.cs"> 172 <Compile Include="RegionServerBase.cs">
173 <SubType>Code</SubType> 173 <SubType>Code</SubType>
174 </Compile> 174 </Compile>
175 <Compile Include="UDPServer.cs"> 175 <Compile Include="UDPServer.cs">
diff --git a/OpenSim.RegionServer/OpenSim.RegionServer.dll.build b/OpenSim.RegionServer/OpenSim.RegionServer.dll.build
index 35985ac..4ec3537 100644
--- a/OpenSim.RegionServer/OpenSim.RegionServer.dll.build
+++ b/OpenSim.RegionServer/OpenSim.RegionServer.dll.build
@@ -15,6 +15,11 @@
15 <include name="AuthenticateSessionsBase.cs" /> 15 <include name="AuthenticateSessionsBase.cs" />
16 <include name="AuthenticateSessionsLocal.cs" /> 16 <include name="AuthenticateSessionsLocal.cs" />
17 <include name="AuthenticateSessionsRemote.cs" /> 17 <include name="AuthenticateSessionsRemote.cs" />
18 <include name="ClientView.cs" />
19 <include name="ClientView.Grid.cs" />
20 <include name="ClientView.PacketHandlers.cs" />
21 <include name="ClientView.ProcessPackets.cs" />
22 <include name="ClientViewBase.cs" />
18 <include name="Grid.cs" /> 23 <include name="Grid.cs" />
19 <include name="OpenSimMain.cs" /> 24 <include name="OpenSimMain.cs" />
20 <include name="OpenSimNetworkHandler.cs" /> 25 <include name="OpenSimNetworkHandler.cs" />
@@ -22,11 +27,6 @@
22 <include name="RegionInfo.cs" /> 27 <include name="RegionInfo.cs" />
23 <include name="RegionInfoBase.cs" /> 28 <include name="RegionInfoBase.cs" />
24 <include name="RegionServerBase.cs" /> 29 <include name="RegionServerBase.cs" />
25 <include name="SimClient.cs" />
26 <include name="SimClient.Grid.cs" />
27 <include name="SimClient.PacketHandlers.cs" />
28 <include name="SimClient.ProcessPackets.cs" />
29 <include name="SimClientBase.cs" />
30 <include name="UDPServer.cs" /> 30 <include name="UDPServer.cs" />
31 <include name="VersionInfo.cs" /> 31 <include name="VersionInfo.cs" />
32 <include name="Assets/AssetCache.cs" /> 32 <include name="Assets/AssetCache.cs" />
diff --git a/OpenSim.RegionServer/PacketServer.cs b/OpenSim.RegionServer/PacketServer.cs
index b60d10f..cb7de11 100644
--- a/OpenSim.RegionServer/PacketServer.cs
+++ b/OpenSim.RegionServer/PacketServer.cs
@@ -10,7 +10,7 @@ namespace OpenSim
10 { 10 {
11 private OpenSimNetworkHandler _networkHandler; 11 private OpenSimNetworkHandler _networkHandler;
12 private World _localWorld; 12 private World _localWorld;
13 public Dictionary<uint, SimClient> ClientThreads = new Dictionary<uint, SimClient>(); 13 public Dictionary<uint, ClientView> ClientThreads = new Dictionary<uint, ClientView>();
14 14
15 public PacketServer(OpenSimNetworkHandler networkHandler) 15 public PacketServer(OpenSimNetworkHandler networkHandler)
16 { 16 {
@@ -44,7 +44,7 @@ namespace OpenSim
44 44
45 } 45 }
46 46
47 public virtual void SendPacketToAllExcept(Packet packet, SimClient simClient) 47 public virtual void SendPacketToAllExcept(Packet packet, ClientView simClient)
48 { 48 {
49 49
50 } 50 }
@@ -58,17 +58,16 @@ namespace OpenSim
58 { 58 {
59 if (this._localWorld != null) 59 if (this._localWorld != null)
60 { 60 {
61 SimClient.AddPacketHandler(PacketType.ModifyLand, _localWorld.ModifyTerrain); 61 ClientView.AddPacketHandler(PacketType.ModifyLand, _localWorld.ModifyTerrain);
62 SimClient.AddPacketHandler(PacketType.ChatFromViewer, _localWorld.SimChat); 62 ClientView.AddPacketHandler(PacketType.RezObject, _localWorld.RezObject);
63 SimClient.AddPacketHandler(PacketType.RezObject, _localWorld.RezObject); 63 ClientView.AddPacketHandler(PacketType.DeRezObject, _localWorld.DeRezObject);
64 SimClient.AddPacketHandler(PacketType.DeRezObject, _localWorld.DeRezObject); 64 ClientView.AddPacketHandler(PacketType.UUIDNameRequest, this.RequestUUIDName);
65 SimClient.AddPacketHandler(PacketType.UUIDNameRequest, this.RequestUUIDName);
66 } 65 }
67 } 66 }
68 67
69 #region Client Packet Handlers 68 #region Client Packet Handlers
70 69
71 public bool RequestUUIDName(SimClient simClient, Packet packet) 70 public bool RequestUUIDName(ClientView simClient, Packet packet)
72 { 71 {
73 System.Text.Encoding enc = System.Text.Encoding.ASCII; 72 System.Text.Encoding enc = System.Text.Encoding.ASCII;
74 Console.WriteLine(packet.ToString()); 73 Console.WriteLine(packet.ToString());
diff --git a/OpenSim.RegionServer/SimClientBase.cs b/OpenSim.RegionServer/SimClientBase.cs
deleted file mode 100644
index d0dd381..0000000
--- a/OpenSim.RegionServer/SimClientBase.cs
+++ /dev/null
@@ -1,32 +0,0 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4using libsecondlife;
5using libsecondlife.Packets;
6
7namespace OpenSim
8{
9 public class SimClientBase
10 {
11
12 protected virtual void ProcessInPacket(Packet Pack)
13 {
14
15 }
16
17 protected virtual void ProcessOutPacket(Packet Pack)
18 {
19
20 }
21
22 public virtual void InPacket(Packet NewPack)
23 {
24
25 }
26
27 public virtual void OutPacket(Packet NewPack)
28 {
29
30 }
31 }
32}
diff --git a/OpenSim.RegionServer/UDPServer.cs b/OpenSim.RegionServer/UDPServer.cs
index 0bab05a..3a93e66 100644
--- a/OpenSim.RegionServer/UDPServer.cs
+++ b/OpenSim.RegionServer/UDPServer.cs
@@ -133,7 +133,7 @@ namespace OpenSim
133 this.clientCircuits.Add(epSender, useCircuit.CircuitCode.Code); 133 this.clientCircuits.Add(epSender, useCircuit.CircuitCode.Code);
134 bool isChildAgent = false; 134 bool isChildAgent = false;
135 135
136 SimClient newuser = new SimClient(epSender, useCircuit, m_localWorld, _packetServer.ClientThreads, m_assetCache, m_gridServers.GridServer, this, m_inventoryCache, m_sandbox, isChildAgent, this.m_regionData, m_authenticateSessionsClass); 136 ClientView newuser = new ClientView(epSender, useCircuit, m_localWorld, _packetServer.ClientThreads, m_assetCache, m_gridServers.GridServer, this, m_inventoryCache, m_sandbox, isChildAgent, this.m_regionData, m_authenticateSessionsClass);
137 if ((this.m_gridServers.UserServer != null) && (user_accounts)) 137 if ((this.m_gridServers.UserServer != null) && (user_accounts))
138 { 138 {
139 newuser.UserServer = this.m_gridServers.UserServer; 139 newuser.UserServer = this.m_gridServers.UserServer;
diff --git a/OpenSim.RegionServer/world/Avatar.Update.cs b/OpenSim.RegionServer/world/Avatar.Update.cs
index ba2965d..75f0bb4 100644
--- a/OpenSim.RegionServer/world/Avatar.Update.cs
+++ b/OpenSim.RegionServer/world/Avatar.Update.cs
@@ -28,9 +28,10 @@ namespace OpenSim.world
28 terse.RegionData.TimeDilation = 64096; 28 terse.RegionData.TimeDilation = 64096;
29 terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1]; 29 terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
30 terse.ObjectData[0] = terseBlock; 30 terse.ObjectData[0] = terseBlock;
31 foreach (SimClient client in m_clientThreads.Values) 31 List<Avatar> avList = this.m_world.RequestAvatarList();
32 foreach (Avatar client in avList)
32 { 33 {
33 client.OutPacket(terse); 34 client.SendPacketToViewer(terse);
34 } 35 }
35 36
36 updateflag = false; 37 updateflag = false;
@@ -51,9 +52,10 @@ namespace OpenSim.world
51 terse.RegionData.TimeDilation = 64096; 52 terse.RegionData.TimeDilation = 64096;
52 terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1]; 53 terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
53 terse.ObjectData[0] = terseBlock; 54 terse.ObjectData[0] = terseBlock;
54 foreach (SimClient client in m_clientThreads.Values) 55 List<Avatar> avList = this.m_world.RequestAvatarList();
56 foreach (Avatar client in avList)
55 { 57 {
56 client.OutPacket(terse); 58 client.SendPacketToViewer(terse);
57 } 59 }
58 _updateCount = 0; 60 _updateCount = 0;
59 } 61 }
@@ -134,15 +136,13 @@ namespace OpenSim.world
134 byte[] pb = pos2.GetBytes(); 136 byte[] pb = pos2.GetBytes();
135 Array.Copy(pb, 0, objupdate.ObjectData[0].ObjectData, 16, pb.Length); 137 Array.Copy(pb, 0, objupdate.ObjectData[0].ObjectData, 16, pb.Length);
136 m_world._localNumber++; 138 m_world._localNumber++;
137 foreach (SimClient client in m_clientThreads.Values) 139
140 List<Avatar> avList = this.m_world.RequestAvatarList();
141 foreach (Avatar client in avList)
138 { 142 {
139 client.OutPacket(objupdate); 143 client.SendPacketToViewer(objupdate);
140 if (client.AgentID != ControllingClient.AgentID) 144 if (client.ControllingClient.AgentID != this.ControllingClient.AgentID)
141 { 145 {
142 //the below line is already in Simclient.cs at line number 245 , directly below the call to this method
143 //if there is a problem/bug with that , then lets fix it there rather than duplicating it here
144 //client.ClientAvatar.SendAppearanceToOtherAgent(this.ControllingClient);
145
146 SendAppearanceToOtherAgent(client); 146 SendAppearanceToOtherAgent(client);
147 } 147 }
148 } 148 }
@@ -169,30 +169,12 @@ namespace OpenSim.world
169 ControllingClient.OutPacket(aw); 169 ControllingClient.OutPacket(aw);
170 } 170 }
171 171
172 public void SendAppearanceToOtherAgent(SimClient userInfo) 172 public void SendAppearanceToOtherAgent(Avatar avatarInfo)
173 { 173 {
174 AvatarAppearancePacket avp = new AvatarAppearancePacket(); 174 AvatarAppearancePacket avp = new AvatarAppearancePacket();
175 avp.VisualParam = new AvatarAppearancePacket.VisualParamBlock[218]; 175 avp.VisualParam = new AvatarAppearancePacket.VisualParamBlock[218];
176 avp.ObjectData.TextureEntry = this.avatarAppearanceTexture.ToBytes(); 176 avp.ObjectData.TextureEntry = this.avatarAppearanceTexture.ToBytes();
177 177
178 //a wearable update packets should only be sent about the viewers/agents own avatar not for other avatars
179 //but it seems that the following code only created the packets and never actually sent them anyway
180 /*AgentWearablesUpdatePacket aw = new AgentWearablesUpdatePacket();
181 aw.AgentData.AgentID = this.ControllingClient.AgentID;
182 aw.AgentData.SessionID = userInfo.SessionID;
183 aw.AgentData.SerialNum = 0; //removed the use of a random number as a random number could be less than the last number, should have a counter variable for this
184
185 aw.WearableData = new AgentWearablesUpdatePacket.WearableDataBlock[13];
186 AgentWearablesUpdatePacket.WearableDataBlock awb;
187 for (int i = 0; i < 13; i++)
188 {
189 awb = new AgentWearablesUpdatePacket.WearableDataBlock();
190 awb.WearableType = (byte)i;
191 awb.AssetID = this.Wearables[i].AssetID;
192 awb.ItemID = this.Wearables[i].ItemID;
193 aw.WearableData[i] = awb;
194 }*/
195
196 AvatarAppearancePacket.VisualParamBlock avblock = null; 178 AvatarAppearancePacket.VisualParamBlock avblock = null;
197 for (int i = 0; i < 218; i++) 179 for (int i = 0; i < 218; i++)
198 { 180 {
@@ -203,7 +185,7 @@ namespace OpenSim.world
203 185
204 avp.Sender.IsTrial = false; 186 avp.Sender.IsTrial = false;
205 avp.Sender.ID = ControllingClient.AgentID; 187 avp.Sender.ID = ControllingClient.AgentID;
206 userInfo.OutPacket(avp); 188 avatarInfo.SendPacketToViewer(avp);
207 } 189 }
208 190
209 public void SetAppearance(AgentSetAppearancePacket appear) 191 public void SetAppearance(AgentSetAppearancePacket appear)
@@ -214,9 +196,11 @@ namespace OpenSim.world
214 { 196 {
215 this.visualParams[i] = appear.VisualParam[i].ParamValue; 197 this.visualParams[i] = appear.VisualParam[i].ParamValue;
216 } 198 }
217 foreach (SimClient client in m_clientThreads.Values) 199
200 List<Avatar> avList = this.m_world.RequestAvatarList();
201 foreach (Avatar client in avList)
218 { 202 {
219 if (client.AgentID != ControllingClient.AgentID) 203 if (client.ControllingClient.AgentID != this.ControllingClient.AgentID)
220 { 204 {
221 SendAppearanceToOtherAgent(client); 205 SendAppearanceToOtherAgent(client);
222 } 206 }
@@ -320,11 +304,12 @@ namespace OpenSim.world
320 ani.AnimationList[0].AnimID = this.current_anim; 304 ani.AnimationList[0].AnimID = this.current_anim;
321 ani.AnimationList[0].AnimSequenceID = this.anim_seq; 305 ani.AnimationList[0].AnimSequenceID = this.anim_seq;
322 306
323 //ControllingClient.OutPacket(ani); 307 List<Avatar> avList = this.m_world.RequestAvatarList();
324 foreach (SimClient client in m_clientThreads.Values) 308 foreach (Avatar client in avList)
325 { 309 {
326 client.OutPacket(ani); 310 client.SendPacketToViewer(ani);
327 } 311 }
312
328 } 313 }
329 314
330 } 315 }
diff --git a/OpenSim.RegionServer/world/Avatar.cs b/OpenSim.RegionServer/world/Avatar.cs
index c684c45..55e5ae4 100644
--- a/OpenSim.RegionServer/world/Avatar.cs
+++ b/OpenSim.RegionServer/world/Avatar.cs
@@ -16,7 +16,7 @@ namespace OpenSim.world
16 public static AvatarAnimations Animations; 16 public static AvatarAnimations Animations;
17 public string firstname; 17 public string firstname;
18 public string lastname; 18 public string lastname;
19 public SimClient ControllingClient; 19 public ClientView ControllingClient;
20 public LLUUID current_anim; 20 public LLUUID current_anim;
21 public int anim_seq; 21 public int anim_seq;
22 private static libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock AvatarTemplate; 22 private static libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock AvatarTemplate;
@@ -30,16 +30,16 @@ namespace OpenSim.world
30 private AvatarWearable[] Wearables; 30 private AvatarWearable[] Wearables;
31 private LLVector3 positionLastFrame = new LLVector3(0, 0, 0); 31 private LLVector3 positionLastFrame = new LLVector3(0, 0, 0);
32 private ulong m_regionHandle; 32 private ulong m_regionHandle;
33 private Dictionary<uint, SimClient> m_clientThreads; 33 //private Dictionary<uint, ClientView> m_clientThreads;
34 private string m_regionName; 34 private string m_regionName;
35 private ushort m_regionWaterHeight; 35 private ushort m_regionWaterHeight;
36 private bool m_regionTerraform; 36 private bool m_regionTerraform;
37 //private bool childShadowAvatar = false; 37 //private bool childShadowAvatar = false;
38 38
39 public Avatar(SimClient TheClient, World world, string regionName, Dictionary<uint, SimClient> clientThreads, ulong regionHandle, bool regionTerraform, ushort regionWater) 39 public Avatar(ClientView TheClient, World world, string regionName, Dictionary<uint, ClientView> clientThreads, ulong regionHandle, bool regionTerraform, ushort regionWater)
40 { 40 {
41 m_world = world; 41 m_world = world;
42 m_clientThreads = clientThreads; 42 // m_clientThreads = clientThreads;
43 m_regionName = regionName; 43 m_regionName = regionName;
44 m_regionHandle = regionHandle; 44 m_regionHandle = regionHandle;
45 m_regionTerraform = regionTerraform; 45 m_regionTerraform = regionTerraform;
diff --git a/OpenSim.RegionServer/world/Primitive.cs b/OpenSim.RegionServer/world/Primitive.cs
index 4f861f7..e048a9e 100644
--- a/OpenSim.RegionServer/world/Primitive.cs
+++ b/OpenSim.RegionServer/world/Primitive.cs
@@ -22,7 +22,7 @@ namespace OpenSim.world
22 private bool physicsEnabled = false; 22 private bool physicsEnabled = false;
23 private bool physicstest = false; 23 private bool physicstest = false;
24 private LLVector3 positionLastFrame = new LLVector3(0, 0, 0); 24 private LLVector3 positionLastFrame = new LLVector3(0, 0, 0);
25 private Dictionary<uint, SimClient> m_clientThreads; 25 private Dictionary<uint, ClientView> m_clientThreads;
26 private ulong m_regionHandle; 26 private ulong m_regionHandle;
27 private const uint FULL_MASK_PERMISSIONS = 2147483647; 27 private const uint FULL_MASK_PERMISSIONS = 2147483647;
28 28
@@ -75,7 +75,7 @@ namespace OpenSim.world
75 } 75 }
76 } 76 }
77 77
78 public Primitive(Dictionary<uint, SimClient> clientThreads, ulong regionHandle, World world) 78 public Primitive(Dictionary<uint, ClientView> clientThreads, ulong regionHandle, World world)
79 { 79 {
80 mesh_cutbegin = 0.0f; 80 mesh_cutbegin = 0.0f;
81 mesh_cutend = 1.0f; 81 mesh_cutend = 1.0f;
@@ -104,7 +104,7 @@ namespace OpenSim.world
104 return this.primData.ToBytes(); 104 return this.primData.ToBytes();
105 } 105 }
106 106
107 public void GetProperites(SimClient client) 107 public void GetProperites(ClientView client)
108 { 108 {
109 ObjectPropertiesPacket proper = new ObjectPropertiesPacket(); 109 ObjectPropertiesPacket proper = new ObjectPropertiesPacket();
110 proper.ObjectData = new ObjectPropertiesPacket.ObjectDataBlock[1]; 110 proper.ObjectData = new ObjectPropertiesPacket.ObjectDataBlock[1];
@@ -164,7 +164,7 @@ namespace OpenSim.world
164 } 164 }
165 if (this.newPrimFlag) 165 if (this.newPrimFlag)
166 { 166 {
167 foreach (SimClient client in m_clientThreads.Values) 167 foreach (ClientView client in m_clientThreads.Values)
168 { 168 {
169 client.OutPacket(OurPacket); 169 client.OutPacket(OurPacket);
170 } 170 }
@@ -177,7 +177,7 @@ namespace OpenSim.world
177 terse.RegionData.TimeDilation = 64096; 177 terse.RegionData.TimeDilation = 64096;
178 terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1]; 178 terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
179 terse.ObjectData[0] = this.CreateImprovedBlock(); 179 terse.ObjectData[0] = this.CreateImprovedBlock();
180 foreach (SimClient client in m_clientThreads.Values) 180 foreach (ClientView client in m_clientThreads.Values)
181 { 181 {
182 client.OutPacket(terse); 182 client.OutPacket(terse);
183 } 183 }
@@ -185,7 +185,7 @@ namespace OpenSim.world
185 } 185 }
186 else if (this.dirtyFlag) 186 else if (this.dirtyFlag)
187 { 187 {
188 foreach (SimClient client in m_clientThreads.Values) 188 foreach (ClientView client in m_clientThreads.Values)
189 { 189 {
190 UpdateClient(client); 190 UpdateClient(client);
191 } 191 }
@@ -202,7 +202,7 @@ namespace OpenSim.world
202 terse.RegionData.TimeDilation = 64096; 202 terse.RegionData.TimeDilation = 64096;
203 terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1]; 203 terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
204 terse.ObjectData[0] = this.CreateImprovedBlock(); 204 terse.ObjectData[0] = this.CreateImprovedBlock();
205 foreach (SimClient client in m_clientThreads.Values) 205 foreach (ClientView client in m_clientThreads.Values)
206 { 206 {
207 client.OutPacket(terse); 207 client.OutPacket(terse);
208 } 208 }
@@ -220,7 +220,7 @@ namespace OpenSim.world
220 } 220 }
221 } 221 }
222 222
223 public void UpdateClient(SimClient RemoteClient) 223 public void UpdateClient(ClientView RemoteClient)
224 { 224 {
225 225
226 LLVector3 lPos; 226 LLVector3 lPos;
diff --git a/OpenSim.RegionServer/world/Primitive2.cs b/OpenSim.RegionServer/world/Primitive2.cs
index 3b39456..6d071d4 100644
--- a/OpenSim.RegionServer/world/Primitive2.cs
+++ b/OpenSim.RegionServer/world/Primitive2.cs
@@ -16,7 +16,7 @@ namespace OpenSim.world
16 protected PrimData primData; 16 protected PrimData primData;
17 //private ObjectUpdatePacket OurPacket; 17 //private ObjectUpdatePacket OurPacket;
18 private LLVector3 positionLastFrame = new LLVector3(0, 0, 0); 18 private LLVector3 positionLastFrame = new LLVector3(0, 0, 0);
19 private Dictionary<uint, SimClient> m_clientThreads; 19 private Dictionary<uint, ClientView> m_clientThreads;
20 private ulong m_regionHandle; 20 private ulong m_regionHandle;
21 private const uint FULL_MASK_PERMISSIONS = 2147483647; 21 private const uint FULL_MASK_PERMISSIONS = 2147483647;
22 private bool physicsEnabled = false; 22 private bool physicsEnabled = false;
@@ -58,7 +58,7 @@ namespace OpenSim.world
58 } 58 }
59 #endregion 59 #endregion
60 60
61 public Primitive2(Dictionary<uint, SimClient> clientThreads, ulong regionHandle, World world) 61 public Primitive2(Dictionary<uint, ClientView> clientThreads, ulong regionHandle, World world)
62 { 62 {
63 m_clientThreads = clientThreads; 63 m_clientThreads = clientThreads;
64 m_regionHandle = regionHandle; 64 m_regionHandle = regionHandle;
@@ -66,6 +66,17 @@ namespace OpenSim.world
66 inventoryItems = new Dictionary<LLUUID, InventoryItem>(); 66 inventoryItems = new Dictionary<LLUUID, InventoryItem>();
67 } 67 }
68 68
69 public Primitive2(Dictionary<uint, ClientView> clientThreads, ulong regionHandle, World world, LLUUID owner)
70 {
71 m_clientThreads = clientThreads;
72 m_regionHandle = regionHandle;
73 m_world = world;
74 inventoryItems = new Dictionary<LLUUID, InventoryItem>();
75 this.primData = new PrimData();
76 this.primData.CreationDate = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
77 this.primData.OwnerID = owner;
78 }
79
69 public byte[] GetByteArray() 80 public byte[] GetByteArray()
70 { 81 {
71 byte[] result = null; 82 byte[] result = null;
@@ -159,7 +170,7 @@ namespace OpenSim.world
159 170
160 } 171 }
161 172
162 public void GetProperites(SimClient client) 173 public void GetProperites(ClientView client)
163 { 174 {
164 ObjectPropertiesPacket proper = new ObjectPropertiesPacket(); 175 ObjectPropertiesPacket proper = new ObjectPropertiesPacket();
165 proper.ObjectData = new ObjectPropertiesPacket.ObjectDataBlock[1]; 176 proper.ObjectData = new ObjectPropertiesPacket.ObjectDataBlock[1];
@@ -202,12 +213,12 @@ namespace OpenSim.world
202 return null; 213 return null;
203 } 214 }
204 215
205 public void RequestInventoryInfo(SimClient simClient, RequestTaskInventoryPacket packet) 216 public void RequestInventoryInfo(ClientView simClient, RequestTaskInventoryPacket packet)
206 { 217 {
207 218
208 } 219 }
209 220
210 public void RequestXferInventory(SimClient simClient, ulong xferID) 221 public void RequestXferInventory(ClientView simClient, ulong xferID)
211 { 222 {
212 //will only currently work if the total size of the inventory data array is under about 1000 bytes 223 //will only currently work if the total size of the inventory data array is under about 1000 bytes
213 SendXferPacketPacket send = new SendXferPacketPacket(); 224 SendXferPacketPacket send = new SendXferPacketPacket();
@@ -246,7 +257,7 @@ namespace OpenSim.world
246 #region Update viewers Methods 257 #region Update viewers Methods
247 258
248 //should change these mehtods, so that outgoing packets are sent through the avatar class 259 //should change these mehtods, so that outgoing packets are sent through the avatar class
249 public void SendFullUpdateToClient(SimClient remoteClient) 260 public void SendFullUpdateToClient(ClientView remoteClient)
250 { 261 {
251 LLVector3 lPos; 262 LLVector3 lPos;
252 if (this._physActor != null && this.physicsEnabled) 263 if (this._physActor != null && this.physicsEnabled)
@@ -273,7 +284,7 @@ namespace OpenSim.world
273 284
274 } 285 }
275 286
276 public void SendTerseUpdateToClient(SimClient RemoteClient) 287 public void SendTerseUpdateToClient(ClientView RemoteClient)
277 { 288 {
278 289
279 } 290 }
@@ -316,7 +327,7 @@ namespace OpenSim.world
316 PData.PathTwist = addPacket.ObjectData.PathTwist; 327 PData.PathTwist = addPacket.ObjectData.PathTwist;
317 PData.PathTwistBegin = addPacket.ObjectData.PathTwistBegin; 328 PData.PathTwistBegin = addPacket.ObjectData.PathTwistBegin;
318 LLVector3 pos1 = addPacket.ObjectData.RayEnd; 329 LLVector3 pos1 = addPacket.ObjectData.RayEnd;
319 this.primData.FullID = this.uuid = LLUUID.Random(); 330 this.primData.FullID = this.uuid = LLUUID.Random();
320 this.localid = (uint)(localID); 331 this.localid = (uint)(localID);
321 this.primData.Position = this.Pos = pos1; 332 this.primData.Position = this.Pos = pos1;
322 } 333 }
diff --git a/OpenSim.RegionServer/world/SceneObject.cs b/OpenSim.RegionServer/world/SceneObject.cs
index 5b5a7b2..a846fb5 100644
--- a/OpenSim.RegionServer/world/SceneObject.cs
+++ b/OpenSim.RegionServer/world/SceneObject.cs
@@ -15,7 +15,7 @@ namespace OpenSim.world
15 { 15 {
16 private LLUUID rootUUID; 16 private LLUUID rootUUID;
17 private Dictionary<LLUUID, Primitive2> ChildPrimitives = new Dictionary<LLUUID, Primitive2>(); 17 private Dictionary<LLUUID, Primitive2> ChildPrimitives = new Dictionary<LLUUID, Primitive2>();
18 private Dictionary<uint, SimClient> m_clientThreads; 18 private Dictionary<uint, ClientView> m_clientThreads;
19 private World m_world; 19 private World m_world;
20 20
21 public SceneObject() 21 public SceneObject()
@@ -42,7 +42,7 @@ namespace OpenSim.world
42 42
43 } 43 }
44 44
45 public void GetProperites(SimClient client) 45 public void GetProperites(ClientView client)
46 { 46 {
47 /* 47 /*
48 ObjectPropertiesPacket proper = new ObjectPropertiesPacket(); 48 ObjectPropertiesPacket proper = new ObjectPropertiesPacket();
diff --git a/OpenSim.RegionServer/world/World.PacketHandlers.cs b/OpenSim.RegionServer/world/World.PacketHandlers.cs
index 175b777..27f200f 100644
--- a/OpenSim.RegionServer/world/World.PacketHandlers.cs
+++ b/OpenSim.RegionServer/world/World.PacketHandlers.cs
@@ -16,7 +16,7 @@ namespace OpenSim.world
16 public partial class World 16 public partial class World
17 { 17 {
18 18
19 public bool ModifyTerrain(SimClient simClient, Packet packet) 19 public bool ModifyTerrain(ClientView simClient, Packet packet)
20 { 20 {
21 ModifyLandPacket modify = (ModifyLandPacket)packet; 21 ModifyLandPacket modify = (ModifyLandPacket)packet;
22 22
@@ -42,68 +42,44 @@ namespace OpenSim.world
42 return true; 42 return true;
43 } 43 }
44 44
45 public bool SimChat(SimClient simClient, Packet packet) 45 public void SimChat(byte[] message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID)
46 { 46 {
47 System.Text.Encoding enc = System.Text.Encoding.ASCII; 47 foreach (ClientView client in m_clientThreads.Values)
48 ChatFromViewerPacket inchatpack = (ChatFromViewerPacket)packet;
49 if (Util.FieldToString(inchatpack.ChatData.Message) == "")
50 {
51 //empty message so don't bother with it
52 return true;
53 }
54
55 string fromName = simClient.ClientAvatar.firstname + " " + simClient.ClientAvatar.lastname;
56 byte[] message = inchatpack.ChatData.Message;
57 byte type = inchatpack.ChatData.Type;
58 LLVector3 fromPos = simClient.ClientAvatar.Pos;
59 LLUUID fromAgentID = simClient.AgentID;
60
61 libsecondlife.Packets.ChatFromSimulatorPacket reply = new ChatFromSimulatorPacket();
62 reply.ChatData.Audible = 1;
63 reply.ChatData.Message = message;
64 reply.ChatData.ChatType = type;
65 reply.ChatData.SourceType = 1;
66 reply.ChatData.Position = fromPos;
67 reply.ChatData.FromName = enc.GetBytes(fromName + "\0");
68 reply.ChatData.OwnerID = fromAgentID;
69 reply.ChatData.SourceID = fromAgentID;
70
71 foreach (SimClient client in m_clientThreads.Values)
72 { 48 {
73 // int dis = Util.fast_distance2d((int)(client.ClientAvatar.Pos.X - simClient.ClientAvatar.Pos.X), (int)(client.ClientAvatar.Pos.Y - simClient.ClientAvatar.Pos.Y)); 49 // int dis = Util.fast_distance2d((int)(client.ClientAvatar.Pos.X - simClient.ClientAvatar.Pos.X), (int)(client.ClientAvatar.Pos.Y - simClient.ClientAvatar.Pos.Y));
74 int dis = (int)client.ClientAvatar.Pos.GetDistanceTo(simClient.ClientAvatar.Pos); 50 int dis = (int)client.ClientAvatar.Pos.GetDistanceTo(fromPos);
75 51
76 switch (inchatpack.ChatData.Type) 52 switch (type)
77 { 53 {
78 case 0: // Whisper 54 case 0: // Whisper
79 if ((dis < 10) && (dis > -10)) 55 if ((dis < 10) && (dis > -10))
80 { 56 {
81 client.OutPacket(reply); 57 //should change so the message is sent through the avatar rather than direct to the ClientView
58 client.SendChatMessage(message, type, fromPos, fromName, fromAgentID);
82 } 59 }
83 break; 60 break;
84 case 1: // Say 61 case 1: // Say
85 if ((dis < 30) && (dis > -30)) 62 if ((dis < 30) && (dis > -30))
86 { 63 {
87 client.OutPacket(reply); 64 client.SendChatMessage(message, type, fromPos, fromName, fromAgentID);
88 } 65 }
89 break; 66 break;
90 case 2: // Shout 67 case 2: // Shout
91 if ((dis < 100) && (dis > -100)) 68 if ((dis < 100) && (dis > -100))
92 { 69 {
93 client.OutPacket(reply); 70 client.SendChatMessage(message, type, fromPos, fromName, fromAgentID);
94 } 71 }
95 break; 72 break;
96 73
97 case 0xff: // Broadcast 74 case 0xff: // Broadcast
98 client.OutPacket(reply); 75 client.SendChatMessage(message, type, fromPos, fromName, fromAgentID);
99 break; 76 break;
100 } 77 }
101 78
102 } 79 }
103 return true;
104 } 80 }
105 81
106 public bool RezObject(SimClient simClient, Packet packet) 82 public bool RezObject(ClientView simClient, Packet packet)
107 { 83 {
108 RezObjectPacket rezPacket = (RezObjectPacket)packet; 84 RezObjectPacket rezPacket = (RezObjectPacket)packet;
109 AgentInventory inven = this._inventoryCache.GetAgentsInventory(simClient.AgentID); 85 AgentInventory inven = this._inventoryCache.GetAgentsInventory(simClient.AgentID);
@@ -126,7 +102,7 @@ namespace OpenSim.world
126 return true; 102 return true;
127 } 103 }
128 104
129 public bool DeRezObject(SimClient simClient, Packet packet) 105 public bool DeRezObject(ClientView simClient, Packet packet)
130 { 106 {
131 DeRezObjectPacket DeRezPacket = (DeRezObjectPacket)packet; 107 DeRezObjectPacket DeRezPacket = (DeRezObjectPacket)packet;
132 108
@@ -151,7 +127,7 @@ namespace OpenSim.world
151 kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1]; 127 kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1];
152 kill.ObjectData[0] = new KillObjectPacket.ObjectDataBlock(); 128 kill.ObjectData[0] = new KillObjectPacket.ObjectDataBlock();
153 kill.ObjectData[0].ID = ent.localid; 129 kill.ObjectData[0].ID = ent.localid;
154 foreach (SimClient client in m_clientThreads.Values) 130 foreach (ClientView client in m_clientThreads.Values)
155 { 131 {
156 client.OutPacket(kill); 132 client.OutPacket(kill);
157 } 133 }
@@ -201,7 +177,7 @@ namespace OpenSim.world
201 kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1]; 177 kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1];
202 kill.ObjectData[0] = new KillObjectPacket.ObjectDataBlock(); 178 kill.ObjectData[0] = new KillObjectPacket.ObjectDataBlock();
203 kill.ObjectData[0].ID = selectedEnt.localid; 179 kill.ObjectData[0].ID = selectedEnt.localid;
204 foreach (SimClient client in m_clientThreads.Values) 180 foreach (ClientView client in m_clientThreads.Values)
205 { 181 {
206 client.OutPacket(kill); 182 client.OutPacket(kill);
207 } 183 }
@@ -215,7 +191,7 @@ namespace OpenSim.world
215 return true; 191 return true;
216 } 192 }
217 193
218 public void RequestMapBlock(SimClient simClient, int minX, int minY, int maxX, int maxY) 194 public void RequestMapBlock(ClientView simClient, int minX, int minY, int maxX, int maxY)
219 { 195 {
220 System.Text.Encoding _enc = System.Text.Encoding.ASCII; 196 System.Text.Encoding _enc = System.Text.Encoding.ASCII;
221 if (((m_regInfo.RegionLocX > minX) && (m_regInfo.RegionLocX < maxX)) && ((m_regInfo.RegionLocY > minY) && (m_regInfo.RegionLocY < maxY))) 197 if (((m_regInfo.RegionLocX > minX) && (m_regInfo.RegionLocX < maxX)) && ((m_regInfo.RegionLocY > minY) && (m_regInfo.RegionLocY < maxY)))
diff --git a/OpenSim.RegionServer/world/World.cs b/OpenSim.RegionServer/world/World.cs
index 983e66d..c90e3f6 100644
--- a/OpenSim.RegionServer/world/World.cs
+++ b/OpenSim.RegionServer/world/World.cs
@@ -57,7 +57,7 @@ namespace OpenSim.world
57 /// <param name="clientThreads">Dictionary to contain client threads</param> 57 /// <param name="clientThreads">Dictionary to contain client threads</param>
58 /// <param name="regionHandle">Region Handle for this region</param> 58 /// <param name="regionHandle">Region Handle for this region</param>
59 /// <param name="regionName">Region Name for this region</param> 59 /// <param name="regionName">Region Name for this region</param>
60 public World(Dictionary<uint, SimClient> clientThreads, RegionInfo regInfo, ulong regionHandle, string regionName) 60 public World(Dictionary<uint, ClientView> clientThreads, RegionInfo regInfo, ulong regionHandle, string regionName)
61 { 61 {
62 try 62 try
63 { 63 {
@@ -324,7 +324,7 @@ namespace OpenSim.world
324 } 324 }
325 this.localStorage.SaveMap(this.Terrain.getHeights1D()); 325 this.localStorage.SaveMap(this.Terrain.getHeights1D());
326 326
327 foreach (SimClient client in m_clientThreads.Values) 327 foreach (ClientView client in m_clientThreads.Values)
328 { 328 {
329 this.SendLayerData(client); 329 this.SendLayerData(client);
330 } 330 }
@@ -355,7 +355,7 @@ namespace OpenSim.world
355 } 355 }
356 this.localStorage.SaveMap(this.Terrain.getHeights1D()); 356 this.localStorage.SaveMap(this.Terrain.getHeights1D());
357 357
358 foreach (SimClient client in m_clientThreads.Values) 358 foreach (ClientView client in m_clientThreads.Values)
359 { 359 {
360 this.SendLayerData(client); 360 this.SendLayerData(client);
361 } 361 }
@@ -389,7 +389,7 @@ namespace OpenSim.world
389 } 389 }
390 this.localStorage.SaveMap(this.Terrain.getHeights1D()); 390 this.localStorage.SaveMap(this.Terrain.getHeights1D());
391 391
392 foreach (SimClient client in m_clientThreads.Values) 392 foreach (ClientView client in m_clientThreads.Values)
393 { 393 {
394 this.SendLayerData(pointx, pointy, client); 394 this.SendLayerData(pointx, pointy, client);
395 } 395 }
@@ -437,7 +437,7 @@ namespace OpenSim.world
437 /// Sends prims to a client 437 /// Sends prims to a client
438 /// </summary> 438 /// </summary>
439 /// <param name="RemoteClient">Client to send to</param> 439 /// <param name="RemoteClient">Client to send to</param>
440 public void GetInitialPrims(SimClient RemoteClient) 440 public void GetInitialPrims(ClientView RemoteClient)
441 { 441 {
442 try 442 try
443 { 443 {
@@ -495,7 +495,7 @@ namespace OpenSim.world
495 } 495 }
496 } 496 }
497 497
498 public void AddNewPrim(ObjectAddPacket addPacket, SimClient AgentClient) 498 public void AddNewPrim(ObjectAddPacket addPacket, ClientView AgentClient)
499 { 499 {
500 AddNewPrim(addPacket, AgentClient.AgentID); 500 AddNewPrim(addPacket, AgentClient.AgentID);
501 } 501 }
@@ -530,8 +530,9 @@ namespace OpenSim.world
530 530
531 #region Add/Remove Avatar Methods 531 #region Add/Remove Avatar Methods
532 532
533 public override void AddViewerAgent(SimClient agentClient) 533 public override void AddViewerAgent(ClientView agentClient)
534 { 534 {
535 agentClient.OnChatFromViewer += new ClientView.ChatFromViewer(this.SimChat);
535 try 536 try
536 { 537 {
537 OpenSim.Framework.Console.MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.LOW, "World.cs:AddViewerAgent() - Creating new avatar for remote viewer agent"); 538 OpenSim.Framework.Console.MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.LOW, "World.cs:AddViewerAgent() - Creating new avatar for remote viewer agent");
@@ -576,7 +577,7 @@ namespace OpenSim.world
576 } 577 }
577 } 578 }
578 579
579 public override void RemoveViewerAgent(SimClient agentClient) 580 public override void RemoveViewerAgent(ClientView agentClient)
580 { 581 {
581 try 582 try
582 { 583 {
@@ -600,6 +601,23 @@ namespace OpenSim.world
600 } 601 }
601 #endregion 602 #endregion
602 603
604 #region Request Avatars List Methods
605 //The idea is to have a group of method that return a list of avatars meeting some requirement
606 // ie it could be all Avatars within a certain range of the calling prim/avatar.
607
608 public List<Avatar> RequestAvatarList()
609 {
610 List<Avatar> result = new List<Avatar>();
611
612 foreach (Avatar avatar in Avatars.Values)
613 {
614 result.Add(avatar);
615 }
616
617 return result;
618 }
619 #endregion
620
603 #region ShutDown 621 #region ShutDown
604 /// <summary> 622 /// <summary>
605 /// Tidy before shutdown 623 /// Tidy before shutdown
diff --git a/OpenSim.RegionServer/world/WorldBase.cs b/OpenSim.RegionServer/world/WorldBase.cs
index b8c086d..edc5518 100644
--- a/OpenSim.RegionServer/world/WorldBase.cs
+++ b/OpenSim.RegionServer/world/WorldBase.cs
@@ -20,7 +20,7 @@ namespace OpenSim.world
20 public class WorldBase 20 public class WorldBase
21 { 21 {
22 public Dictionary<libsecondlife.LLUUID, Entity> Entities; 22 public Dictionary<libsecondlife.LLUUID, Entity> Entities;
23 protected Dictionary<uint, SimClient> m_clientThreads; 23 protected Dictionary<uint, ClientView> m_clientThreads;
24 protected ulong m_regionHandle; 24 protected ulong m_regionHandle;
25 protected string m_regionName; 25 protected string m_regionName;
26 protected InventoryCache _inventoryCache; 26 protected InventoryCache _inventoryCache;
@@ -90,7 +90,7 @@ namespace OpenSim.world
90 /// Send the region heightmap to the client 90 /// Send the region heightmap to the client
91 /// </summary> 91 /// </summary>
92 /// <param name="RemoteClient">Client to send to</param> 92 /// <param name="RemoteClient">Client to send to</param>
93 public virtual void SendLayerData(SimClient RemoteClient) 93 public virtual void SendLayerData(ClientView RemoteClient)
94 { 94 {
95 try 95 try
96 { 96 {
@@ -122,7 +122,7 @@ namespace OpenSim.world
122 /// <param name="px">Patch coordinate (x) 0..16</param> 122 /// <param name="px">Patch coordinate (x) 0..16</param>
123 /// <param name="py">Patch coordinate (y) 0..16</param> 123 /// <param name="py">Patch coordinate (y) 0..16</param>
124 /// <param name="RemoteClient">The client to send to</param> 124 /// <param name="RemoteClient">The client to send to</param>
125 public void SendLayerData(int px, int py, SimClient RemoteClient) 125 public void SendLayerData(int px, int py, ClientView RemoteClient)
126 { 126 {
127 try 127 try
128 { 128 {
@@ -148,7 +148,7 @@ namespace OpenSim.world
148 /// Add a new Agent's avatar 148 /// Add a new Agent's avatar
149 /// </summary> 149 /// </summary>
150 /// <param name="agentClient"></param> 150 /// <param name="agentClient"></param>
151 public virtual void AddViewerAgent(SimClient agentClient) 151 public virtual void AddViewerAgent(ClientView agentClient)
152 { 152 {
153 153
154 } 154 }
@@ -157,7 +157,7 @@ namespace OpenSim.world
157 /// Remove a Agent's avatar 157 /// Remove a Agent's avatar
158 /// </summary> 158 /// </summary>
159 /// <param name="agentClient"></param> 159 /// <param name="agentClient"></param>
160 public virtual void RemoveViewerAgent(SimClient agentClient) 160 public virtual void RemoveViewerAgent(ClientView agentClient)
161 { 161 {
162 162
163 } 163 }