diff options
author | MW | 2007-05-21 16:06:58 +0000 |
---|---|---|
committer | MW | 2007-05-21 16:06:58 +0000 |
commit | fe46b045f75dec5ecdd0a29273c70df3e6ea540e (patch) | |
tree | 554c0fb47e513fc6a89f496d99b7b67de24edde7 /OpenSim.RegionServer/ClientView.Grid.cs | |
parent | Increased version number to 0.2! ZOMG! (diff) | |
download | opensim-SC-fe46b045f75dec5ecdd0a29273c70df3e6ea540e.zip opensim-SC-fe46b045f75dec5ecdd0a29273c70df3e6ea540e.tar.gz opensim-SC-fe46b045f75dec5ecdd0a29273c70df3e6ea540e.tar.bz2 opensim-SC-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/ClientView.Grid.cs')
-rw-r--r-- | OpenSim.RegionServer/ClientView.Grid.cs | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/OpenSim.RegionServer/ClientView.Grid.cs b/OpenSim.RegionServer/ClientView.Grid.cs new file mode 100644 index 0000000..a3b191c --- /dev/null +++ b/OpenSim.RegionServer/ClientView.Grid.cs | |||
@@ -0,0 +1,157 @@ | |||
1 | using System; | ||
2 | using System.Collections; | ||
3 | using System.Collections.Generic; | ||
4 | using libsecondlife; | ||
5 | using libsecondlife.Packets; | ||
6 | using Nwc.XmlRpc; | ||
7 | using System.Net; | ||
8 | using System.Net.Sockets; | ||
9 | using System.IO; | ||
10 | using System.Threading; | ||
11 | using System.Timers; | ||
12 | using OpenSim.Framework.Interfaces; | ||
13 | using OpenSim.Framework.Types; | ||
14 | using OpenSim.Framework.Inventory; | ||
15 | using OpenSim.Framework.Utilities; | ||
16 | using OpenSim.world; | ||
17 | using OpenSim.Assets; | ||
18 | |||
19 | namespace OpenSim | ||
20 | { | ||
21 | public partial class ClientView | ||
22 | { | ||
23 | |||
24 | public void EnableNeighbours() | ||
25 | { | ||
26 | if ((this.m_gridServer.GetName() == "Remote") && (!this.m_child)) | ||
27 | { | ||
28 | Hashtable SimParams; | ||
29 | ArrayList SendParams; | ||
30 | XmlRpcRequest GridReq; | ||
31 | XmlRpcResponse GridResp; | ||
32 | List<Packet> enablePackets = new List<Packet>(); | ||
33 | |||
34 | RemoteGridBase gridServer = (RemoteGridBase)this.m_gridServer; | ||
35 | |||
36 | foreach (Hashtable neighbour in gridServer.neighbours) | ||
37 | { | ||
38 | string neighbourIPStr = (string)neighbour["sim_ip"]; | ||
39 | System.Net.IPAddress neighbourIP = System.Net.IPAddress.Parse(neighbourIPStr); | ||
40 | ushort neighbourPort = (ushort)Convert.ToInt32(neighbour["sim_port"]); | ||
41 | string reqUrl = "http://" + neighbourIPStr + ":" + neighbourPort.ToString(); | ||
42 | |||
43 | Console.WriteLine(reqUrl); | ||
44 | |||
45 | SimParams = new Hashtable(); | ||
46 | SimParams["session_id"] = this.SessionID.ToString(); | ||
47 | SimParams["secure_session_id"] = this.SecureSessionID.ToString(); | ||
48 | SimParams["firstname"] = this.ClientAvatar.firstname; | ||
49 | SimParams["lastname"] = this.ClientAvatar.lastname; | ||
50 | SimParams["agent_id"] = this.AgentID.ToString(); | ||
51 | SimParams["circuit_code"] = (Int32)this.CircuitCode; | ||
52 | SimParams["child_agent"] = "1"; | ||
53 | SendParams = new ArrayList(); | ||
54 | SendParams.Add(SimParams); | ||
55 | |||
56 | GridReq = new XmlRpcRequest("expect_user", SendParams); | ||
57 | GridResp = GridReq.Send(reqUrl, 3000); | ||
58 | EnableSimulatorPacket enablesimpacket = new EnableSimulatorPacket(); | ||
59 | enablesimpacket.SimulatorInfo = new EnableSimulatorPacket.SimulatorInfoBlock(); | ||
60 | enablesimpacket.SimulatorInfo.Handle = Helpers.UIntsToLong((uint)(Convert.ToInt32(neighbour["region_locx"]) * 256), (uint)(Convert.ToInt32(neighbour["region_locy"]) * 256)); | ||
61 | |||
62 | |||
63 | byte[] byteIP = neighbourIP.GetAddressBytes(); | ||
64 | enablesimpacket.SimulatorInfo.IP = (uint)byteIP[3] << 24; | ||
65 | enablesimpacket.SimulatorInfo.IP += (uint)byteIP[2] << 16; | ||
66 | enablesimpacket.SimulatorInfo.IP += (uint)byteIP[1] << 8; | ||
67 | enablesimpacket.SimulatorInfo.IP += (uint)byteIP[0]; | ||
68 | enablesimpacket.SimulatorInfo.Port = neighbourPort; | ||
69 | enablePackets.Add(enablesimpacket); | ||
70 | } | ||
71 | Thread.Sleep(3000); | ||
72 | foreach (Packet enable in enablePackets) | ||
73 | { | ||
74 | this.OutPacket(enable); | ||
75 | } | ||
76 | enablePackets.Clear(); | ||
77 | |||
78 | } | ||
79 | } | ||
80 | |||
81 | public void CrossSimBorder(LLVector3 avatarpos) | ||
82 | { // VERY VERY BASIC | ||
83 | |||
84 | LLVector3 newpos = avatarpos; | ||
85 | uint neighbourx = this.m_regionData.RegionLocX; | ||
86 | uint neighboury = this.m_regionData.RegionLocY; | ||
87 | |||
88 | if (avatarpos.X < 0) | ||
89 | { | ||
90 | neighbourx -= 1; | ||
91 | newpos.X = 254; | ||
92 | } | ||
93 | if (avatarpos.X > 255) | ||
94 | { | ||
95 | neighbourx += 1; | ||
96 | newpos.X = 1; | ||
97 | } | ||
98 | if (avatarpos.Y < 0) | ||
99 | { | ||
100 | neighboury -= 1; | ||
101 | newpos.Y = 254; | ||
102 | } | ||
103 | if (avatarpos.Y > 255) | ||
104 | { | ||
105 | neighboury += 1; | ||
106 | newpos.Y = 1; | ||
107 | } | ||
108 | OpenSim.Framework.Console.MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.LOW, "SimClient.cs:CrossSimBorder() - Crossing border to neighbouring sim at [" + neighbourx.ToString() + "," + neighboury.ToString() + "]"); | ||
109 | |||
110 | Hashtable SimParams; | ||
111 | ArrayList SendParams; | ||
112 | XmlRpcRequest GridReq; | ||
113 | XmlRpcResponse GridResp; | ||
114 | foreach (Hashtable borderingSim in ((RemoteGridBase)m_gridServer).neighbours) | ||
115 | { | ||
116 | if (((string)borderingSim["region_locx"]).Equals(neighbourx.ToString()) && ((string)borderingSim["region_locy"]).Equals(neighboury.ToString())) | ||
117 | { | ||
118 | SimParams = new Hashtable(); | ||
119 | SimParams["firstname"] = this.ClientAvatar.firstname; | ||
120 | SimParams["lastname"] = this.ClientAvatar.lastname; | ||
121 | SimParams["circuit_code"] = this.CircuitCode.ToString(); | ||
122 | SimParams["pos_x"] = newpos.X.ToString(); | ||
123 | SimParams["pos_y"] = newpos.Y.ToString(); | ||
124 | SimParams["pos_z"] = newpos.Z.ToString(); | ||
125 | SendParams = new ArrayList(); | ||
126 | SendParams.Add(SimParams); | ||
127 | |||
128 | GridReq = new XmlRpcRequest("agent_crossing", SendParams); | ||
129 | GridResp = GridReq.Send("http://" + borderingSim["sim_ip"] + ":" + borderingSim["sim_port"], 3000); | ||
130 | |||
131 | CrossedRegionPacket NewSimPack = new CrossedRegionPacket(); | ||
132 | NewSimPack.AgentData = new CrossedRegionPacket.AgentDataBlock(); | ||
133 | NewSimPack.AgentData.AgentID = this.AgentID; | ||
134 | NewSimPack.AgentData.SessionID = this.SessionID; | ||
135 | NewSimPack.Info = new CrossedRegionPacket.InfoBlock(); | ||
136 | NewSimPack.Info.Position = newpos; | ||
137 | NewSimPack.Info.LookAt = new LLVector3(0.99f, 0.042f, 0); // copied from Avatar.cs - SHOULD BE DYNAMIC!!!!!!!!!! | ||
138 | NewSimPack.RegionData = new libsecondlife.Packets.CrossedRegionPacket.RegionDataBlock(); | ||
139 | NewSimPack.RegionData.RegionHandle = Helpers.UIntsToLong((uint)(Convert.ToInt32(borderingSim["region_locx"]) * 256), (uint)(Convert.ToInt32(borderingSim["region_locy"]) * 256)); | ||
140 | System.Net.IPAddress neighbourIP = System.Net.IPAddress.Parse((string)borderingSim["sim_ip"]); | ||
141 | byte[] byteIP = neighbourIP.GetAddressBytes(); | ||
142 | NewSimPack.RegionData.SimIP = (uint)byteIP[3] << 24; | ||
143 | NewSimPack.RegionData.SimIP += (uint)byteIP[2] << 16; | ||
144 | NewSimPack.RegionData.SimIP += (uint)byteIP[1] << 8; | ||
145 | NewSimPack.RegionData.SimIP += (uint)byteIP[0]; | ||
146 | NewSimPack.RegionData.SimPort = (ushort)Convert.ToInt32(borderingSim["sim_port"]); | ||
147 | NewSimPack.RegionData.SeedCapability = new byte[0]; | ||
148 | lock (PacketQueue) | ||
149 | { | ||
150 | ProcessOutPacket(NewSimPack); | ||
151 | DowngradeClient(); | ||
152 | } | ||
153 | } | ||
154 | } | ||
155 | } | ||
156 | } | ||
157 | } | ||