diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim.RegionServer/SimClient.cs | 138 |
1 files changed, 1 insertions, 137 deletions
diff --git a/OpenSim.RegionServer/SimClient.cs b/OpenSim.RegionServer/SimClient.cs index 03e151a..92156f0 100644 --- a/OpenSim.RegionServer/SimClient.cs +++ b/OpenSim.RegionServer/SimClient.cs | |||
@@ -954,119 +954,7 @@ namespace OpenSim | |||
954 | ClientLoop(); | 954 | ClientLoop(); |
955 | } | 955 | } |
956 | } | 956 | } |
957 | #region Packet handlers | 957 | |
958 | |||
959 | protected virtual bool Logout(SimClient simClient, Packet packet) | ||
960 | { | ||
961 | OpenSim.Framework.Console.MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.LOW,"OpenSimClient.cs:ProcessInPacket() - Got a logout request"); | ||
962 | //send reply to let the client logout | ||
963 | LogoutReplyPacket logReply = new LogoutReplyPacket(); | ||
964 | logReply.AgentData.AgentID = this.AgentID; | ||
965 | logReply.AgentData.SessionID = this.SessionID; | ||
966 | logReply.InventoryData = new LogoutReplyPacket.InventoryDataBlock[1]; | ||
967 | logReply.InventoryData[0] = new LogoutReplyPacket.InventoryDataBlock(); | ||
968 | logReply.InventoryData[0].ItemID = LLUUID.Zero; | ||
969 | OutPacket(logReply); | ||
970 | //tell all clients to kill our object | ||
971 | KillObjectPacket kill = new KillObjectPacket(); | ||
972 | kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1]; | ||
973 | kill.ObjectData[0] = new KillObjectPacket.ObjectDataBlock(); | ||
974 | kill.ObjectData[0].ID = this.ClientAvatar.localid; | ||
975 | foreach (SimClient client in m_clientThreads.Values) | ||
976 | { | ||
977 | client.OutPacket(kill); | ||
978 | } | ||
979 | if (this.m_userServer != null) | ||
980 | { | ||
981 | this.m_inventoryCache.ClientLeaving(this.AgentID, this.m_userServer); | ||
982 | } | ||
983 | else | ||
984 | { | ||
985 | this.m_inventoryCache.ClientLeaving(this.AgentID, null); | ||
986 | } | ||
987 | |||
988 | m_gridServer.LogoutSession(this.SessionID, this.AgentID, this.CircuitCode); | ||
989 | /*lock (m_world.Entities) | ||
990 | { | ||
991 | m_world.Entities.Remove(this.AgentID); | ||
992 | }*/ | ||
993 | m_world.RemoveViewerAgent(this); | ||
994 | //need to do other cleaning up here too | ||
995 | m_clientThreads.Remove(this.CircuitCode); | ||
996 | m_application.RemoveClientCircuit(this.CircuitCode); | ||
997 | this.ClientThread.Abort(); | ||
998 | return true; | ||
999 | } | ||
1000 | |||
1001 | protected bool AgentTextureCached(SimClient simclient, Packet packet) | ||
1002 | { | ||
1003 | // Console.WriteLine(packet.ToString()); | ||
1004 | AgentCachedTexturePacket chechedtex = (AgentCachedTexturePacket)packet; | ||
1005 | AgentCachedTextureResponsePacket cachedresp = new AgentCachedTextureResponsePacket(); | ||
1006 | cachedresp.AgentData.AgentID = this.AgentID; | ||
1007 | cachedresp.AgentData.SessionID = this.SessionID; | ||
1008 | cachedresp.AgentData.SerialNum = this.cachedtextureserial; | ||
1009 | this.cachedtextureserial++; | ||
1010 | cachedresp.WearableData = new AgentCachedTextureResponsePacket.WearableDataBlock[chechedtex.WearableData.Length]; | ||
1011 | for (int i = 0; i < chechedtex.WearableData.Length; i++) | ||
1012 | { | ||
1013 | cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock(); | ||
1014 | cachedresp.WearableData[i].TextureIndex = chechedtex.WearableData[i].TextureIndex; | ||
1015 | cachedresp.WearableData[i].TextureID = LLUUID.Zero; | ||
1016 | cachedresp.WearableData[i].HostName = new byte[0]; | ||
1017 | } | ||
1018 | this.OutPacket(cachedresp); | ||
1019 | return true; | ||
1020 | } | ||
1021 | |||
1022 | protected bool MultipleObjUpdate(SimClient simClient, Packet packet) | ||
1023 | { | ||
1024 | MultipleObjectUpdatePacket multipleupdate = (MultipleObjectUpdatePacket)packet; | ||
1025 | for (int i = 0; i < multipleupdate.ObjectData.Length; i++) | ||
1026 | { | ||
1027 | if (multipleupdate.ObjectData[i].Type == 9) //change position | ||
1028 | { | ||
1029 | libsecondlife.LLVector3 pos = new LLVector3(multipleupdate.ObjectData[i].Data, 0); | ||
1030 | foreach (Entity ent in m_world.Entities.Values) | ||
1031 | { | ||
1032 | if (ent.localid == multipleupdate.ObjectData[i].ObjectLocalID) | ||
1033 | { | ||
1034 | ((OpenSim.world.Primitive)ent).UpdatePosition(pos); | ||
1035 | |||
1036 | } | ||
1037 | } | ||
1038 | //should update stored position of the prim | ||
1039 | } | ||
1040 | else if (multipleupdate.ObjectData[i].Type == 10)//rotation | ||
1041 | { | ||
1042 | libsecondlife.LLQuaternion rot = new LLQuaternion(multipleupdate.ObjectData[i].Data, 0, true); | ||
1043 | foreach (Entity ent in m_world.Entities.Values) | ||
1044 | { | ||
1045 | if (ent.localid == multipleupdate.ObjectData[i].ObjectLocalID) | ||
1046 | { | ||
1047 | ent.rotation = new Axiom.MathLib.Quaternion(rot.W, rot.X, rot.Y, rot.Z); | ||
1048 | ((OpenSim.world.Primitive)ent).UpdateFlag = true; | ||
1049 | } | ||
1050 | } | ||
1051 | } | ||
1052 | else if (multipleupdate.ObjectData[i].Type == 13)//scale | ||
1053 | { | ||
1054 | |||
1055 | libsecondlife.LLVector3 scale = new LLVector3(multipleupdate.ObjectData[i].Data, 12); | ||
1056 | foreach (Entity ent in m_world.Entities.Values) | ||
1057 | { | ||
1058 | if (ent.localid == multipleupdate.ObjectData[i].ObjectLocalID) | ||
1059 | { | ||
1060 | ((OpenSim.world.Primitive)ent).Scale = scale; | ||
1061 | } | ||
1062 | } | ||
1063 | } | ||
1064 | } | ||
1065 | return true; | ||
1066 | } | ||
1067 | |||
1068 | #endregion | ||
1069 | |||
1070 | private AgentInventory CreateInventory(LLUUID baseFolder) | 958 | private AgentInventory CreateInventory(LLUUID baseFolder) |
1071 | { | 959 | { |
1072 | AgentInventory inventory = null; | 960 | AgentInventory inventory = null; |
@@ -1127,29 +1015,5 @@ namespace OpenSim | |||
1127 | m_assetCache.AddAsset(asset); | 1015 | m_assetCache.AddAsset(asset); |
1128 | m_inventoryCache.AddNewInventoryItem(this, packet.InventoryBlock.FolderID, asset); | 1016 | m_inventoryCache.AddNewInventoryItem(this, packet.InventoryBlock.FolderID, asset); |
1129 | } | 1017 | } |
1130 | |||
1131 | public void RequestMapLayer() //should be getting the map layer from the grid server | ||
1132 | { | ||
1133 | //send a layer covering the 800,800 - 1200,1200 area (should be covering the requested area) | ||
1134 | MapLayerReplyPacket mapReply = new MapLayerReplyPacket(); | ||
1135 | mapReply.AgentData.AgentID = this.AgentID; | ||
1136 | mapReply.AgentData.Flags = 0; | ||
1137 | mapReply.LayerData = new MapLayerReplyPacket.LayerDataBlock[1]; | ||
1138 | mapReply.LayerData[0] = new MapLayerReplyPacket.LayerDataBlock(); | ||
1139 | mapReply.LayerData[0].Bottom = 800; | ||
1140 | mapReply.LayerData[0].Left = 800; | ||
1141 | mapReply.LayerData[0].Top = 1200; | ||
1142 | mapReply.LayerData[0].Right = 1200; | ||
1143 | mapReply.LayerData[0].ImageID = new LLUUID("00000000-0000-0000-9999-000000000006"); | ||
1144 | this.OutPacket(mapReply); | ||
1145 | } | ||
1146 | |||
1147 | public void RequestMapBlock( int minX, int minY, int maxX, int maxY) | ||
1148 | { | ||
1149 | //check if our own map was requested | ||
1150 | this.m_world.RequestMapBlock(this, minX, minY, maxX, maxY); | ||
1151 | |||
1152 | //now should get other regions maps from gridserver | ||
1153 | } | ||
1154 | } | 1018 | } |
1155 | } | 1019 | } |