From 2c723b90fc311a4245074d91680953e32241eb65 Mon Sep 17 00:00:00 2001 From: mark Date: Thu, 26 Feb 2009 08:35:07 +0000 Subject: [PATCH] --- Server/Network/Compression.cs | 61 +++++++++++++++++++++++++++++++---- Server/TileMatrix.cs | 9 +++++- Server/TileMatrixPatch.cs | 8 +++++ 3 files changed, 71 insertions(+), 7 deletions(-) diff --git a/Server/Network/Compression.cs b/Server/Network/Compression.cs index d33666493..3717e8d13 100644 --- a/Server/Network/Compression.cs +++ b/Server/Network/Compression.cs @@ -177,12 +177,17 @@ namespace Server.Network { public static readonly ICompressor Compressor; static Compression() { - if ( Core.Unix ) - Compressor = new CompressorUnix(); - else if ( Core.Is64Bit ) + if ( Core.Unix ) { + if ( Core.Is64Bit ) { + Compressor = new CompressorUnix64(); + } else { + Compressor = new CompressorUnix32(); + } + } else if ( Core.Is64Bit ) { Compressor = new Compressor64(); - else + } else { Compressor = new Compressor32(); + } } public static ZLibError Pack( byte[] dest, ref int destLength, byte[] source, int sourceLength ) { @@ -279,7 +284,7 @@ namespace Server.Network { } } - public sealed class CompressorUnix : ICompressor { + public sealed class CompressorUnix32 : ICompressor { [DllImport( "libz" )] private static extern string zlibVersion(); @@ -292,7 +297,7 @@ namespace Server.Network { [DllImport( "libz" )] private static extern ZLibError uncompress( byte[] dest, ref int destLen, byte[] source, int sourceLen ); - public CompressorUnix() { + public CompressorUnix32() { } public string Version { @@ -314,6 +319,50 @@ namespace Server.Network { } } + public sealed class CompressorUnix64 : ICompressor { + [DllImport( "libz" )] + private static extern string zlibVersion(); + + [DllImport( "libz" )] + private static extern ZLibError compress( byte[] dest, ref ulong destLength, byte[] source, int sourceLength ); + + [DllImport( "libz" )] + private static extern ZLibError compress2( byte[] dest, ref ulong destLength, byte[] source, int sourceLength, ZLibQuality quality ); + + [DllImport( "libz" )] + private static extern ZLibError uncompress( byte[] dest, ref ulong destLen, byte[] source, int sourceLen ); + + public CompressorUnix64() { + } + + public string Version { + get { + return zlibVersion(); + } + } + + public ZLibError Compress( byte[] dest, ref int destLength, byte[] source, int sourceLength ) { + ulong destLengthLong = (ulong)destLength; + ZLibError z = compress( dest, ref destLengthLong, source, sourceLength ); + destLength = (int)destLengthLong; + return z; + } + + public ZLibError Compress( byte[] dest, ref int destLength, byte[] source, int sourceLength, ZLibQuality quality ) { + ulong destLengthLong = (ulong)destLength; + ZLibError z = compress2( dest, ref destLengthLong, source, sourceLength, quality ); + destLength = (int)destLengthLong; + return z; + } + + public ZLibError Decompress( byte[] dest, ref int destLength, byte[] source, int sourceLength ) { + ulong destLengthLong = (ulong)destLength; + ZLibError z = uncompress( dest, ref destLengthLong, source, sourceLength ); + destLength = (int)destLengthLong; + return z; + } + } + public enum ZLibError : int { VersionError = -6, BufferError = -5, diff --git a/Server/TileMatrix.cs b/Server/TileMatrix.cs index 291182feb..0e81c17df 100644 --- a/Server/TileMatrix.cs +++ b/Server/TileMatrix.cs @@ -399,8 +399,11 @@ namespace Server fixed ( StaticTile *pTiles = staTiles ) { +#if !MONO NativeReader.Read( m_Statics.SafeFileHandle.DangerousGetHandle(), pTiles, length ); - +#else + NativeReader.Read( m_Statics.Handle, pTiles, length ); +#endif if ( m_Lists == null ) { m_Lists = new TileList[8][]; @@ -469,7 +472,11 @@ namespace Server fixed ( Tile *pTiles = tiles ) { +#if !MONO NativeReader.Read( m_Map.SafeFileHandle.DangerousGetHandle(), pTiles, 192 ); +#else + NativeReader.Read( m_Map.Handle, pTiles, 192 ); +#endif } return tiles; diff --git a/Server/TileMatrixPatch.cs b/Server/TileMatrixPatch.cs index ea4b45cf1..84e44e6b0 100644 --- a/Server/TileMatrixPatch.cs +++ b/Server/TileMatrixPatch.cs @@ -99,7 +99,11 @@ namespace Server fixed ( Tile *pTiles = tiles ) { +#if !MONO NativeReader.Read( fsData.SafeFileHandle.DangerousGetHandle(), pTiles, 192 ); +#else + NativeReader.Read( fsData.Handle, pTiles, 192 ); +#endif } matrix.SetLandBlock( x, y, tiles ); @@ -164,7 +168,11 @@ namespace Server fixed ( StaticTile *pTiles = staTiles ) { +#if !MONO NativeReader.Read( fsData.SafeFileHandle.DangerousGetHandle(), pTiles, length ); +#else + NativeReader.Read( fsData.Handle, pTiles, length ); +#endif StaticTile *pCur = pTiles, pEnd = pTiles + tileCount; while ( pCur < pEnd )