This commit is contained in:
mark 2009-02-26 08:35:07 +00:00
parent d903852b37
commit 2c723b90fc
3 changed files with 71 additions and 7 deletions

View file

@ -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,

View file

@ -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;

View file

@ -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 )