mirror of
https://github.com/opensim/opensim.git
synced 2026-08-05 08:55:56 +08:00
* Yet some more connectivity restructuring
* We now have CloseAllAgents( circuit ) and CloseAllCircuits( agentId ) for great justice ( but alas, still only closing on one single scene - be brave! ) * Login and ConnectionClosed now eventified and moveified awayified * Killed off unused NullClientAPI * Now the client is almost only responsible for its own closing. ( I will get that scene out of there ) * Lookin' good!
This commit is contained in:
@@ -42,6 +42,8 @@ namespace OpenSim.Region.ClientStack
|
||||
{
|
||||
partial class ClientView
|
||||
{
|
||||
public event Action<IClientAPI> OnLogout;
|
||||
public event Action<IClientAPI> OnConnectionClosed;
|
||||
public event ViewerEffectEventHandler OnViewerEffect;
|
||||
public event ImprovedInstantMessage OnInstantMessage;
|
||||
public event ChatFromViewer OnChatFromViewer;
|
||||
@@ -373,7 +375,7 @@ namespace OpenSim.Region.ClientStack
|
||||
agentData.AgentID = this.AgentId;
|
||||
agentData.SessionID = this.m_sessionId;
|
||||
agentData.SecureSessionID = this.SecureSessionID;
|
||||
agentData.circuitcode = this.CircuitCode;
|
||||
agentData.circuitcode = this.m_circuitCode;
|
||||
agentData.child = false;
|
||||
agentData.firstname = this.firstName;
|
||||
agentData.lastname = this.lastName;
|
||||
|
||||
@@ -56,19 +56,12 @@ namespace OpenSim.Region.ClientStack
|
||||
|
||||
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;
|
||||
logReply.AgentData.SessionID = this.m_sessionId;
|
||||
logReply.InventoryData = new LogoutReplyPacket.InventoryDataBlock[1];
|
||||
logReply.InventoryData[0] = new LogoutReplyPacket.InventoryDataBlock();
|
||||
logReply.InventoryData[0].ItemID = LLUUID.Zero;
|
||||
OutPacket(logReply);
|
||||
//
|
||||
this.Close();
|
||||
|
||||
if( OnLogout != null )
|
||||
{
|
||||
OnLogout(client);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -51,11 +51,17 @@ namespace OpenSim.Region.ClientStack
|
||||
protected const int RESEND_TIMEOUT = 4000;
|
||||
protected const int MAX_SEQUENCE = 0xFFFFFF;
|
||||
|
||||
public uint CircuitCode;
|
||||
private uint m_circuitCode;
|
||||
public EndPoint userEP;
|
||||
|
||||
protected PacketServer m_networkServer;
|
||||
|
||||
public uint CircuitCode
|
||||
{
|
||||
get { return m_circuitCode; }
|
||||
set { m_circuitCode = value; }
|
||||
}
|
||||
|
||||
protected virtual void ProcessOutPacket(Packet Pack)
|
||||
{
|
||||
// Keep track of when this packet was sent out
|
||||
@@ -142,11 +148,11 @@ namespace OpenSim.Region.ClientStack
|
||||
if (Pack.Header.Zerocoded)
|
||||
{
|
||||
int packetsize = Helpers.ZeroEncode(sendbuffer, sendbuffer.Length, ZeroOutBuffer);
|
||||
m_networkServer.SendPacketTo(ZeroOutBuffer, packetsize, SocketFlags.None, CircuitCode);//userEP);
|
||||
m_networkServer.SendPacketTo(ZeroOutBuffer, packetsize, SocketFlags.None, m_circuitCode);//userEP);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_networkServer.SendPacketTo(sendbuffer, sendbuffer.Length, SocketFlags.None, CircuitCode); //userEP);
|
||||
m_networkServer.SendPacketTo(sendbuffer, sendbuffer.Length, SocketFlags.None, m_circuitCode); //userEP);
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
|
||||
@@ -133,8 +133,6 @@ namespace OpenSim.Region.ClientStack
|
||||
|
||||
m_scene.RemoveClient(this.AgentId);
|
||||
|
||||
m_clientManager.Remove(this.CircuitCode); // TODO: Move out and delete ref to clientmanager.
|
||||
m_networkServer.RemoveClientCircuit(this.CircuitCode);
|
||||
this.ClientThread.Abort();
|
||||
}
|
||||
|
||||
@@ -215,7 +213,7 @@ namespace OpenSim.Region.ClientStack
|
||||
} else {
|
||||
info = packet.Type.ToString();
|
||||
}
|
||||
Console.WriteLine(CircuitCode + ":" + direction + ": " + info);
|
||||
Console.WriteLine(m_circuitCode + ":" + direction + ": " + info);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -252,8 +250,10 @@ namespace OpenSim.Region.ClientStack
|
||||
probesWithNoIngressPackets++;
|
||||
if (probesWithNoIngressPackets > 30)
|
||||
{
|
||||
// Refactor out this into an OnConnectionClosed so the ClientManager can clean up
|
||||
this.Close();
|
||||
if( OnConnectionClosed != null )
|
||||
{
|
||||
OnConnectionClosed(this);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -283,7 +283,7 @@ namespace OpenSim.Region.ClientStack
|
||||
|
||||
protected virtual void AuthUser()
|
||||
{
|
||||
// AuthenticateResponse sessionInfo = m_gridServer.AuthenticateSession(cirpack.CircuitCode.m_sessionId, cirpack.CircuitCode.ID, cirpack.CircuitCode.Code);
|
||||
// AuthenticateResponse sessionInfo = m_gridServer.AuthenticateSession(cirpack.m_circuitCode.m_sessionId, cirpack.m_circuitCode.ID, cirpack.m_circuitCode.Code);
|
||||
AuthenticateResponse sessionInfo = this.m_authenticateSessionsHandler.AuthenticateSession(cirpack.CircuitCode.SessionID, cirpack.CircuitCode.ID, cirpack.CircuitCode.Code);
|
||||
if (!sessionInfo.Authorised)
|
||||
{
|
||||
@@ -297,7 +297,7 @@ namespace OpenSim.Region.ClientStack
|
||||
//session is authorised
|
||||
m_agentId = cirpack.CircuitCode.ID;
|
||||
this.m_sessionId = cirpack.CircuitCode.SessionID;
|
||||
this.CircuitCode = cirpack.CircuitCode.Code;
|
||||
this.m_circuitCode = cirpack.CircuitCode.Code;
|
||||
this.firstName = sessionInfo.LoginInfo.First;
|
||||
this.lastName = sessionInfo.LoginInfo.Last;
|
||||
|
||||
|
||||
@@ -33,14 +33,15 @@ using OpenSim.Framework;
|
||||
using OpenSim.Framework.Types;
|
||||
using OpenSim.Framework.Interfaces;
|
||||
using OpenSim.Framework.Communications.Caches;
|
||||
using libsecondlife;
|
||||
|
||||
namespace OpenSim.Region.ClientStack
|
||||
{
|
||||
public class PacketServer
|
||||
{
|
||||
private ClientStackNetworkHandler _networkHandler;
|
||||
private ClientStackNetworkHandler m_networkHandler;
|
||||
private IScene _localScene;
|
||||
private ClientManager m_clientManager = new ClientManager();
|
||||
private readonly ClientManager m_clientManager = new ClientManager();
|
||||
public ClientManager ClientManager
|
||||
{
|
||||
get { return m_clientManager; }
|
||||
@@ -48,8 +49,8 @@ namespace OpenSim.Region.ClientStack
|
||||
|
||||
public PacketServer(ClientStackNetworkHandler networkHandler)
|
||||
{
|
||||
_networkHandler = networkHandler;
|
||||
_networkHandler.RegisterPacketServer(this);
|
||||
m_networkHandler = networkHandler;
|
||||
m_networkHandler.RegisterPacketServer(this);
|
||||
}
|
||||
|
||||
public IScene LocalScene
|
||||
@@ -70,11 +71,6 @@ namespace OpenSim.Region.ClientStack
|
||||
m_clientManager.InPacket(circuitCode, packet);
|
||||
}
|
||||
|
||||
public virtual void ConnectionClosed(uint circuitCode)
|
||||
{
|
||||
m_clientManager.ConnectionClosed(circuitCode);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
@@ -145,10 +141,24 @@ namespace OpenSim.Region.ClientStack
|
||||
this.m_clientManager.Add(useCircuit.CircuitCode.Code, newuser);
|
||||
|
||||
newuser.OnViewerEffect += m_clientManager.ViewerEffectHandler;
|
||||
newuser.OnLogout += LogoutHandler;
|
||||
newuser.OnConnectionClosed += CloseClient;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public void LogoutHandler(IClientAPI client)
|
||||
{
|
||||
LogoutReplyPacket logReply = new LogoutReplyPacket();
|
||||
logReply.AgentData.AgentID = client.AgentId;
|
||||
logReply.AgentData.SessionID = client.SessionId;
|
||||
logReply.InventoryData = new LogoutReplyPacket.InventoryDataBlock[1];
|
||||
logReply.InventoryData[0] = new LogoutReplyPacket.InventoryDataBlock();
|
||||
logReply.InventoryData[0].ItemID = LLUUID.Zero;
|
||||
client.OutPacket(logReply);
|
||||
|
||||
CloseClient( client );
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
@@ -160,17 +170,22 @@ namespace OpenSim.Region.ClientStack
|
||||
/// <param name="circuitcode"></param>
|
||||
public virtual void SendPacketTo(byte[] buffer, int size, SocketFlags flags, uint circuitcode)
|
||||
{
|
||||
this._networkHandler.SendPacketTo(buffer, size, flags, circuitcode);
|
||||
this.m_networkHandler.SendPacketTo(buffer, size, flags, circuitcode);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="circuitcode"></param>
|
||||
public virtual void RemoveClientCircuit(uint circuitcode)
|
||||
public virtual void CloseCircuit(uint circuitcode)
|
||||
{
|
||||
this._networkHandler.RemoveClientCircuit(circuitcode);
|
||||
this.m_clientManager.Remove(circuitcode);
|
||||
m_networkHandler.RemoveClientCircuit( circuitcode );
|
||||
m_clientManager.CloseAllAgents( circuitcode );
|
||||
}
|
||||
|
||||
public virtual void CloseClient( IClientAPI client )
|
||||
{
|
||||
CloseCircuit( client.CircuitCode );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,7 +49,7 @@ namespace OpenSim.Region.ClientStack
|
||||
protected IPEndPoint ipeSender;
|
||||
protected EndPoint epSender;
|
||||
protected AsyncCallback ReceivedData;
|
||||
protected PacketServer _packetServer;
|
||||
protected PacketServer m_packetServer;
|
||||
|
||||
protected int listenPort;
|
||||
protected IScene m_localScene;
|
||||
@@ -61,11 +61,11 @@ namespace OpenSim.Region.ClientStack
|
||||
{
|
||||
get
|
||||
{
|
||||
return _packetServer;
|
||||
return m_packetServer;
|
||||
}
|
||||
set
|
||||
{
|
||||
_packetServer = value;
|
||||
m_packetServer = value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,7 +74,7 @@ namespace OpenSim.Region.ClientStack
|
||||
set
|
||||
{
|
||||
this.m_localScene = value;
|
||||
this._packetServer.LocalScene = this.m_localScene;
|
||||
this.m_packetServer.LocalScene = this.m_localScene;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,7 +111,9 @@ namespace OpenSim.Region.ClientStack
|
||||
catch (System.Net.Sockets.SocketException)
|
||||
{
|
||||
Console.WriteLine("Remote host Closed connection");
|
||||
this._packetServer.ConnectionClosed(this.clientCircuits[epSender]);
|
||||
|
||||
this.m_packetServer.CloseCircuit(this.clientCircuits[epSender]);
|
||||
|
||||
ipeSender = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 0);
|
||||
epSender = (EndPoint)ipeSender;
|
||||
Server.BeginReceiveFrom(RecvBuffer, 0, RecvBuffer.Length, SocketFlags.None, ref epSender, ReceivedData, null);
|
||||
@@ -126,7 +128,7 @@ namespace OpenSim.Region.ClientStack
|
||||
if (this.clientCircuits.ContainsKey(epSender))
|
||||
{
|
||||
//if so then send packet to the packetserver
|
||||
this._packetServer.InPacket(this.clientCircuits[epSender], packet);
|
||||
this.m_packetServer.InPacket(this.clientCircuits[epSender], packet);
|
||||
}
|
||||
else if (packet.Type == PacketType.UseCircuitCode)
|
||||
{
|
||||
@@ -170,7 +172,7 @@ namespace OpenSim.Region.ClientStack
|
||||
|
||||
public virtual void RegisterPacketServer(PacketServer server)
|
||||
{
|
||||
this._packetServer = server;
|
||||
this.m_packetServer = server;
|
||||
}
|
||||
|
||||
public virtual void SendPacketTo(byte[] buffer, int size, SocketFlags flags, uint circuitcode)//EndPoint packetSender)
|
||||
|
||||
Reference in New Issue
Block a user