Changes properties to use automatic property initializers
This commit is contained in:
parent
f0a48ad431
commit
06fa31a7bf
623 changed files with 13072 additions and 19304 deletions
|
|
@ -24,11 +24,7 @@ namespace Server.Network
|
|||
{
|
||||
public class BufferPool
|
||||
{
|
||||
private static List<BufferPool> m_Pools = new List<BufferPool>();
|
||||
|
||||
public static List<BufferPool> Pools{ get => m_Pools;
|
||||
set => m_Pools = value;
|
||||
}
|
||||
public static List<BufferPool> Pools { get; set; } = new List<BufferPool>();
|
||||
|
||||
private string m_Name;
|
||||
|
||||
|
|
@ -64,8 +60,8 @@ namespace Server.Network
|
|||
for ( int i = 0; i < initialCapacity; ++i )
|
||||
m_FreeBuffers.Enqueue( new byte[bufferSize] );
|
||||
|
||||
lock ( m_Pools )
|
||||
m_Pools.Add( this );
|
||||
lock ( Pools )
|
||||
Pools.Add( this );
|
||||
}
|
||||
|
||||
public byte[] AcquireBuffer()
|
||||
|
|
@ -95,8 +91,8 @@ namespace Server.Network
|
|||
|
||||
public void Free()
|
||||
{
|
||||
lock ( m_Pools )
|
||||
m_Pools.Remove( this );
|
||||
lock ( Pools )
|
||||
Pools.Remove( this );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -26,11 +26,10 @@ namespace Server.Network
|
|||
{
|
||||
private int m_Head;
|
||||
private int m_Tail;
|
||||
private int m_Size;
|
||||
|
||||
private byte[] m_Buffer;
|
||||
|
||||
public int Length => m_Size;
|
||||
public int Length { get; private set; }
|
||||
|
||||
public ByteQueue()
|
||||
{
|
||||
|
|
@ -41,18 +40,18 @@ namespace Server.Network
|
|||
{
|
||||
m_Head = 0;
|
||||
m_Tail = 0;
|
||||
m_Size = 0;
|
||||
Length = 0;
|
||||
}
|
||||
|
||||
private void SetCapacity( int capacity )
|
||||
{
|
||||
byte[] newBuffer = new byte[capacity];
|
||||
|
||||
if ( m_Size > 0 )
|
||||
if ( Length > 0 )
|
||||
{
|
||||
if ( m_Head < m_Tail )
|
||||
{
|
||||
Buffer.BlockCopy( m_Buffer, m_Head, newBuffer, 0, m_Size );
|
||||
Buffer.BlockCopy( m_Buffer, m_Head, newBuffer, 0, Length );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -62,13 +61,13 @@ namespace Server.Network
|
|||
}
|
||||
|
||||
m_Head = 0;
|
||||
m_Tail = m_Size;
|
||||
m_Tail = Length;
|
||||
m_Buffer = newBuffer;
|
||||
}
|
||||
|
||||
public byte GetPacketID()
|
||||
{
|
||||
if ( m_Size >= 1 )
|
||||
if ( Length >= 1 )
|
||||
return m_Buffer[m_Head];
|
||||
|
||||
return 0xFF;
|
||||
|
|
@ -76,7 +75,7 @@ namespace Server.Network
|
|||
|
||||
public int GetPacketLength()
|
||||
{
|
||||
if ( m_Size >= 3 )
|
||||
if ( Length >= 3 )
|
||||
return (m_Buffer[(m_Head + 1) % m_Buffer.Length] << 8) | m_Buffer[(m_Head + 2) % m_Buffer.Length];
|
||||
|
||||
return 0;
|
||||
|
|
@ -84,8 +83,8 @@ namespace Server.Network
|
|||
|
||||
public int Dequeue( byte[] buffer, int offset, int size )
|
||||
{
|
||||
if ( size > m_Size )
|
||||
size = m_Size;
|
||||
if ( size > Length )
|
||||
size = Length;
|
||||
|
||||
if ( size == 0 )
|
||||
return 0;
|
||||
|
|
@ -110,9 +109,9 @@ namespace Server.Network
|
|||
}
|
||||
|
||||
m_Head = ( m_Head + size ) % m_Buffer.Length;
|
||||
m_Size -= size;
|
||||
Length -= size;
|
||||
|
||||
if ( m_Size == 0 )
|
||||
if ( Length == 0 )
|
||||
{
|
||||
m_Head = 0;
|
||||
m_Tail = 0;
|
||||
|
|
@ -123,8 +122,8 @@ namespace Server.Network
|
|||
|
||||
public void Enqueue( byte[] buffer, int offset, int size )
|
||||
{
|
||||
if ( (m_Size + size) > m_Buffer.Length )
|
||||
SetCapacity( (m_Size + size + 2047) & ~2047 );
|
||||
if ( (Length + size) > m_Buffer.Length )
|
||||
SetCapacity( (Length + size + 2047) & ~2047 );
|
||||
|
||||
if ( m_Head < m_Tail )
|
||||
{
|
||||
|
|
@ -146,7 +145,7 @@ namespace Server.Network
|
|||
}
|
||||
|
||||
m_Tail = ( m_Tail + size ) % m_Buffer.Length;
|
||||
m_Size += size;
|
||||
Length += size;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -24,21 +24,17 @@ namespace Server.Network
|
|||
|
||||
public class EncodedPacketHandler
|
||||
{
|
||||
private int m_PacketID;
|
||||
private bool m_Ingame;
|
||||
private OnEncodedPacketReceive m_OnReceive;
|
||||
|
||||
public EncodedPacketHandler( int packetID, bool ingame, OnEncodedPacketReceive onReceive )
|
||||
{
|
||||
m_PacketID = packetID;
|
||||
m_Ingame = ingame;
|
||||
m_OnReceive = onReceive;
|
||||
PacketID = packetID;
|
||||
Ingame = ingame;
|
||||
OnReceive = onReceive;
|
||||
}
|
||||
|
||||
public int PacketID => m_PacketID;
|
||||
public int PacketID { get; }
|
||||
|
||||
public OnEncodedPacketReceive OnReceive => m_OnReceive;
|
||||
public OnEncodedPacketReceive OnReceive { get; }
|
||||
|
||||
public bool Ingame => m_Ingame;
|
||||
public bool Ingame { get; }
|
||||
}
|
||||
}
|
||||
|
|
@ -43,12 +43,7 @@ namespace Server.Network
|
|||
|
||||
private static Socket[] m_EmptySockets = new Socket[0];
|
||||
|
||||
private static IPEndPoint[] m_EndPoints;
|
||||
|
||||
public static IPEndPoint[] EndPoints {
|
||||
get => m_EndPoints;
|
||||
set => m_EndPoints = value;
|
||||
}
|
||||
public static IPEndPoint[] EndPoints { get; set; }
|
||||
|
||||
public Listener( IPEndPoint ipep )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -29,7 +29,6 @@ namespace Server.Network
|
|||
{
|
||||
public class MessagePump
|
||||
{
|
||||
private Listener[] m_Listeners;
|
||||
private Queue<NetState> m_Queue;
|
||||
private Queue<NetState> m_WorkingQueue;
|
||||
private Queue<NetState> m_Throttled;
|
||||
|
|
@ -38,7 +37,7 @@ namespace Server.Network
|
|||
{
|
||||
IPEndPoint[] ipep = Listener.EndPoints;
|
||||
|
||||
m_Listeners = new Listener[ipep.Length];
|
||||
Listeners = new Listener[ipep.Length];
|
||||
|
||||
bool success = false;
|
||||
|
||||
|
|
@ -47,7 +46,7 @@ namespace Server.Network
|
|||
Listener l = new Listener( ipep[i] );
|
||||
if ( !success && l != null )
|
||||
success = true;
|
||||
m_Listeners[i] = l;
|
||||
Listeners[i] = l;
|
||||
}
|
||||
|
||||
if ( !success ) {
|
||||
|
|
@ -61,29 +60,25 @@ namespace Server.Network
|
|||
m_Throttled = new Queue<NetState>();
|
||||
}
|
||||
|
||||
public Listener[] Listeners
|
||||
{
|
||||
get => m_Listeners;
|
||||
set => m_Listeners = value;
|
||||
}
|
||||
public Listener[] Listeners { get; set; }
|
||||
|
||||
public void AddListener( Listener l )
|
||||
{
|
||||
Listener[] old = m_Listeners;
|
||||
Listener[] old = Listeners;
|
||||
|
||||
m_Listeners = new Listener[old.Length + 1];
|
||||
Listeners = new Listener[old.Length + 1];
|
||||
|
||||
for ( int i = 0; i < old.Length; ++i )
|
||||
m_Listeners[i] = old[i];
|
||||
Listeners[i] = old[i];
|
||||
|
||||
m_Listeners[old.Length] = l;
|
||||
Listeners[old.Length] = l;
|
||||
}
|
||||
|
||||
private void CheckListener()
|
||||
{
|
||||
for ( int j = 0; j < m_Listeners.Length; ++j )
|
||||
for ( int j = 0; j < Listeners.Length; ++j )
|
||||
{
|
||||
Socket[] accepted = m_Listeners[j].Slice();
|
||||
Socket[] accepted = Listeners[j].Slice();
|
||||
|
||||
for ( int i = 0; i < accepted.Length; ++i )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -41,13 +41,8 @@ namespace Server.Network {
|
|||
public delegate void NetStateCreatedCallback( NetState ns );
|
||||
|
||||
public class NetState : IComparable<NetState> {
|
||||
private Socket m_Socket;
|
||||
private IPAddress m_Address;
|
||||
private ByteQueue m_Buffer;
|
||||
private byte[] m_RecvBuffer;
|
||||
private SendQueue m_SendQueue;
|
||||
private bool m_Seeded;
|
||||
private bool m_Running;
|
||||
|
||||
#if NewAsyncSockets
|
||||
private SocketAsyncEventArgs m_ReceiveEventArgs, m_SendEventArgs;
|
||||
|
|
@ -56,33 +51,17 @@ namespace Server.Network {
|
|||
#endif
|
||||
|
||||
private MessagePump m_MessagePump;
|
||||
private ServerInfo[] m_ServerInfo;
|
||||
private IAccount m_Account;
|
||||
private Mobile m_Mobile;
|
||||
private CityInfo[] m_CityInfo;
|
||||
private List<Gump> m_Gumps;
|
||||
private List<HuePicker> m_HuePickers;
|
||||
private List<IMenu> m_Menus;
|
||||
private List<SecureTrade> m_Trades;
|
||||
private int m_Sequence;
|
||||
private bool m_CompressionEnabled;
|
||||
private string m_ToString;
|
||||
private ClientVersion m_Version;
|
||||
private bool m_SentFirstPacket;
|
||||
private bool m_BlockAllPackets;
|
||||
|
||||
private DateTime m_ConnectedOn;
|
||||
public DateTime ConnectedOn { get; }
|
||||
|
||||
public DateTime ConnectedOn => m_ConnectedOn;
|
||||
|
||||
public TimeSpan ConnectedFor => ( DateTime.UtcNow - m_ConnectedOn );
|
||||
public TimeSpan ConnectedFor => ( DateTime.UtcNow - ConnectedOn );
|
||||
|
||||
internal int m_Seed;
|
||||
internal int m_AuthID;
|
||||
|
||||
public IPAddress Address => m_Address;
|
||||
|
||||
private ClientFlags m_Flags;
|
||||
public IPAddress Address { get; }
|
||||
|
||||
private static bool m_Paused;
|
||||
|
||||
|
|
@ -95,34 +74,15 @@ namespace Server.Network {
|
|||
private AsyncState m_AsyncState;
|
||||
private object m_AsyncLock = new object();
|
||||
|
||||
private IPacketEncoder m_Encoder;
|
||||
public IPacketEncoder PacketEncoder { get; set; }
|
||||
|
||||
public IPacketEncoder PacketEncoder {
|
||||
get => m_Encoder;
|
||||
set => m_Encoder = value;
|
||||
}
|
||||
public static NetStateCreatedCallback CreatedCallback { get; set; }
|
||||
|
||||
private static NetStateCreatedCallback m_CreatedCallback;
|
||||
public bool SentFirstPacket { get; set; }
|
||||
|
||||
public static NetStateCreatedCallback CreatedCallback {
|
||||
get => m_CreatedCallback;
|
||||
set => m_CreatedCallback = value;
|
||||
}
|
||||
public bool BlockAllPackets { get; set; }
|
||||
|
||||
public bool SentFirstPacket {
|
||||
get => m_SentFirstPacket;
|
||||
set => m_SentFirstPacket = value;
|
||||
}
|
||||
|
||||
public bool BlockAllPackets {
|
||||
get => m_BlockAllPackets;
|
||||
set => m_BlockAllPackets = value;
|
||||
}
|
||||
|
||||
public ClientFlags Flags {
|
||||
get => m_Flags;
|
||||
set => m_Flags = value;
|
||||
}
|
||||
public ClientFlags Flags { get; set; }
|
||||
|
||||
public ClientVersion Version {
|
||||
get => m_Version;
|
||||
|
|
@ -225,19 +185,19 @@ namespace Server.Network {
|
|||
public bool NewMobileIncoming => ((_ProtocolChanges & ProtocolChanges.NewMobileIncoming) != 0);
|
||||
public bool NewSecureTrading => ((_ProtocolChanges & ProtocolChanges.NewSecureTrading) != 0);
|
||||
|
||||
public bool IsUOTDClient => ( (m_Flags & ClientFlags.UOTD) != 0 || ( m_Version != null && m_Version.Type == ClientType.UOTD ) );
|
||||
public bool IsUOTDClient => ( (Flags & ClientFlags.UOTD) != 0 || ( m_Version != null && m_Version.Type == ClientType.UOTD ) );
|
||||
|
||||
public bool IsSAClient => ( m_Version != null && m_Version.Type == ClientType.SA );
|
||||
|
||||
public List<SecureTrade> Trades => m_Trades;
|
||||
public List<SecureTrade> Trades { get; }
|
||||
|
||||
public void ValidateAllTrades() {
|
||||
for ( int i = m_Trades.Count - 1; i >= 0; --i ) {
|
||||
if ( i >= m_Trades.Count ) {
|
||||
for ( int i = Trades.Count - 1; i >= 0; --i ) {
|
||||
if ( i >= Trades.Count ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
SecureTrade trade = m_Trades[i];
|
||||
SecureTrade trade = Trades[i];
|
||||
|
||||
if ( trade.From.Mobile.Deleted || trade.To.Mobile.Deleted || !trade.From.Mobile.Alive || !trade.To.Mobile.Alive || !trade.From.Mobile.InRange( trade.To.Mobile, 2 ) || trade.From.Mobile.Map != trade.To.Mobile.Map ) {
|
||||
trade.Cancel();
|
||||
|
|
@ -246,20 +206,20 @@ namespace Server.Network {
|
|||
}
|
||||
|
||||
public void CancelAllTrades() {
|
||||
for ( int i = m_Trades.Count - 1; i >= 0; --i ) {
|
||||
if ( i < m_Trades.Count ) {
|
||||
m_Trades[i].Cancel();
|
||||
for ( int i = Trades.Count - 1; i >= 0; --i ) {
|
||||
if ( i < Trades.Count ) {
|
||||
Trades[i].Cancel();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void RemoveTrade( SecureTrade trade ) {
|
||||
m_Trades.Remove( trade );
|
||||
Trades.Remove( trade );
|
||||
}
|
||||
|
||||
public SecureTrade FindTrade( Mobile m ) {
|
||||
for ( int i = 0; i < m_Trades.Count; ++i ) {
|
||||
SecureTrade trade = m_Trades[i];
|
||||
for ( int i = 0; i < Trades.Count; ++i ) {
|
||||
SecureTrade trade = Trades[i];
|
||||
|
||||
if ( trade.From.Mobile == m || trade.To.Mobile == m ) {
|
||||
return trade;
|
||||
|
|
@ -270,17 +230,17 @@ namespace Server.Network {
|
|||
}
|
||||
|
||||
public SecureTradeContainer FindTradeContainer( Mobile m ) {
|
||||
for ( int i = 0; i < m_Trades.Count; ++i ) {
|
||||
SecureTrade trade = m_Trades[i];
|
||||
for ( int i = 0; i < Trades.Count; ++i ) {
|
||||
SecureTrade trade = Trades[i];
|
||||
|
||||
SecureTradeInfo from = trade.From;
|
||||
SecureTradeInfo to = trade.To;
|
||||
|
||||
if ( from.Mobile == m_Mobile && to.Mobile == m ) {
|
||||
if ( from.Mobile == Mobile && to.Mobile == m ) {
|
||||
return from.Container;
|
||||
}
|
||||
|
||||
if ( from.Mobile == m && to.Mobile == m_Mobile ) {
|
||||
if ( from.Mobile == m && to.Mobile == Mobile ) {
|
||||
return to.Container;
|
||||
}
|
||||
}
|
||||
|
|
@ -289,46 +249,29 @@ namespace Server.Network {
|
|||
}
|
||||
|
||||
public SecureTradeContainer AddTrade( NetState state ) {
|
||||
SecureTrade newTrade = new SecureTrade( m_Mobile, state.m_Mobile );
|
||||
SecureTrade newTrade = new SecureTrade( Mobile, state.Mobile );
|
||||
|
||||
m_Trades.Add( newTrade );
|
||||
state.m_Trades.Add( newTrade );
|
||||
Trades.Add( newTrade );
|
||||
state.Trades.Add( newTrade );
|
||||
|
||||
return newTrade.From.Container;
|
||||
}
|
||||
|
||||
public bool CompressionEnabled {
|
||||
get => m_CompressionEnabled;
|
||||
set => m_CompressionEnabled = value;
|
||||
}
|
||||
public bool CompressionEnabled { get; set; }
|
||||
|
||||
public int Sequence {
|
||||
get => m_Sequence;
|
||||
set => m_Sequence = value;
|
||||
}
|
||||
public int Sequence { get; set; }
|
||||
|
||||
public List<Gump> Gumps => m_Gumps;
|
||||
public List<Gump> Gumps { get; private set; }
|
||||
|
||||
public List<HuePicker> HuePickers => m_HuePickers;
|
||||
public List<HuePicker> HuePickers { get; private set; }
|
||||
|
||||
public List<IMenu> Menus => m_Menus;
|
||||
public List<IMenu> Menus { get; private set; }
|
||||
|
||||
private static int m_GumpCap = 512, m_HuePickerCap = 512, m_MenuCap = 512;
|
||||
public static int GumpCap { get; set; } = 512;
|
||||
|
||||
public static int GumpCap {
|
||||
get => m_GumpCap;
|
||||
set => m_GumpCap = value;
|
||||
}
|
||||
public static int HuePickerCap { get; set; } = 512;
|
||||
|
||||
public static int HuePickerCap {
|
||||
get => m_HuePickerCap;
|
||||
set => m_HuePickerCap = value;
|
||||
}
|
||||
|
||||
public static int MenuCap {
|
||||
get => m_MenuCap;
|
||||
set => m_MenuCap = value;
|
||||
}
|
||||
public static int MenuCap { get; set; } = 512;
|
||||
|
||||
public void WriteConsole( string text ) {
|
||||
Console.WriteLine( "Client: {0}: {1}", this, text );
|
||||
|
|
@ -339,12 +282,12 @@ namespace Server.Network {
|
|||
}
|
||||
|
||||
public void AddMenu( IMenu menu ) {
|
||||
if ( m_Menus == null ) {
|
||||
m_Menus = new List<IMenu>();
|
||||
if ( Menus == null ) {
|
||||
Menus = new List<IMenu>();
|
||||
}
|
||||
|
||||
if ( m_Menus.Count < m_MenuCap ) {
|
||||
m_Menus.Add( menu );
|
||||
if ( Menus.Count < MenuCap ) {
|
||||
Menus.Add( menu );
|
||||
} else {
|
||||
WriteConsole( "Exceeded menu cap, disconnecting..." );
|
||||
Dispose();
|
||||
|
|
@ -353,26 +296,26 @@ namespace Server.Network {
|
|||
|
||||
public void RemoveMenu( IMenu menu )
|
||||
{
|
||||
m_Menus?.Remove( menu );
|
||||
Menus?.Remove( menu );
|
||||
}
|
||||
|
||||
public void RemoveMenu( int index )
|
||||
{
|
||||
m_Menus?.RemoveAt( index );
|
||||
Menus?.RemoveAt( index );
|
||||
}
|
||||
|
||||
public void ClearMenus()
|
||||
{
|
||||
m_Menus?.Clear();
|
||||
Menus?.Clear();
|
||||
}
|
||||
|
||||
public void AddHuePicker( HuePicker huePicker ) {
|
||||
if ( m_HuePickers == null ) {
|
||||
m_HuePickers = new List<HuePicker>();
|
||||
if ( HuePickers == null ) {
|
||||
HuePickers = new List<HuePicker>();
|
||||
}
|
||||
|
||||
if ( m_HuePickers.Count < m_HuePickerCap ) {
|
||||
m_HuePickers.Add( huePicker );
|
||||
if ( HuePickers.Count < HuePickerCap ) {
|
||||
HuePickers.Add( huePicker );
|
||||
} else {
|
||||
WriteConsole( "Exceeded hue picker cap, disconnecting..." );
|
||||
Dispose();
|
||||
|
|
@ -381,26 +324,26 @@ namespace Server.Network {
|
|||
|
||||
public void RemoveHuePicker( HuePicker huePicker )
|
||||
{
|
||||
m_HuePickers?.Remove( huePicker );
|
||||
HuePickers?.Remove( huePicker );
|
||||
}
|
||||
|
||||
public void RemoveHuePicker( int index )
|
||||
{
|
||||
m_HuePickers?.RemoveAt( index );
|
||||
HuePickers?.RemoveAt( index );
|
||||
}
|
||||
|
||||
public void ClearHuePickers()
|
||||
{
|
||||
m_HuePickers?.Clear();
|
||||
HuePickers?.Clear();
|
||||
}
|
||||
|
||||
public void AddGump( Gump gump ) {
|
||||
if ( m_Gumps == null ) {
|
||||
m_Gumps = new List<Gump>();
|
||||
if ( Gumps == null ) {
|
||||
Gumps = new List<Gump>();
|
||||
}
|
||||
|
||||
if ( m_Gumps.Count < m_GumpCap ) {
|
||||
m_Gumps.Add( gump );
|
||||
if ( Gumps.Count < GumpCap ) {
|
||||
Gumps.Add( gump );
|
||||
} else {
|
||||
WriteConsole( "Exceeded gump cap, disconnecting..." );
|
||||
Dispose();
|
||||
|
|
@ -409,17 +352,17 @@ namespace Server.Network {
|
|||
|
||||
public void RemoveGump( Gump gump )
|
||||
{
|
||||
m_Gumps?.Remove( gump );
|
||||
Gumps?.Remove( gump );
|
||||
}
|
||||
|
||||
public void RemoveGump( int index )
|
||||
{
|
||||
m_Gumps?.RemoveAt( index );
|
||||
Gumps?.RemoveAt( index );
|
||||
}
|
||||
|
||||
public void ClearGumps()
|
||||
{
|
||||
m_Gumps?.Clear();
|
||||
Gumps?.Clear();
|
||||
}
|
||||
|
||||
public void LaunchBrowser( string url ) {
|
||||
|
|
@ -427,80 +370,66 @@ namespace Server.Network {
|
|||
Send( new LaunchBrowser( url ) );
|
||||
}
|
||||
|
||||
public CityInfo[] CityInfo {
|
||||
get => m_CityInfo;
|
||||
set => m_CityInfo = value;
|
||||
}
|
||||
public CityInfo[] CityInfo { get; set; }
|
||||
|
||||
public Mobile Mobile {
|
||||
get => m_Mobile;
|
||||
set => m_Mobile = value;
|
||||
}
|
||||
public Mobile Mobile { get; set; }
|
||||
|
||||
public ServerInfo[] ServerInfo {
|
||||
get => m_ServerInfo;
|
||||
set => m_ServerInfo = value;
|
||||
}
|
||||
public ServerInfo[] ServerInfo { get; set; }
|
||||
|
||||
public IAccount Account {
|
||||
get => m_Account;
|
||||
set => m_Account = value;
|
||||
}
|
||||
public IAccount Account { get; set; }
|
||||
|
||||
public override string ToString() {
|
||||
return m_ToString;
|
||||
}
|
||||
|
||||
private static List<NetState> m_Instances = new List<NetState>();
|
||||
|
||||
public static List<NetState> Instances => m_Instances;
|
||||
public static List<NetState> Instances { get; } = new List<NetState>();
|
||||
|
||||
private static BufferPool m_ReceiveBufferPool = new BufferPool( "Receive", 2048, 2048 );
|
||||
|
||||
public NetState( Socket socket, MessagePump messagePump )
|
||||
{
|
||||
m_Socket = socket;
|
||||
m_Buffer = new ByteQueue();
|
||||
m_Seeded = false;
|
||||
m_Running = false;
|
||||
Socket = socket;
|
||||
Buffer = new ByteQueue();
|
||||
Seeded = false;
|
||||
Running = false;
|
||||
m_RecvBuffer = m_ReceiveBufferPool.AcquireBuffer();
|
||||
m_MessagePump = messagePump;
|
||||
m_Gumps = new List<Gump>();
|
||||
m_HuePickers = new List<HuePicker>();
|
||||
m_Menus = new List<IMenu>();
|
||||
m_Trades = new List<SecureTrade>();
|
||||
Gumps = new List<Gump>();
|
||||
HuePickers = new List<HuePicker>();
|
||||
Menus = new List<IMenu>();
|
||||
Trades = new List<SecureTrade>();
|
||||
|
||||
m_SendQueue = new SendQueue();
|
||||
|
||||
m_NextCheckActivity = Core.TickCount + 30000;
|
||||
|
||||
m_Instances.Add( this );
|
||||
Instances.Add( this );
|
||||
|
||||
try {
|
||||
m_Address = Utility.Intern( ( ( IPEndPoint ) m_Socket.RemoteEndPoint ).Address );
|
||||
m_ToString = m_Address.ToString();
|
||||
Address = Utility.Intern( ( ( IPEndPoint ) Socket.RemoteEndPoint ).Address );
|
||||
m_ToString = Address.ToString();
|
||||
} catch ( Exception ex ) {
|
||||
TraceException( ex );
|
||||
m_Address = IPAddress.None;
|
||||
Address = IPAddress.None;
|
||||
m_ToString = "(error)";
|
||||
}
|
||||
|
||||
m_ConnectedOn = DateTime.UtcNow;
|
||||
ConnectedOn = DateTime.UtcNow;
|
||||
|
||||
m_CreatedCallback?.Invoke( this );
|
||||
CreatedCallback?.Invoke( this );
|
||||
}
|
||||
|
||||
private bool _sending;
|
||||
private object _sendL = new object();
|
||||
|
||||
public virtual void Send( Packet p ) {
|
||||
if ( m_Socket == null || m_BlockAllPackets ) {
|
||||
if ( Socket == null || BlockAllPackets ) {
|
||||
p.OnSend();
|
||||
return;
|
||||
}
|
||||
|
||||
int length;
|
||||
byte[] buffer = p.Compile( m_CompressionEnabled, out length );
|
||||
byte[] buffer = p.Compile( CompressionEnabled, out length );
|
||||
|
||||
if ( buffer != null ) {
|
||||
if ( buffer.Length <= 0 || length <= 0 ) {
|
||||
|
|
@ -514,7 +443,7 @@ namespace Server.Network {
|
|||
|
||||
prof?.Start();
|
||||
|
||||
m_Encoder?.EncodeOutgoingPacket( this, ref buffer, ref length );
|
||||
PacketEncoder?.EncodeOutgoingPacket( this, ref buffer, ref length );
|
||||
|
||||
try {
|
||||
SendQueue.Gram gram;
|
||||
|
|
@ -567,9 +496,9 @@ namespace Server.Network {
|
|||
m_SendEventArgs = new SocketAsyncEventArgs();
|
||||
m_SendEventArgs.Completed += Send_Completion;
|
||||
|
||||
m_Running = true;
|
||||
Running = true;
|
||||
|
||||
if ( m_Socket == null || m_Paused ) {
|
||||
if ( Socket == null || m_Paused ) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -585,7 +514,7 @@ namespace Server.Network {
|
|||
lock ( m_AsyncLock ) {
|
||||
if ( ( m_AsyncState & ( AsyncState.Pending | AsyncState.Paused ) ) == 0 ) {
|
||||
m_AsyncState |= AsyncState.Pending;
|
||||
result = !m_Socket.ReceiveAsync( m_ReceiveEventArgs );
|
||||
result = !Socket.ReceiveAsync( m_ReceiveEventArgs );
|
||||
|
||||
if ( result )
|
||||
Receive_Process( m_ReceiveEventArgs );
|
||||
|
|
@ -602,7 +531,7 @@ namespace Server.Network {
|
|||
{
|
||||
Receive_Process( e );
|
||||
|
||||
if ( !m_Disposing )
|
||||
if ( !IsDisposing )
|
||||
Receive_Start();
|
||||
}
|
||||
|
||||
|
|
@ -615,7 +544,7 @@ namespace Server.Network {
|
|||
return;
|
||||
}
|
||||
|
||||
if ( m_Disposing ) {
|
||||
if ( IsDisposing ) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -623,10 +552,10 @@ namespace Server.Network {
|
|||
|
||||
byte[] buffer = m_RecvBuffer;
|
||||
|
||||
m_Encoder?.DecodeIncomingPacket( this, ref buffer, ref byteCount );
|
||||
PacketEncoder?.DecodeIncomingPacket( this, ref buffer, ref byteCount );
|
||||
|
||||
lock ( m_Buffer )
|
||||
m_Buffer.Enqueue( buffer, 0, byteCount );
|
||||
lock ( Buffer )
|
||||
Buffer.Enqueue( buffer, 0, byteCount );
|
||||
|
||||
m_MessagePump.OnReceive( this );
|
||||
|
||||
|
|
@ -641,7 +570,7 @@ namespace Server.Network {
|
|||
bool result = false;
|
||||
|
||||
do {
|
||||
result = !m_Socket.SendAsync( m_SendEventArgs );
|
||||
result = !Socket.SendAsync( m_SendEventArgs );
|
||||
|
||||
if ( result )
|
||||
Send_Process( m_SendEventArgs );
|
||||
|
|
@ -656,11 +585,11 @@ namespace Server.Network {
|
|||
{
|
||||
Send_Process( e );
|
||||
|
||||
if ( m_Disposing )
|
||||
if ( IsDisposing )
|
||||
return;
|
||||
|
||||
if ( m_CoalesceSleep >= 0 ) {
|
||||
Thread.Sleep( m_CoalesceSleep );
|
||||
if ( CoalesceSleep >= 0 ) {
|
||||
Thread.Sleep( CoalesceSleep );
|
||||
}
|
||||
|
||||
SendQueue.Gram gram;
|
||||
|
|
@ -696,8 +625,8 @@ namespace Server.Network {
|
|||
public static void Pause() {
|
||||
m_Paused = true;
|
||||
|
||||
for ( int i = 0; i < m_Instances.Count; ++i ) {
|
||||
NetState ns = m_Instances[i];
|
||||
for ( int i = 0; i < Instances.Count; ++i ) {
|
||||
NetState ns = Instances[i];
|
||||
|
||||
lock ( ns.m_AsyncLock ) {
|
||||
ns.m_AsyncState |= AsyncState.Paused;
|
||||
|
|
@ -708,10 +637,10 @@ namespace Server.Network {
|
|||
public static void Resume() {
|
||||
m_Paused = false;
|
||||
|
||||
for ( int i = 0; i < m_Instances.Count; ++i ) {
|
||||
NetState ns = m_Instances[i];
|
||||
for ( int i = 0; i < Instances.Count; ++i ) {
|
||||
NetState ns = Instances[i];
|
||||
|
||||
if ( ns.m_Socket == null ) {
|
||||
if ( ns.Socket == null ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
@ -725,7 +654,7 @@ namespace Server.Network {
|
|||
}
|
||||
|
||||
public bool Flush() {
|
||||
if ( m_Socket == null )
|
||||
if ( Socket == null )
|
||||
return false;
|
||||
|
||||
lock (_sendL) {
|
||||
|
|
@ -939,25 +868,20 @@ namespace Server.Network {
|
|||
}
|
||||
|
||||
public static void FlushAll() {
|
||||
if (m_Instances.Count >= 1024)
|
||||
Parallel.ForEach(m_Instances, ns => ns.Flush());
|
||||
if (Instances.Count >= 1024)
|
||||
Parallel.ForEach(Instances, ns => ns.Flush());
|
||||
else
|
||||
for ( int i = 0; i < m_Instances.Count; ++i ) {
|
||||
m_Instances[i].Flush();
|
||||
for ( int i = 0; i < Instances.Count; ++i ) {
|
||||
Instances[i].Flush();
|
||||
}
|
||||
}
|
||||
|
||||
private static int m_CoalesceSleep = -1;
|
||||
|
||||
public static int CoalesceSleep {
|
||||
get => m_CoalesceSleep;
|
||||
set => m_CoalesceSleep = value;
|
||||
}
|
||||
public static int CoalesceSleep { get; set; } = -1;
|
||||
|
||||
private long m_NextCheckActivity;
|
||||
|
||||
public void CheckAlive(long curTicks) {
|
||||
if ( m_Socket == null )
|
||||
if ( Socket == null )
|
||||
return;
|
||||
|
||||
if (m_NextCheckActivity - curTicks >= 0) {
|
||||
|
|
@ -992,32 +916,30 @@ namespace Server.Network {
|
|||
}
|
||||
}
|
||||
|
||||
private bool m_Disposing;
|
||||
|
||||
public bool IsDisposing => m_Disposing;
|
||||
public bool IsDisposing { get; private set; }
|
||||
|
||||
public void Dispose() {
|
||||
Dispose( true );
|
||||
}
|
||||
|
||||
public virtual void Dispose( bool flush ) {
|
||||
if ( m_Socket == null || m_Disposing ) {
|
||||
if ( Socket == null || IsDisposing ) {
|
||||
return;
|
||||
}
|
||||
|
||||
m_Disposing = true;
|
||||
IsDisposing = true;
|
||||
|
||||
if ( flush )
|
||||
flush = Flush();
|
||||
|
||||
try {
|
||||
m_Socket.Shutdown( SocketShutdown.Both );
|
||||
Socket.Shutdown( SocketShutdown.Both );
|
||||
} catch ( SocketException ex ) {
|
||||
TraceException( ex );
|
||||
}
|
||||
|
||||
try {
|
||||
m_Socket.Close();
|
||||
Socket.Close();
|
||||
} catch ( SocketException ex ) {
|
||||
TraceException( ex );
|
||||
}
|
||||
|
|
@ -1027,9 +949,9 @@ namespace Server.Network {
|
|||
m_ReceiveBufferPool.ReleaseBuffer( m_RecvBuffer );
|
||||
}
|
||||
|
||||
m_Socket = null;
|
||||
Socket = null;
|
||||
|
||||
m_Buffer = null;
|
||||
Buffer = null;
|
||||
m_RecvBuffer = null;
|
||||
|
||||
#if NewAsyncSockets
|
||||
|
|
@ -1040,7 +962,7 @@ namespace Server.Network {
|
|||
m_OnSend = null;
|
||||
#endif
|
||||
|
||||
m_Running = false;
|
||||
Running = false;
|
||||
|
||||
lock (m_Disposed)
|
||||
m_Disposed.Enqueue( this );
|
||||
|
|
@ -1059,11 +981,11 @@ namespace Server.Network {
|
|||
try {
|
||||
long curTicks = Core.TickCount;
|
||||
|
||||
if (m_Instances.Count >= 1024)
|
||||
Parallel.ForEach(m_Instances, ns => ns.CheckAlive(curTicks));
|
||||
if (Instances.Count >= 1024)
|
||||
Parallel.ForEach(Instances, ns => ns.CheckAlive(curTicks));
|
||||
else
|
||||
for ( int i = 0; i < m_Instances.Count; ++i ) {
|
||||
m_Instances[i].CheckAlive(curTicks);
|
||||
for ( int i = 0; i < Instances.Count; ++i ) {
|
||||
Instances[i].CheckAlive(curTicks);
|
||||
}
|
||||
} catch ( Exception ex ) {
|
||||
TraceException( ex );
|
||||
|
|
@ -1080,42 +1002,39 @@ namespace Server.Network {
|
|||
++breakout;
|
||||
NetState ns = m_Disposed.Dequeue();
|
||||
|
||||
Mobile m = ns.m_Mobile;
|
||||
IAccount a = ns.m_Account;
|
||||
Mobile m = ns.Mobile;
|
||||
IAccount a = ns.Account;
|
||||
|
||||
if ( m != null ) {
|
||||
m.NetState = null;
|
||||
ns.m_Mobile = null;
|
||||
ns.Mobile = null;
|
||||
}
|
||||
|
||||
ns.m_Gumps.Clear();
|
||||
ns.m_Menus.Clear();
|
||||
ns.m_HuePickers.Clear();
|
||||
ns.m_Account = null;
|
||||
ns.m_ServerInfo = null;
|
||||
ns.m_CityInfo = null;
|
||||
ns.Gumps.Clear();
|
||||
ns.Menus.Clear();
|
||||
ns.HuePickers.Clear();
|
||||
ns.Account = null;
|
||||
ns.ServerInfo = null;
|
||||
ns.CityInfo = null;
|
||||
|
||||
m_Instances.Remove( ns );
|
||||
Instances.Remove( ns );
|
||||
|
||||
if ( a != null ) {
|
||||
ns.WriteConsole( "Disconnected. [{0} Online] [{1}]", m_Instances.Count, a );
|
||||
ns.WriteConsole( "Disconnected. [{0} Online] [{1}]", Instances.Count, a );
|
||||
} else {
|
||||
ns.WriteConsole( "Disconnected. [{0} Online]", m_Instances.Count );
|
||||
ns.WriteConsole( "Disconnected. [{0} Online]", Instances.Count );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool Running => m_Running;
|
||||
public bool Running { get; private set; }
|
||||
|
||||
public bool Seeded {
|
||||
get => m_Seeded;
|
||||
set => m_Seeded = value;
|
||||
}
|
||||
public bool Seeded { get; set; }
|
||||
|
||||
public Socket Socket => m_Socket;
|
||||
public Socket Socket { get; private set; }
|
||||
|
||||
public ByteQueue Buffer => m_Buffer;
|
||||
public ByteQueue Buffer { get; private set; }
|
||||
|
||||
public ExpansionInfo ExpansionInfo {
|
||||
get {
|
||||
|
|
|
|||
|
|
@ -25,32 +25,22 @@ namespace Server.Network
|
|||
|
||||
public class PacketHandler
|
||||
{
|
||||
private int m_PacketID;
|
||||
private int m_Length;
|
||||
private bool m_Ingame;
|
||||
private OnPacketReceive m_OnReceive;
|
||||
private ThrottlePacketCallback m_ThrottleCallback;
|
||||
|
||||
public PacketHandler( int packetID, int length, bool ingame, OnPacketReceive onReceive )
|
||||
{
|
||||
m_PacketID = packetID;
|
||||
m_Length = length;
|
||||
m_Ingame = ingame;
|
||||
m_OnReceive = onReceive;
|
||||
PacketID = packetID;
|
||||
Length = length;
|
||||
Ingame = ingame;
|
||||
OnReceive = onReceive;
|
||||
}
|
||||
|
||||
public int PacketID => m_PacketID;
|
||||
public int PacketID { get; }
|
||||
|
||||
public int Length => m_Length;
|
||||
public int Length { get; }
|
||||
|
||||
public OnPacketReceive OnReceive => m_OnReceive;
|
||||
public OnPacketReceive OnReceive { get; }
|
||||
|
||||
public ThrottlePacketCallback ThrottleCallback
|
||||
{
|
||||
get => m_ThrottleCallback;
|
||||
set => m_ThrottleCallback = value;
|
||||
}
|
||||
public ThrottlePacketCallback ThrottleCallback { get; set; }
|
||||
|
||||
public bool Ingame => m_Ingame;
|
||||
public bool Ingame { get; }
|
||||
}
|
||||
}
|
||||
|
|
@ -55,7 +55,6 @@ namespace Server.Network
|
|||
|
||||
public static class PacketHandlers
|
||||
{
|
||||
private static PacketHandler[] m_Handlers;
|
||||
private static PacketHandler[] m_6017Handlers;
|
||||
|
||||
private static PacketHandler[] m_ExtendedHandlersLow;
|
||||
|
|
@ -64,11 +63,11 @@ namespace Server.Network
|
|||
private static EncodedPacketHandler[] m_EncodedHandlersLow;
|
||||
private static Dictionary<int, EncodedPacketHandler> m_EncodedHandlersHigh;
|
||||
|
||||
public static PacketHandler[] Handlers => m_Handlers;
|
||||
public static PacketHandler[] Handlers { get; }
|
||||
|
||||
static PacketHandlers()
|
||||
{
|
||||
m_Handlers = new PacketHandler[0x100];
|
||||
Handlers = new PacketHandler[0x100];
|
||||
m_6017Handlers = new PacketHandler[0x100];
|
||||
|
||||
m_ExtendedHandlersLow = new PacketHandler[0x100];
|
||||
|
|
@ -173,7 +172,7 @@ namespace Server.Network
|
|||
|
||||
public static void Register( int packetID, int length, bool ingame, OnPacketReceive onReceive )
|
||||
{
|
||||
m_Handlers[packetID] = new PacketHandler( packetID, length, ingame, onReceive );
|
||||
Handlers[packetID] = new PacketHandler( packetID, length, ingame, onReceive );
|
||||
|
||||
if ( m_6017Handlers[packetID] == null )
|
||||
m_6017Handlers[packetID] = new PacketHandler( packetID, length, ingame, onReceive );
|
||||
|
|
@ -181,7 +180,7 @@ namespace Server.Network
|
|||
|
||||
public static PacketHandler GetHandler( int packetID )
|
||||
{
|
||||
return m_Handlers[packetID];
|
||||
return Handlers[packetID];
|
||||
}
|
||||
|
||||
public static void Register6017( int packetID, int length, bool ingame, OnPacketReceive onReceive )
|
||||
|
|
@ -1467,13 +1466,7 @@ namespace Server.Network
|
|||
}
|
||||
}
|
||||
|
||||
private static bool m_SingleClickProps;
|
||||
|
||||
public static bool SingleClickProps
|
||||
{
|
||||
get => m_SingleClickProps;
|
||||
set => m_SingleClickProps = value;
|
||||
}
|
||||
public static bool SingleClickProps { get; set; }
|
||||
|
||||
public static void LookReq( NetState state, PacketReader pvSrc )
|
||||
{
|
||||
|
|
@ -1487,7 +1480,7 @@ namespace Server.Network
|
|||
|
||||
if ( m != null && from.CanSee( m ) && Utility.InUpdateRange( from, m ) )
|
||||
{
|
||||
if ( m_SingleClickProps )
|
||||
if ( SingleClickProps )
|
||||
{
|
||||
m.OnAosSingleClick( from );
|
||||
}
|
||||
|
|
@ -1504,7 +1497,7 @@ namespace Server.Network
|
|||
|
||||
if ( item != null && !item.Deleted && from.CanSee( item ) && Utility.InUpdateRange( from.Location, item.GetWorldLocation() ) )
|
||||
{
|
||||
if ( m_SingleClickProps )
|
||||
if ( SingleClickProps )
|
||||
{
|
||||
item.OnAosSingleClick( from );
|
||||
}
|
||||
|
|
@ -2457,13 +2450,7 @@ namespace Server.Network
|
|||
}
|
||||
}
|
||||
|
||||
private static bool m_ClientVerification = true;
|
||||
|
||||
public static bool ClientVerification
|
||||
{
|
||||
get => m_ClientVerification;
|
||||
set => m_ClientVerification = value;
|
||||
}
|
||||
public static bool ClientVerification { get; set; } = true;
|
||||
|
||||
internal struct AuthIDPersistence {
|
||||
public DateTime Age;
|
||||
|
|
@ -2525,7 +2512,7 @@ namespace Server.Network
|
|||
m_AuthIDWindow.Remove( authID );
|
||||
|
||||
state.Version = ap.Version;
|
||||
} else if ( m_ClientVerification ) {
|
||||
} else if ( ClientVerification ) {
|
||||
Console.WriteLine( "Login: {0}: Invalid client detected, disconnecting", state );
|
||||
state.Dispose();
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -26,20 +26,18 @@ namespace Server.Network
|
|||
{
|
||||
public class PacketReader
|
||||
{
|
||||
private byte[] m_Data;
|
||||
private int m_Size;
|
||||
private int m_Index;
|
||||
|
||||
public PacketReader( byte[] data, int size, bool fixedSize )
|
||||
{
|
||||
m_Data = data;
|
||||
m_Size = size;
|
||||
Buffer = data;
|
||||
Size = size;
|
||||
m_Index = fixedSize ? 1 : 3;
|
||||
}
|
||||
|
||||
public byte[] Buffer => m_Data;
|
||||
public byte[] Buffer { get; }
|
||||
|
||||
public int Size => m_Size;
|
||||
public int Size { get; }
|
||||
|
||||
public void Trace( NetState state )
|
||||
{
|
||||
|
|
@ -47,7 +45,7 @@ namespace Server.Network
|
|||
{
|
||||
using ( StreamWriter sw = new StreamWriter( "Packets.log", true ) )
|
||||
{
|
||||
byte[] buffer = m_Data;
|
||||
byte[] buffer = Buffer;
|
||||
|
||||
if ( buffer.Length > 0 )
|
||||
sw.WriteLine( "Client: {0}: Unhandled packet 0x{1:X2}", state, buffer[0] );
|
||||
|
|
@ -70,7 +68,7 @@ namespace Server.Network
|
|||
{
|
||||
case SeekOrigin.Begin: m_Index = offset; break;
|
||||
case SeekOrigin.Current: m_Index += offset; break;
|
||||
case SeekOrigin.End: m_Index = m_Size - offset; break;
|
||||
case SeekOrigin.End: m_Index = Size - offset; break;
|
||||
}
|
||||
|
||||
return m_Index;
|
||||
|
|
@ -78,61 +76,61 @@ namespace Server.Network
|
|||
|
||||
public int ReadInt32()
|
||||
{
|
||||
if ( (m_Index + 4) > m_Size )
|
||||
if ( (m_Index + 4) > Size )
|
||||
return 0;
|
||||
|
||||
return (m_Data[m_Index++] << 24)
|
||||
| (m_Data[m_Index++] << 16)
|
||||
| (m_Data[m_Index++] << 8)
|
||||
| m_Data[m_Index++];
|
||||
return (Buffer[m_Index++] << 24)
|
||||
| (Buffer[m_Index++] << 16)
|
||||
| (Buffer[m_Index++] << 8)
|
||||
| Buffer[m_Index++];
|
||||
}
|
||||
|
||||
public short ReadInt16()
|
||||
{
|
||||
if ( (m_Index + 2) > m_Size )
|
||||
if ( (m_Index + 2) > Size )
|
||||
return 0;
|
||||
|
||||
return (short)((m_Data[m_Index++] << 8) | m_Data[m_Index++]);
|
||||
return (short)((Buffer[m_Index++] << 8) | Buffer[m_Index++]);
|
||||
}
|
||||
|
||||
public byte ReadByte()
|
||||
{
|
||||
if ( (m_Index + 1) > m_Size )
|
||||
if ( (m_Index + 1) > Size )
|
||||
return 0;
|
||||
|
||||
return m_Data[m_Index++];
|
||||
return Buffer[m_Index++];
|
||||
}
|
||||
|
||||
public uint ReadUInt32()
|
||||
{
|
||||
if ( (m_Index + 4) > m_Size )
|
||||
if ( (m_Index + 4) > Size )
|
||||
return 0;
|
||||
|
||||
return (uint)((m_Data[m_Index++] << 24) | (m_Data[m_Index++] << 16) | (m_Data[m_Index++] << 8) | m_Data[m_Index++]);
|
||||
return (uint)((Buffer[m_Index++] << 24) | (Buffer[m_Index++] << 16) | (Buffer[m_Index++] << 8) | Buffer[m_Index++]);
|
||||
}
|
||||
|
||||
public ushort ReadUInt16()
|
||||
{
|
||||
if ( (m_Index + 2) > m_Size )
|
||||
if ( (m_Index + 2) > Size )
|
||||
return 0;
|
||||
|
||||
return (ushort)((m_Data[m_Index++] << 8) | m_Data[m_Index++]);
|
||||
return (ushort)((Buffer[m_Index++] << 8) | Buffer[m_Index++]);
|
||||
}
|
||||
|
||||
public sbyte ReadSByte()
|
||||
{
|
||||
if ( (m_Index + 1) > m_Size )
|
||||
if ( (m_Index + 1) > Size )
|
||||
return 0;
|
||||
|
||||
return (sbyte)m_Data[m_Index++];
|
||||
return (sbyte)Buffer[m_Index++];
|
||||
}
|
||||
|
||||
public bool ReadBoolean()
|
||||
{
|
||||
if ( (m_Index + 1) > m_Size )
|
||||
if ( (m_Index + 1) > Size )
|
||||
return false;
|
||||
|
||||
return ( m_Data[m_Index++] != 0 );
|
||||
return ( Buffer[m_Index++] != 0 );
|
||||
}
|
||||
|
||||
public string ReadUnicodeStringLE()
|
||||
|
|
@ -141,7 +139,7 @@ namespace Server.Network
|
|||
|
||||
int c;
|
||||
|
||||
while ( (m_Index + 1) < m_Size && (c = (m_Data[m_Index++] | (m_Data[m_Index++] << 8))) != 0 )
|
||||
while ( (m_Index + 1) < Size && (c = (Buffer[m_Index++] | (Buffer[m_Index++] << 8))) != 0 )
|
||||
sb.Append( (char)c );
|
||||
|
||||
return sb.ToString();
|
||||
|
|
@ -152,14 +150,14 @@ namespace Server.Network
|
|||
int bound = m_Index + (fixedLength << 1);
|
||||
int end = bound;
|
||||
|
||||
if ( bound > m_Size )
|
||||
bound = m_Size;
|
||||
if ( bound > Size )
|
||||
bound = Size;
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
int c;
|
||||
|
||||
while ( (m_Index + 1) < bound && (c = (m_Data[m_Index++] | (m_Data[m_Index++] << 8))) != 0 )
|
||||
while ( (m_Index + 1) < bound && (c = (Buffer[m_Index++] | (Buffer[m_Index++] << 8))) != 0 )
|
||||
{
|
||||
if ( IsSafeChar( c ) )
|
||||
sb.Append( (char)c );
|
||||
|
|
@ -176,7 +174,7 @@ namespace Server.Network
|
|||
|
||||
int c;
|
||||
|
||||
while ( (m_Index + 1) < m_Size && (c = (m_Data[m_Index++] | (m_Data[m_Index++] << 8))) != 0 )
|
||||
while ( (m_Index + 1) < Size && (c = (Buffer[m_Index++] | (Buffer[m_Index++] << 8))) != 0 )
|
||||
{
|
||||
if ( IsSafeChar( c ) )
|
||||
sb.Append( (char)c );
|
||||
|
|
@ -191,7 +189,7 @@ namespace Server.Network
|
|||
|
||||
int c;
|
||||
|
||||
while ( (m_Index + 1) < m_Size && (c = ((m_Data[m_Index++] << 8) | m_Data[m_Index++])) != 0 )
|
||||
while ( (m_Index + 1) < Size && (c = ((Buffer[m_Index++] << 8) | Buffer[m_Index++])) != 0 )
|
||||
{
|
||||
if ( IsSafeChar( c ) )
|
||||
sb.Append( (char)c );
|
||||
|
|
@ -206,7 +204,7 @@ namespace Server.Network
|
|||
|
||||
int c;
|
||||
|
||||
while ( (m_Index + 1) < m_Size && (c = ((m_Data[m_Index++] << 8) | m_Data[m_Index++])) != 0 )
|
||||
while ( (m_Index + 1) < Size && (c = ((Buffer[m_Index++] << 8) | Buffer[m_Index++])) != 0 )
|
||||
sb.Append( (char)c );
|
||||
|
||||
return sb.ToString();
|
||||
|
|
@ -219,7 +217,7 @@ namespace Server.Network
|
|||
|
||||
public string ReadUTF8StringSafe( int fixedLength )
|
||||
{
|
||||
if ( m_Index >= m_Size )
|
||||
if ( m_Index >= Size )
|
||||
{
|
||||
m_Index += fixedLength;
|
||||
return string.Empty;
|
||||
|
|
@ -228,14 +226,14 @@ namespace Server.Network
|
|||
int bound = m_Index + fixedLength;
|
||||
//int end = bound;
|
||||
|
||||
if ( bound > m_Size )
|
||||
bound = m_Size;
|
||||
if ( bound > Size )
|
||||
bound = Size;
|
||||
|
||||
int count = 0;
|
||||
int index = m_Index;
|
||||
int start = m_Index;
|
||||
|
||||
while ( index < bound && m_Data[index++] != 0 )
|
||||
while ( index < bound && Buffer[index++] != 0 )
|
||||
++count;
|
||||
|
||||
index = 0;
|
||||
|
|
@ -243,7 +241,7 @@ namespace Server.Network
|
|||
byte[] buffer = new byte[count];
|
||||
int value = 0;
|
||||
|
||||
while ( m_Index < bound && (value = m_Data[m_Index++]) != 0 )
|
||||
while ( m_Index < bound && (value = Buffer[m_Index++]) != 0 )
|
||||
buffer[index++] = (byte)value;
|
||||
|
||||
string s = Utility.UTF8.GetString( buffer );
|
||||
|
|
@ -269,13 +267,13 @@ namespace Server.Network
|
|||
|
||||
public string ReadUTF8StringSafe()
|
||||
{
|
||||
if ( m_Index >= m_Size )
|
||||
if ( m_Index >= Size )
|
||||
return string.Empty;
|
||||
|
||||
int count = 0;
|
||||
int index = m_Index;
|
||||
|
||||
while ( index < m_Size && m_Data[index++] != 0 )
|
||||
while ( index < Size && Buffer[index++] != 0 )
|
||||
++count;
|
||||
|
||||
index = 0;
|
||||
|
|
@ -283,7 +281,7 @@ namespace Server.Network
|
|||
byte[] buffer = new byte[count];
|
||||
int value = 0;
|
||||
|
||||
while ( m_Index < m_Size && (value = m_Data[m_Index++]) != 0 )
|
||||
while ( m_Index < Size && (value = Buffer[m_Index++]) != 0 )
|
||||
buffer[index++] = (byte)value;
|
||||
|
||||
string s = Utility.UTF8.GetString( buffer );
|
||||
|
|
@ -309,13 +307,13 @@ namespace Server.Network
|
|||
|
||||
public string ReadUTF8String()
|
||||
{
|
||||
if ( m_Index >= m_Size )
|
||||
if ( m_Index >= Size )
|
||||
return string.Empty;
|
||||
|
||||
int count = 0;
|
||||
int index = m_Index;
|
||||
|
||||
while ( index < m_Size && m_Data[index++] != 0 )
|
||||
while ( index < Size && Buffer[index++] != 0 )
|
||||
++count;
|
||||
|
||||
index = 0;
|
||||
|
|
@ -323,7 +321,7 @@ namespace Server.Network
|
|||
byte[] buffer = new byte[count];
|
||||
int value = 0;
|
||||
|
||||
while ( m_Index < m_Size && (value = m_Data[m_Index++]) != 0 )
|
||||
while ( m_Index < Size && (value = Buffer[m_Index++]) != 0 )
|
||||
buffer[index++] = (byte)value;
|
||||
|
||||
return Utility.UTF8.GetString( buffer );
|
||||
|
|
@ -335,7 +333,7 @@ namespace Server.Network
|
|||
|
||||
int c;
|
||||
|
||||
while ( m_Index < m_Size && (c = m_Data[m_Index++]) != 0 )
|
||||
while ( m_Index < Size && (c = Buffer[m_Index++]) != 0 )
|
||||
sb.Append( (char)c );
|
||||
|
||||
return sb.ToString();
|
||||
|
|
@ -347,7 +345,7 @@ namespace Server.Network
|
|||
|
||||
int c;
|
||||
|
||||
while ( m_Index < m_Size && (c = m_Data[m_Index++]) != 0 )
|
||||
while ( m_Index < Size && (c = Buffer[m_Index++]) != 0 )
|
||||
{
|
||||
if ( IsSafeChar( c ) )
|
||||
sb.Append( (char)c );
|
||||
|
|
@ -361,14 +359,14 @@ namespace Server.Network
|
|||
int bound = m_Index + (fixedLength << 1);
|
||||
int end = bound;
|
||||
|
||||
if ( bound > m_Size )
|
||||
bound = m_Size;
|
||||
if ( bound > Size )
|
||||
bound = Size;
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
int c;
|
||||
|
||||
while ( (m_Index + 1) < bound && (c = ((m_Data[m_Index++] << 8) | m_Data[m_Index++])) != 0 )
|
||||
while ( (m_Index + 1) < bound && (c = ((Buffer[m_Index++] << 8) | Buffer[m_Index++])) != 0 )
|
||||
{
|
||||
if ( IsSafeChar( c ) )
|
||||
sb.Append( (char)c );
|
||||
|
|
@ -384,14 +382,14 @@ namespace Server.Network
|
|||
int bound = m_Index + (fixedLength << 1);
|
||||
int end = bound;
|
||||
|
||||
if ( bound > m_Size )
|
||||
bound = m_Size;
|
||||
if ( bound > Size )
|
||||
bound = Size;
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
int c;
|
||||
|
||||
while ( (m_Index + 1) < bound && (c = ((m_Data[m_Index++] << 8) | m_Data[m_Index++])) != 0 )
|
||||
while ( (m_Index + 1) < bound && (c = ((Buffer[m_Index++] << 8) | Buffer[m_Index++])) != 0 )
|
||||
sb.Append( (char)c );
|
||||
|
||||
m_Index = end;
|
||||
|
|
@ -404,14 +402,14 @@ namespace Server.Network
|
|||
int bound = m_Index + fixedLength;
|
||||
int end = bound;
|
||||
|
||||
if ( bound > m_Size )
|
||||
bound = m_Size;
|
||||
if ( bound > Size )
|
||||
bound = Size;
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
int c;
|
||||
|
||||
while ( m_Index < bound && (c = m_Data[m_Index++]) != 0 )
|
||||
while ( m_Index < bound && (c = Buffer[m_Index++]) != 0 )
|
||||
{
|
||||
if ( IsSafeChar( c ) )
|
||||
sb.Append( (char)c );
|
||||
|
|
@ -427,14 +425,14 @@ namespace Server.Network
|
|||
int bound = m_Index + fixedLength;
|
||||
int end = bound;
|
||||
|
||||
if ( bound > m_Size )
|
||||
bound = m_Size;
|
||||
if ( bound > Size )
|
||||
bound = Size;
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
int c;
|
||||
|
||||
while ( m_Index < bound && (c = m_Data[m_Index++]) != 0 )
|
||||
while ( m_Index < bound && (c = Buffer[m_Index++]) != 0 )
|
||||
sb.Append( (char)c );
|
||||
|
||||
m_Index = end;
|
||||
|
|
|
|||
|
|
@ -477,12 +477,9 @@ namespace Server.Network
|
|||
|
||||
public class EquipInfoAttribute
|
||||
{
|
||||
private int m_Number;
|
||||
private int m_Charges;
|
||||
public int Number { get; }
|
||||
|
||||
public int Number => m_Number;
|
||||
|
||||
public int Charges => m_Charges;
|
||||
public int Charges { get; }
|
||||
|
||||
public EquipInfoAttribute( int number ) : this( number, -1 )
|
||||
{
|
||||
|
|
@ -490,32 +487,27 @@ namespace Server.Network
|
|||
|
||||
public EquipInfoAttribute( int number, int charges )
|
||||
{
|
||||
m_Number = number;
|
||||
m_Charges = charges;
|
||||
Number = number;
|
||||
Charges = charges;
|
||||
}
|
||||
}
|
||||
|
||||
public class EquipmentInfo
|
||||
{
|
||||
private int m_Number;
|
||||
private Mobile m_Crafter;
|
||||
private bool m_Unidentified;
|
||||
private EquipInfoAttribute[] m_Attributes;
|
||||
public int Number { get; }
|
||||
|
||||
public int Number => m_Number;
|
||||
public Mobile Crafter { get; }
|
||||
|
||||
public Mobile Crafter => m_Crafter;
|
||||
public bool Unidentified { get; }
|
||||
|
||||
public bool Unidentified => m_Unidentified;
|
||||
|
||||
public EquipInfoAttribute[] Attributes => m_Attributes;
|
||||
public EquipInfoAttribute[] Attributes { get; }
|
||||
|
||||
public EquipmentInfo( int number, Mobile crafter, bool unidentified, EquipInfoAttribute[] attributes )
|
||||
{
|
||||
m_Number = number;
|
||||
m_Crafter = crafter;
|
||||
m_Unidentified = unidentified;
|
||||
m_Attributes = attributes;
|
||||
Number = number;
|
||||
Crafter = crafter;
|
||||
Unidentified = unidentified;
|
||||
Attributes = attributes;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2353,14 +2345,9 @@ namespace Server.Network
|
|||
|
||||
public sealed class DisplayGumpPacked : Packet, IGumpWriter
|
||||
{
|
||||
private int m_TextEntries, m_Switches;
|
||||
public int TextEntries { get; set; }
|
||||
|
||||
public int TextEntries { get => m_TextEntries;
|
||||
set => m_TextEntries = value;
|
||||
}
|
||||
public int Switches { get => m_Switches;
|
||||
set => m_Switches = value;
|
||||
}
|
||||
public int Switches { get; set; }
|
||||
|
||||
private Gump m_Gump;
|
||||
|
||||
|
|
@ -2507,16 +2494,11 @@ namespace Server.Network
|
|||
|
||||
public sealed class DisplayGumpFast : Packet, IGumpWriter
|
||||
{
|
||||
private int m_TextEntries, m_Switches;
|
||||
|
||||
private int m_LayoutLength;
|
||||
|
||||
public int TextEntries{ get => m_TextEntries;
|
||||
set => m_TextEntries = value;
|
||||
}
|
||||
public int Switches{ get => m_Switches;
|
||||
set => m_Switches = value;
|
||||
}
|
||||
public int TextEntries { get; set; }
|
||||
|
||||
public int Switches { get; set; }
|
||||
|
||||
public DisplayGumpFast( Gump g ) : base( 0xB0 )
|
||||
{
|
||||
|
|
@ -2799,11 +2781,7 @@ namespace Server.Network
|
|||
|
||||
public sealed class SupportedFeatures : Packet
|
||||
{
|
||||
private static FeatureFlags m_AdditionalFlags;
|
||||
|
||||
public static FeatureFlags Value{ get => m_AdditionalFlags;
|
||||
set => m_AdditionalFlags = value;
|
||||
}
|
||||
public static FeatureFlags Value { get; set; }
|
||||
|
||||
public static SupportedFeatures Instantiate( NetState ns )
|
||||
{
|
||||
|
|
@ -2814,7 +2792,7 @@ namespace Server.Network
|
|||
{
|
||||
FeatureFlags flags = ExpansionInfo.CoreExpansion.SupportedFeatures;
|
||||
|
||||
flags |= m_AdditionalFlags;
|
||||
flags |= Value;
|
||||
|
||||
if ( ns.Account is IAccount acct && acct.Limit >= 6 )
|
||||
{
|
||||
|
|
@ -2837,27 +2815,16 @@ namespace Server.Network
|
|||
|
||||
public static class AttributeNormalizer
|
||||
{
|
||||
private static int m_Maximum = 25;
|
||||
private static bool m_Enabled = true;
|
||||
public static int Maximum { get; set; } = 25;
|
||||
|
||||
public static int Maximum
|
||||
{
|
||||
get => m_Maximum;
|
||||
set => m_Maximum = value;
|
||||
}
|
||||
|
||||
public static bool Enabled
|
||||
{
|
||||
get => m_Enabled;
|
||||
set => m_Enabled = value;
|
||||
}
|
||||
public static bool Enabled { get; set; } = true;
|
||||
|
||||
public static void Write( PacketWriter stream, int cur, int max )
|
||||
{
|
||||
if ( m_Enabled && max != 0 )
|
||||
if ( Enabled && max != 0 )
|
||||
{
|
||||
stream.Write( (short) m_Maximum );
|
||||
stream.Write( (short) ((cur * m_Maximum) / max) );
|
||||
stream.Write( (short) Maximum );
|
||||
stream.Write( (short) ((cur * Maximum) / max) );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -2868,10 +2835,10 @@ namespace Server.Network
|
|||
|
||||
public static void WriteReverse( PacketWriter stream, int cur, int max )
|
||||
{
|
||||
if ( m_Enabled && max != 0 )
|
||||
if ( Enabled && max != 0 )
|
||||
{
|
||||
stream.Write( (short) ((cur * m_Maximum) / max) );
|
||||
stream.Write( (short) m_Maximum );
|
||||
stream.Write( (short) ((cur * Maximum) / max) );
|
||||
stream.Write( (short) Maximum );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -3857,19 +3824,15 @@ namespace Server.Network
|
|||
|
||||
public sealed class CityInfo
|
||||
{
|
||||
private string m_City;
|
||||
private string m_Building;
|
||||
private int m_Description;
|
||||
private Point3D m_Location;
|
||||
private Map m_Map;
|
||||
|
||||
public CityInfo( string city, string building, int description, int x, int y, int z, Map m )
|
||||
{
|
||||
m_City = city;
|
||||
m_Building = building;
|
||||
m_Description = description;
|
||||
City = city;
|
||||
Building = building;
|
||||
Description = description;
|
||||
m_Location = new Point3D( x, y, z );
|
||||
m_Map = m;
|
||||
Map = m;
|
||||
}
|
||||
|
||||
public CityInfo( string city, string building, int x, int y, int z, Map m ) : this( city, building, 0, x, y, z, m )
|
||||
|
|
@ -3884,23 +3847,11 @@ namespace Server.Network
|
|||
{
|
||||
}
|
||||
|
||||
public string City
|
||||
{
|
||||
get => m_City;
|
||||
set => m_City = value;
|
||||
}
|
||||
public string City { get; set; }
|
||||
|
||||
public string Building
|
||||
{
|
||||
get => m_Building;
|
||||
set => m_Building = value;
|
||||
}
|
||||
public string Building { get; set; }
|
||||
|
||||
public int Description
|
||||
{
|
||||
get => m_Description;
|
||||
set => m_Description = value;
|
||||
}
|
||||
public int Description { get; set; }
|
||||
|
||||
public int X
|
||||
{
|
||||
|
|
@ -3926,11 +3877,7 @@ namespace Server.Network
|
|||
set => m_Location = value;
|
||||
}
|
||||
|
||||
public Map Map
|
||||
{
|
||||
get => m_Map;
|
||||
set => m_Map = value;
|
||||
}
|
||||
public Map Map { get; set; }
|
||||
}
|
||||
|
||||
public sealed class CharacterListUpdate : Packet
|
||||
|
|
@ -4011,9 +3958,7 @@ namespace Server.Network
|
|||
|
||||
public static class FeatureProtection
|
||||
{
|
||||
private static ThirdPartyFeature m_Disabled = 0;
|
||||
|
||||
public static ThirdPartyFeature DisabledFeatures => m_Disabled;
|
||||
public static ThirdPartyFeature DisabledFeatures { get; private set; } = 0;
|
||||
|
||||
public static void Disable( ThirdPartyFeature feature )
|
||||
{
|
||||
|
|
@ -4028,9 +3973,9 @@ namespace Server.Network
|
|||
public static void SetDisabled( ThirdPartyFeature feature, bool value )
|
||||
{
|
||||
if ( value )
|
||||
m_Disabled |= feature;
|
||||
DisabledFeatures |= feature;
|
||||
else
|
||||
m_Disabled &= ~feature;
|
||||
DisabledFeatures &= ~feature;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -4091,7 +4036,7 @@ namespace Server.Network
|
|||
else if ( a.Limit == 1 )
|
||||
flags |= (CharacterListFlags.SlotLimit & CharacterListFlags.OneCharacterSlot); // Limit Characters & One Character
|
||||
|
||||
m_Stream.Write( (int)(flags | m_AdditionalFlags) ); // Additional Flags
|
||||
m_Stream.Write( (int)(flags | AdditionalFlags) ); // Additional Flags
|
||||
|
||||
m_Stream.Write( (short) -1 );
|
||||
|
||||
|
|
@ -4126,13 +4071,7 @@ namespace Server.Network
|
|||
|
||||
private static System.Security.Cryptography.MD5CryptoServiceProvider m_MD5Provider;
|
||||
|
||||
private static CharacterListFlags m_AdditionalFlags;
|
||||
|
||||
public static CharacterListFlags AdditionalFlags
|
||||
{
|
||||
get => m_AdditionalFlags;
|
||||
set => m_AdditionalFlags = value;
|
||||
}
|
||||
public static CharacterListFlags AdditionalFlags { get; set; }
|
||||
}
|
||||
|
||||
public sealed class CharacterListOld : Packet
|
||||
|
|
@ -4285,41 +4224,20 @@ namespace Server.Network
|
|||
|
||||
public sealed class ServerInfo
|
||||
{
|
||||
private string m_Name;
|
||||
private int m_FullPercent;
|
||||
private int m_TimeZone;
|
||||
private IPEndPoint m_Address;
|
||||
public string Name { get; set; }
|
||||
|
||||
public string Name
|
||||
{
|
||||
get => m_Name;
|
||||
set => m_Name = value;
|
||||
}
|
||||
public int FullPercent { get; set; }
|
||||
|
||||
public int FullPercent
|
||||
{
|
||||
get => m_FullPercent;
|
||||
set => m_FullPercent = value;
|
||||
}
|
||||
public int TimeZone { get; set; }
|
||||
|
||||
public int TimeZone
|
||||
{
|
||||
get => m_TimeZone;
|
||||
set => m_TimeZone = value;
|
||||
}
|
||||
|
||||
public IPEndPoint Address
|
||||
{
|
||||
get => m_Address;
|
||||
set => m_Address = value;
|
||||
}
|
||||
public IPEndPoint Address { get; set; }
|
||||
|
||||
public ServerInfo( string name, int fullPercent, TimeZone tz, IPEndPoint address )
|
||||
{
|
||||
m_Name = name;
|
||||
m_FullPercent = fullPercent;
|
||||
m_TimeZone = tz.GetUtcOffset( DateTime.Now ).Hours;
|
||||
m_Address = address;
|
||||
Name = name;
|
||||
FullPercent = fullPercent;
|
||||
TimeZone = tz.GetUtcOffset( DateTime.Now ).Hours;
|
||||
Address = address;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -4413,15 +4331,14 @@ namespace Server.Network
|
|||
}
|
||||
|
||||
protected PacketWriter m_Stream;
|
||||
private int m_PacketID;
|
||||
private int m_Length;
|
||||
private State m_State;
|
||||
|
||||
public int PacketID => m_PacketID;
|
||||
public int PacketID { get; }
|
||||
|
||||
protected Packet( int packetID )
|
||||
{
|
||||
m_PacketID = packetID;
|
||||
PacketID = packetID;
|
||||
|
||||
if (Core.Profiling) {
|
||||
PacketSendProfile prof = PacketSendProfile.Acquire( GetType() );
|
||||
|
|
@ -4432,13 +4349,13 @@ namespace Server.Network
|
|||
public void EnsureCapacity( int length )
|
||||
{
|
||||
m_Stream = PacketWriter.CreateInstance( length );// new PacketWriter( length );
|
||||
m_Stream.Write( (byte) m_PacketID );
|
||||
m_Stream.Write( (byte) PacketID );
|
||||
m_Stream.Write( (short) 0 );
|
||||
}
|
||||
|
||||
protected Packet( int packetID, int length )
|
||||
{
|
||||
m_PacketID = packetID;
|
||||
PacketID = packetID;
|
||||
m_Length = length;
|
||||
|
||||
m_Stream = PacketWriter.CreateInstance( length );// new PacketWriter( length );
|
||||
|
|
@ -4609,7 +4526,7 @@ namespace Server.Network
|
|||
{
|
||||
int diff = (int)m_Stream.Length - m_Length;
|
||||
|
||||
Console.WriteLine( "Packet: 0x{0:X2}: Bad packet length! ({1}{2} bytes)", m_PacketID, diff >= 0 ? "+" : "", diff );
|
||||
Console.WriteLine( "Packet: 0x{0:X2}: Bad packet length! ({1}{2} bytes)", PacketID, diff >= 0 ? "+" : "", diff );
|
||||
}
|
||||
|
||||
MemoryStream ms = m_Stream.UnderlyingStream;
|
||||
|
|
@ -4625,10 +4542,10 @@ namespace Server.Network
|
|||
Compression.Compress(m_CompiledBuffer, 0, length, buffer, ref length);
|
||||
|
||||
if (length <= 0) {
|
||||
Console.WriteLine("Warning: Compression buffer overflowed on packet 0x{0:X2} ('{1}') (length={2})", m_PacketID, GetType().Name, length);
|
||||
Console.WriteLine("Warning: Compression buffer overflowed on packet 0x{0:X2} ('{1}') (length={2})", PacketID, GetType().Name, length);
|
||||
using (StreamWriter op = new StreamWriter("compression_overflow.log", true))
|
||||
{
|
||||
op.WriteLine("{0} Warning: Compression buffer overflowed on packet 0x{1:X2} ('{2}') (length={3})", DateTime.UtcNow, m_PacketID, GetType().Name, length);
|
||||
op.WriteLine("{0} Warning: Compression buffer overflowed on packet 0x{1:X2} ('{2}') (length={3})", DateTime.UtcNow, PacketID, GetType().Name, length);
|
||||
op.WriteLine(new System.Diagnostics.StackTrace());
|
||||
}
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -36,23 +36,20 @@ namespace Server.Network {
|
|||
gram = new Gram();
|
||||
}
|
||||
|
||||
gram._buffer = AcquireBuffer();
|
||||
gram._length = 0;
|
||||
gram.Buffer = AcquireBuffer();
|
||||
gram.Length = 0;
|
||||
|
||||
return gram;
|
||||
}
|
||||
}
|
||||
|
||||
private byte[] _buffer;
|
||||
private int _length;
|
||||
public byte[] Buffer { get; private set; }
|
||||
|
||||
public byte[] Buffer => _buffer;
|
||||
public int Length { get; private set; }
|
||||
|
||||
public int Length => _length;
|
||||
public int Available => ( Buffer.Length - Length );
|
||||
|
||||
public int Available => ( _buffer.Length - _length );
|
||||
|
||||
public bool IsFull => ( _length == _buffer.Length );
|
||||
public bool IsFull => ( Length == Buffer.Length );
|
||||
|
||||
private Gram() {
|
||||
}
|
||||
|
|
@ -60,9 +57,9 @@ namespace Server.Network {
|
|||
public int Write( byte[] buffer, int offset, int length ) {
|
||||
int write = Math.Min( length, Available );
|
||||
|
||||
System.Buffer.BlockCopy( buffer, offset, _buffer, _length, write );
|
||||
System.Buffer.BlockCopy( buffer, offset, Buffer, Length, write );
|
||||
|
||||
_length += write;
|
||||
Length += write;
|
||||
|
||||
return write;
|
||||
}
|
||||
|
|
@ -70,7 +67,7 @@ namespace Server.Network {
|
|||
public void Release() {
|
||||
lock ( _pool ) {
|
||||
_pool.Push( this );
|
||||
ReleaseBuffer( _buffer );
|
||||
ReleaseBuffer( Buffer );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue