rendered paste bodyusing System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Diagnostics;
using Microsoft.Win32;
namespace AHSoftware.CubeMon.Games.CubeEngineBase
{
public class Ping
{
IPEndPoint receiver;
public IPEndPoint Receiver
{
get { return receiver; }
set { receiver = value; }
}
public Ping()
{
}
public Ping(IPEndPoint receiver)
{
Receiver = receiver;
}
public byte[] Send()
{
byte[] data = { 0x1 };
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.IP);
socket.Connect(receiver);
socket.Send(data);
socket.ReceiveTimeout = 2000;
byte[] pong = new byte[256];
socket.Receive(pong);
if(pong == null || pong.Length < 1 || pong[0] != data[0]) return null;
return pong;
}
}
public class EnetDecoder
{
protected Byte[] buf;
protected int cursor = 0;
protected bool endOfBuffer = false;
protected virtual byte NextByte()
{
return buf[cursor++];
}
public bool EndOfBuffer
{
get { return endOfBuffer; }
}
public EnetDecoder(Byte[] buf)
{
this.buf = buf;
}
public virtual int GetInt32()
{
if(endOfBuffer) return 0;
if(cursor >= buf.Length) { endOfBuffer = true; return 0; }
Byte b = NextByte();
if(b == 0x80)
{
if(cursor + 1 >= buf.Length) { endOfBuffer = true; return 0; }
int value = NextByte();
return value | NextByte() << 8;
}
else if(b == 0x81)
{
if(cursor + 3 >= buf.Length) { endOfBuffer = true; return 0; }
int value = NextByte();
value |= NextByte() << 8;
value |= NextByte() << 16;
return value | NextByte() << 24;
}
else return b;
}
public virtual string GetString()
{
if(endOfBuffer) return null;
const int maxChars = 5000;
List<byte> chars = new List<byte>();
do
{
byte b = (byte)GetInt32();
if(b == 0x00) break;
chars.Add(b);
} while(!endOfBuffer && chars.Count < maxChars);
return Encoding.ASCII.GetString(chars.ToArray());
}
}
}