source
Created by: Andrew
This commit is contained in:
138
trunk/KartExtreme/Net/KartClient.cs
Normal file
138
trunk/KartExtreme/Net/KartClient.cs
Normal file
@@ -0,0 +1,138 @@
|
||||
using KartExtreme.IO;
|
||||
using System;
|
||||
using System.Net.Sockets;
|
||||
using System.Text;
|
||||
using KartExtreme.IO.Packet;
|
||||
|
||||
namespace KartExtreme.Net
|
||||
{
|
||||
public sealed class KartClient : Session
|
||||
{
|
||||
public KartClient(Socket socket)
|
||||
: base(socket)
|
||||
{
|
||||
this.SendPatchData(Constants.Version, "http://kart.dn.nexoncdn.co.kr/patch");
|
||||
|
||||
/*
|
||||
using (OutPacket outPacket = new OutPacket())
|
||||
{
|
||||
outPacket.WriteHexString("80 05 2B 28"); // NOTE: HEADER. DO NOT CHANGE. PROBABLY typeid() OF HANDLER?
|
||||
// 8
|
||||
outPacket.WriteShort(5002); // Note: Localisation.
|
||||
// 10
|
||||
outPacket.WriteShort(1); // NOTE: Service area/version.
|
||||
// 12
|
||||
outPacket.WriteShort(26); // NOTE: Subversion number? Current = 26. 25 = Incompatible with server, 27 = Close client.
|
||||
// 14
|
||||
outPacket.WriteString("http://kart.dn.nexoncdn.co.kr/patch");
|
||||
// 18
|
||||
|
||||
// outPacket.WriteHexString("81 82 83 84 85 86 87 88");
|
||||
// outPacket.WriteHexString("94 2E F9 A8 E1 4B 13 5D");
|
||||
// outPacket.WriteHexString("01 02 03 04 05 06 07 08");
|
||||
|
||||
outPacket.WriteInt(0x11111111);
|
||||
outPacket.WriteInt(0x22222222);
|
||||
outPacket.WriteByte(0xE0);
|
||||
outPacket.WriteHexString("03 00 09 03 00 00 03 00 00 00 00 00 83 A3 E5 47 00 00 15 00 0D 00 00 00 03 00 00 00 00 00 65");
|
||||
// NOTE: Nothing more needed.
|
||||
|
||||
if (false)
|
||||
{
|
||||
outPacket.WriteHexString("80 05 2B 28"); // NOTE: HEADER. DO NOT CHANGE. PROBABLY typeid() OF HANDLER?
|
||||
outPacket.WriteHexString("EA 00 03 00 95 0B");
|
||||
outPacket.WriteString("");
|
||||
// NOTE: Nothing more needed.
|
||||
|
||||
}
|
||||
|
||||
if (false)
|
||||
{
|
||||
outPacket.WriteHexString("80 05 2B 28 EA 03 03 00 95 0B");
|
||||
outPacket.WriteString("");
|
||||
// NOTE: Nothing more needed.
|
||||
}
|
||||
if (false)
|
||||
{
|
||||
// NOTE: Original (Korean KartRider).
|
||||
outPacket.WriteHexString("80 05 2B 28");
|
||||
outPacket.WriteHexString("EA 03 03 00 95 0B");
|
||||
outPacket.WriteString("http://kart.dn.nexoncdn.co.kr/patch");
|
||||
outPacket.WriteHexString("94 2E F9 A8 E1 4B 13 5D 76 03 00 09 03 00 00 03 00 00 00 00 00 83 A3 E5 47 00 00 15 00 0D 00 00 00 03 00 00 00 00 00 65");
|
||||
}
|
||||
|
||||
this.Send(outPacket);
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
public override void OnDisconnect()
|
||||
{
|
||||
Log.Inform("Lost connection from {0}.", this.Label);
|
||||
|
||||
Server.RemoveClient(this);
|
||||
}
|
||||
|
||||
public override void OnPacket(InPacket inPacket)
|
||||
{
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
//int typeId = inPacket.ReadInt();
|
||||
//byte wdf = BitConverter.
|
||||
|
||||
Log.Hex("Received Packet ", inPacket.ToArray());
|
||||
//Log.Inform("String val:" + Encoding.Unicode.GetString(inPacket.ToArray()));
|
||||
|
||||
byte typeId = inPacket.ReadByte();
|
||||
byte a2 = inPacket.ReadByte();
|
||||
byte a3 = inPacket.ReadByte();
|
||||
byte a4 = inPacket.ReadByte();
|
||||
|
||||
int header = BitConverter.ToInt32(new byte[] { typeId, a2, a3, a4 }, 0);
|
||||
switch (typeId)
|
||||
{
|
||||
case 0xBA:
|
||||
using (OutPacket oPacket = new OutPacket())
|
||||
{
|
||||
oPacket.WriteInt(header + 1); // header
|
||||
oPacket.WriteInt(0); // header
|
||||
oPacket.WriteInt(0); // header
|
||||
oPacket.WriteInt(0); // header
|
||||
oPacket.WriteInt(0); // header
|
||||
oPacket.WriteInt(0); // header
|
||||
oPacket.WriteInt(0); // header
|
||||
oPacket.WriteInt(0); // header
|
||||
oPacket.WriteInt(0); // header
|
||||
oPacket.WriteInt(0); // header
|
||||
oPacket.WriteInt(0); // header
|
||||
oPacket.WriteInt(0); // header
|
||||
oPacket.WriteInt(0); // header
|
||||
oPacket.WriteInt(0); // header
|
||||
oPacket.WriteInt(0); // header
|
||||
oPacket.WriteInt(0); // header
|
||||
oPacket.WriteInt(0); // header
|
||||
oPacket.WriteInt(0); // header
|
||||
oPacket.WriteInt(0); // header
|
||||
oPacket.WriteInt(0); // header
|
||||
Send(oPacket);
|
||||
//WALAO!
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
catch (SendPacketException)
|
||||
{
|
||||
Log.Error("Client was disconnected while sending packet");
|
||||
Close();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Log.Error("Exception during packet handling from {0}: {1}", this.Label, e.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
47
trunk/KartExtreme/Net/Server.cs
Normal file
47
trunk/KartExtreme/Net/Server.cs
Normal file
@@ -0,0 +1,47 @@
|
||||
using KartExtreme.Data;
|
||||
using KartExtreme.IO;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Net.Sockets;
|
||||
|
||||
namespace KartExtreme.Net
|
||||
{
|
||||
public static class Server
|
||||
{
|
||||
private static Acceptor _acceptor;
|
||||
private static List<KartClient> _clients;
|
||||
|
||||
public static void Initialize()
|
||||
{
|
||||
Server._clients = new List<KartClient>();
|
||||
|
||||
Settings.Initialize();
|
||||
|
||||
Database.Test();
|
||||
Database.Analyze();
|
||||
|
||||
Server._acceptor = new Acceptor(Settings.GetUShort("Net/Port"));
|
||||
Server._acceptor.OnClientAccepted = Server.OnClientAccepted;
|
||||
Server._acceptor.Start();
|
||||
}
|
||||
|
||||
private static void OnClientAccepted(Socket socket)
|
||||
{
|
||||
KartClient client = new KartClient(socket);
|
||||
|
||||
Log.Inform("Accepted connection from {0}.", client.Label);
|
||||
|
||||
Server.AddClient(client);
|
||||
}
|
||||
|
||||
public static void AddClient(KartClient client)
|
||||
{
|
||||
Server._clients.Add(client);
|
||||
}
|
||||
|
||||
public static void RemoveClient(KartClient client)
|
||||
{
|
||||
Server._clients.Remove(client);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user