I toke a look at some books, not even reading it, but it looks awesome lol'd
I found NCurses for Native Consoles so I'll try some things out..
At this moment, I'm busy with PacketHandling (.NET Framework..)
Code:
static void OnReceive(IAsyncResult^ asyncResult)
{
StateObject ^so = safe_cast<StateObject^>(asyncResult->AsyncState);
Socket ^s = so->workSocket;
int read = s->EndReceive(asyncResult);
if(read > 0)
{
so->sb->Append( Encoding::ASCII->GetString( so->buffer, 0, read ) );
String ^StringsInPacket = so->sb->ToString();
s->BeginReceive( so->buffer, 0, so->BUFFER_SIZE, SocketFlags::None,
gcnew AsyncCallback( &OnReceive ), so );
if(StringsInPacket->ToString()->Contains("<policy-file-request/>"))
{
array<Byte> ^GotBytesFromPacket = Encoding::ASCII->GetBytes("<?xml version=\"1.0\"?> " +
"<!DOCTYPE cross-domain-policy SYSTEM \"/xml/dtds/cross-domain-policy.dtd\"> " +
"<cross-domain-policy> " +
"<allow-access-from domain=\"*\" to-ports=\"*\" /> " +
"</cross-domain-policy>\x0");
s->Send(GotBytesFromPacket, GotBytesFromPacket->Length, SocketFlags::None);
Console::WriteLine("Send policy to client, Wait for response.");
s->BeginReceive( so->buffer, 0, StateObject::BUFFER_SIZE, SocketFlags::None,
gcnew AsyncCallback( &OnReceive ), so );
}
else
{
if(StringsInPacket->Length > 0)
{
int packetint = PacketRequests::DecodeB64(StringsInPacket->Substring(1,2));
PacketRequests::HandlePacket(StringsInPacket->Substring(3, packetint), s);
StringsInPacket->Remove(0, 3 + packetint);
}
}
}
}
Code:
static void HandlePacket(String ^IDs, Socket ^s)
{
int dec = DecodeB64(IDs->Substring(0, 2));
if(Packets[dec] == nullptr)
{
Console::WriteLine("Not Invoked: " + IDs + " Decimal " + dec);
}
else
{
Packets[dec]->Invoke(s);
Console::WriteLine("Invoked: " + IDs + " Decimal " + dec);
}
}
Code:
static void SendPacket(String ^Data, Socket ^s)
{
try
{
array<Byte> ^BytesData = Encoding::ASCII->GetBytes(Data);
Console::WriteLine("[SND] . " + Encoding::ASCII->GetString(BytesData)->ToString());
s->BeginSend(BytesData, 0, BytesData->Length, SocketFlags::None, gcnew AsyncCallback(&OnSend), s);
}
catch (Exception^ e)
{
Console::WriteLine(e);
}
}
Code:
delegate void PacketHandler(Socket ^s);
static Dictionary<int, PacketHandler^> ^Packets = gcnew Dictionary<int, PacketHandler^>();
static void LoadRequests()
{
RegisterOthers();
}
static void Register(int ID, PacketHandler^ PacketH)
{
if(Packets->ContainsKey(ID))
{
//nothing
}
Packets->Add(ID, PacketH);
}
static void RegisterOthers()
{
Register(206, gcnew PacketHandler(&HandleSessionDetails));
Register(415, gcnew PacketHandler(&HandleTicket));
}