From 0bac4b430c264741b7f9e63b5d8fb781ba306c68 Mon Sep 17 00:00:00 2001 From: lbsa71 Date: Tue, 18 Sep 2007 12:13:44 +0000 Subject: * Handlerized ViewerEffect * Now there-is-only-client-manager * First step towards moving Logout and ConnectionClosed out of Client and into something else (which will let us get rid of ClientView reference to ClientManager * General posititvity, peace, love and understanding --- OpenSim/Region/ClientStack/ClientView.API.cs | 1 + .../ClientStack/ClientView.PacketHandlers.cs | 44 +++++++++++++++------- .../ClientStack/ClientView.ProcessPackets.cs | 13 ------- OpenSim/Region/ClientStack/ClientView.cs | 20 ++++------ OpenSim/Region/ClientStack/PacketServer.cs | 28 ++++++-------- OpenSim/Region/ClientStack/UDPServer.cs | 2 +- 6 files changed, 51 insertions(+), 57 deletions(-) (limited to 'OpenSim/Region/ClientStack') diff --git a/OpenSim/Region/ClientStack/ClientView.API.cs b/OpenSim/Region/ClientStack/ClientView.API.cs index 9d5a9e8..a15a964 100644 --- a/OpenSim/Region/ClientStack/ClientView.API.cs +++ b/OpenSim/Region/ClientStack/ClientView.API.cs @@ -42,6 +42,7 @@ namespace OpenSim.Region.ClientStack { partial class ClientView { + public event ViewerEffectEventHandler OnViewerEffect; public event ImprovedInstantMessage OnInstantMessage; public event ChatFromViewer OnChatFromViewer; public event RezObject OnRezObject; diff --git a/OpenSim/Region/ClientStack/ClientView.PacketHandlers.cs b/OpenSim/Region/ClientStack/ClientView.PacketHandlers.cs index 71fea0d..65ad431 100644 --- a/OpenSim/Region/ClientStack/ClientView.PacketHandlers.cs +++ b/OpenSim/Region/ClientStack/ClientView.PacketHandlers.cs @@ -37,13 +37,28 @@ namespace OpenSim.Region.ClientStack protected virtual void RegisterLocalPacketHandlers() { this.AddLocalPacketHandler(PacketType.LogoutRequest, this.Logout); + this.AddLocalPacketHandler(PacketType.ViewerEffect, this.HandleViewerEffect); this.AddLocalPacketHandler(PacketType.AgentCachedTexture, this.AgentTextureCached); this.AddLocalPacketHandler(PacketType.MultipleObjectUpdate, this.MultipleObjUpdate); } - protected virtual bool Logout(IClientAPI simClient, Packet packet) + private bool HandleViewerEffect(IClientAPI sender, Packet Pack) { - MainLog.Instance.Verbose( "OpenSimClient.cs:ProcessInPacket() - Got a logout request"); + ViewerEffectPacket viewer = (ViewerEffectPacket)Pack; + + if( OnViewerEffect != null ) + { + OnViewerEffect(sender, viewer.Effect); + } + + return true; + } + + protected virtual bool Logout(IClientAPI client, Packet packet) + { + // TODO: Refactor out this into an OnLogout so the ClientManager can close all clients. + + MainLog.Instance.Verbose("OpenSimClient.cs:ProcessInPacket() - Got a logout request"); //send reply to let the client logout LogoutReplyPacket logReply = new LogoutReplyPacket(); logReply.AgentData.AgentID = this.AgentId; @@ -52,8 +67,9 @@ namespace OpenSim.Region.ClientStack logReply.InventoryData[0] = new LogoutReplyPacket.InventoryDataBlock(); logReply.InventoryData[0].ItemID = LLUUID.Zero; OutPacket(logReply); - // - this.KillClient(); + // + this.Close(); + return true; } @@ -81,7 +97,7 @@ namespace OpenSim.Region.ClientStack protected bool MultipleObjUpdate(IClientAPI simClient, Packet packet) { MultipleObjectUpdatePacket multipleupdate = (MultipleObjectUpdatePacket)packet; - // System.Console.WriteLine("new multi update packet " + multipleupdate.ToString()); + // System.Console.WriteLine("new multi update packet " + multipleupdate.ToString()); for (int i = 0; i < multipleupdate.ObjectData.Length; i++) { #region position @@ -99,7 +115,7 @@ namespace OpenSim.Region.ClientStack if (OnUpdatePrimSinglePosition != null) { libsecondlife.LLVector3 pos = new LLVector3(multipleupdate.ObjectData[i].Data, 0); - // System.Console.WriteLine("new movement position is " + pos.X + " , " + pos.Y + " , " + pos.Z); + // System.Console.WriteLine("new movement position is " + pos.X + " , " + pos.Y + " , " + pos.Z); OnUpdatePrimSinglePosition(multipleupdate.ObjectData[i].ObjectLocalID, pos, this); } } @@ -128,7 +144,7 @@ namespace OpenSim.Region.ClientStack if (OnUpdatePrimGroupRotation != null) { libsecondlife.LLQuaternion rot = new LLQuaternion(multipleupdate.ObjectData[i].Data, 0, true); - // Console.WriteLine("new rotation is " + rot.X + " , " + rot.Y + " , " + rot.Z + " , " + rot.W); + // Console.WriteLine("new rotation is " + rot.X + " , " + rot.Y + " , " + rot.Z + " , " + rot.W); OnUpdatePrimGroupRotation(multipleupdate.ObjectData[i].ObjectLocalID, rot, this); } } @@ -139,7 +155,7 @@ namespace OpenSim.Region.ClientStack libsecondlife.LLVector3 pos = new LLVector3(multipleupdate.ObjectData[i].Data, 0); libsecondlife.LLQuaternion rot = new LLQuaternion(multipleupdate.ObjectData[i].Data, 12, true); //Console.WriteLine("new rotation position is " + pos.X + " , " + pos.Y + " , " + pos.Z); - // Console.WriteLine("new rotation is " + rot.X + " , " + rot.Y + " , " + rot.Z + " , " + rot.W); + // Console.WriteLine("new rotation is " + rot.X + " , " + rot.Y + " , " + rot.Z + " , " + rot.W); OnUpdatePrimGroupMouseRotation(multipleupdate.ObjectData[i].ObjectLocalID, pos, rot, this); } } @@ -164,10 +180,10 @@ namespace OpenSim.Region.ClientStack if (OnUpdatePrimScale != null) { libsecondlife.LLVector3 scale = new LLVector3(multipleupdate.ObjectData[i].Data, 12); - // Console.WriteLine("new scale is " + scale.X + " , " + scale.Y + " , " + scale.Z ); - OnUpdatePrimScale(multipleupdate.ObjectData[i].ObjectLocalID, scale, this); - libsecondlife.LLVector3 pos = new LLVector3(multipleupdate.ObjectData[i].Data, 0); - OnUpdatePrimSinglePosition(multipleupdate.ObjectData[i].ObjectLocalID, pos, this); + // Console.WriteLine("new scale is " + scale.X + " , " + scale.Y + " , " + scale.Z ); + OnUpdatePrimScale(multipleupdate.ObjectData[i].ObjectLocalID, scale, this); + libsecondlife.LLVector3 pos = new LLVector3(multipleupdate.ObjectData[i].Data, 0); + OnUpdatePrimSinglePosition(multipleupdate.ObjectData[i].ObjectLocalID, pos, this); } } else if (multipleupdate.ObjectData[i].Type == 5)//single prim scale from object tab @@ -175,7 +191,7 @@ namespace OpenSim.Region.ClientStack if (OnUpdatePrimScale != null) { libsecondlife.LLVector3 scale = new LLVector3(multipleupdate.ObjectData[i].Data, 12); - // Console.WriteLine("new scale is " + scale.X + " , " + scale.Y + " , " + scale.Z); + // Console.WriteLine("new scale is " + scale.X + " , " + scale.Y + " , " + scale.Z); OnUpdatePrimScale(multipleupdate.ObjectData[i].ObjectLocalID, scale, this); } } @@ -184,7 +200,7 @@ namespace OpenSim.Region.ClientStack if (OnUpdatePrimScale != null) { libsecondlife.LLVector3 scale = new LLVector3(multipleupdate.ObjectData[i].Data, 12); - // Console.WriteLine("new scale is " + scale.X + " , " + scale.Y + " , " + scale.Z); + // Console.WriteLine("new scale is " + scale.X + " , " + scale.Y + " , " + scale.Z); OnUpdatePrimScale(multipleupdate.ObjectData[i].ObjectLocalID, scale, this); } } diff --git a/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs b/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs index 95ce3c5..009ddac 100644 --- a/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs +++ b/OpenSim/Region/ClientStack/ClientView.ProcessPackets.cs @@ -75,19 +75,6 @@ namespace OpenSim.Region.ClientStack switch (Pack.Type) { - case PacketType.ViewerEffect: - ViewerEffectPacket viewer = (ViewerEffectPacket)Pack; - foreach (IClientAPI client in m_clientThreads.Values) - { - if (client.AgentId != this.AgentId) - { - viewer.AgentData.AgentID = client.AgentId; - viewer.AgentData.SessionID = client.SessionId; - client.OutPacket(viewer); - } - } - break; - #region Scene/Avatar case PacketType.AvatarPropertiesRequest: AvatarPropertiesRequestPacket avatarProperties = (AvatarPropertiesRequestPacket)Pack; diff --git a/OpenSim/Region/ClientStack/ClientView.cs b/OpenSim/Region/ClientStack/ClientView.cs index 2bff88a..f8ac1d8 100644 --- a/OpenSim/Region/ClientStack/ClientView.cs +++ b/OpenSim/Region/ClientStack/ClientView.cs @@ -71,7 +71,7 @@ namespace OpenSim.Region.ClientStack private LLUUID newAssetFolder = LLUUID.Zero; private int debug = 0; protected IScene m_scene; - private Dictionary m_clientThreads; + private ClientManager m_clientManager; private AssetCache m_assetCache; // private InventoryCache m_inventoryCache; private int cachedtextureserial = 0; @@ -83,12 +83,12 @@ namespace OpenSim.Region.ClientStack private int probesWithNoIngressPackets = 0; private int lastPacketsReceived = 0; - public ClientView(EndPoint remoteEP, UseCircuitCodePacket initialcirpack, Dictionary clientThreads, IScene scene, AssetCache assetCache, PacketServer packServer, AgentCircuitManager authenSessions) + public ClientView(EndPoint remoteEP, UseCircuitCodePacket initialcirpack, ClientManager clientManager, IScene scene, AssetCache assetCache, PacketServer packServer, AgentCircuitManager authenSessions) { m_moneyBalance = 1000; m_scene = scene; - m_clientThreads = clientThreads; + m_clientManager = clientManager; m_assetCache = assetCache; m_networkServer = packServer; @@ -127,24 +127,17 @@ namespace OpenSim.Region.ClientStack # region Client Methods - public void KillClient() + public void Close() { clientPingTimer.Stop(); m_scene.RemoveClient(this.AgentId); - m_clientThreads.Remove(this.CircuitCode); + m_clientManager.Remove(this.CircuitCode); // TODO: Move out and delete ref to clientmanager. m_networkServer.RemoveClientCircuit(this.CircuitCode); this.ClientThread.Abort(); } - public void ConnectionClosed() - { - clientPingTimer.Stop(); - m_clientThreads.Remove(this.CircuitCode); - m_networkServer.RemoveClientCircuit(this.CircuitCode); - this.ClientThread.Abort(); - } #endregion # region Packet Handling @@ -259,7 +252,8 @@ namespace OpenSim.Region.ClientStack probesWithNoIngressPackets++; if (probesWithNoIngressPackets > 30) { - this.KillClient(); + // Refactor out this into an OnConnectionClosed so the ClientManager can clean up + this.Close(); } else { diff --git a/OpenSim/Region/ClientStack/PacketServer.cs b/OpenSim/Region/ClientStack/PacketServer.cs index 481e445..bceeeb3 100644 --- a/OpenSim/Region/ClientStack/PacketServer.cs +++ b/OpenSim/Region/ClientStack/PacketServer.cs @@ -40,7 +40,6 @@ namespace OpenSim.Region.ClientStack { private ClientStackNetworkHandler _networkHandler; private IScene _localScene; - public Dictionary ClientThreads = new Dictionary(); private ClientManager m_clientManager = new ClientManager(); public ClientManager ClientManager { @@ -66,20 +65,14 @@ namespace OpenSim.Region.ClientStack /// /// /// - public virtual void ClientInPacket(uint circuitCode, Packet packet) + public virtual void InPacket(uint circuitCode, Packet packet) { - if (this.ClientThreads.ContainsKey(circuitCode)) - { - ClientThreads[circuitCode].InPacket(packet); - } + m_clientManager.InPacket(circuitCode, packet); } public virtual void ConnectionClosed(uint circuitCode) { - if (this.ClientThreads.ContainsKey(circuitCode)) - { - ClientThreads[circuitCode].ConnectionClosed(); - } + m_clientManager.ConnectionClosed(circuitCode); } /// @@ -129,9 +122,9 @@ namespace OpenSim.Region.ClientStack } - protected virtual IClientAPI CreateNewClient(EndPoint remoteEP, UseCircuitCodePacket initialcirpack, Dictionary clientThreads, IScene scene, AssetCache assetCache, PacketServer packServer, AgentCircuitManager authenSessions) + protected virtual IClientAPI CreateNewClient(EndPoint remoteEP, UseCircuitCodePacket initialcirpack, ClientManager clientManager, IScene scene, AssetCache assetCache, PacketServer packServer, AgentCircuitManager authenSessions) { - return new ClientView(remoteEP, initialcirpack, clientThreads, scene, assetCache, packServer, authenSessions ); + return new ClientView(remoteEP, initialcirpack, clientManager, scene, assetCache, packServer, authenSessions ); } /// @@ -146,15 +139,18 @@ namespace OpenSim.Region.ClientStack public virtual bool AddNewClient(EndPoint epSender, UseCircuitCodePacket useCircuit, AssetCache assetCache, AgentCircuitManager authenticateSessionsClass) { IClientAPI newuser = - CreateNewClient(epSender, useCircuit, ClientThreads, _localScene, assetCache, this, + CreateNewClient(epSender, useCircuit, m_clientManager, _localScene, assetCache, this, authenticateSessionsClass); - - this.ClientThreads.Add(useCircuit.CircuitCode.Code, newuser); - this.m_clientManager.Add(useCircuit.CircuitCode.Code, (IClientAPI)newuser); + + this.m_clientManager.Add(useCircuit.CircuitCode.Code, newuser); + + newuser.OnViewerEffect += m_clientManager.ViewerEffectHandler; return true; } + + /// /// /// diff --git a/OpenSim/Region/ClientStack/UDPServer.cs b/OpenSim/Region/ClientStack/UDPServer.cs index 10ae6ee..efc9c87 100644 --- a/OpenSim/Region/ClientStack/UDPServer.cs +++ b/OpenSim/Region/ClientStack/UDPServer.cs @@ -126,7 +126,7 @@ namespace OpenSim.Region.ClientStack if (this.clientCircuits.ContainsKey(epSender)) { //if so then send packet to the packetserver - this._packetServer.ClientInPacket(this.clientCircuits[epSender], packet); + this._packetServer.InPacket(this.clientCircuits[epSender], packet); } else if (packet.Type == PacketType.UseCircuitCode) { -- cgit v1.1