|
You last visited: Today at 14:54
Advertisement
[Release]Async Sockets (No packet-splitter)
Discussion on [Release]Async Sockets (No packet-splitter) within the CO2 Programming forum part of the Conquer Online 2 category.
09/20/2012, 19:07
|
#16
|
elite*gold: 0
Join Date: Sep 2012
Posts: 775
Received Thanks: 327
|
Quote:
GREATZ mate
____________________________
im trying to edit pro4never base to make it first receive header then body
what the actual code was
Code:
public WinSocket(string ExternalIp, ushort InternalPort, ushort ExternalPort)
{
try
{
OutIP = ExternalIp;
OutPort = ExternalPort;
_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
_socket.Bind(new IPEndPoint(IPAddress.Any, InternalPort));
_socket.Listen(500);
_socket.BeginAccept(AcceptConnections, new Wrapper());
}
catch { }
}
private void AcceptConnections(IAsyncResult result)
{
try
{
Wrapper wr = result.AsyncState as Wrapper; //define instance of warpper
wr._socket = _socket.EndAccept(result); //endaccept for warper socket with anysc result
wr._Port = this.OutPort;
wr.buffer = new byte[65535]; //warrper buffer
wr._socket.BeginReceive(wr.buffer, 0, 65535, SocketFlags.None, ReceiveData, wr); //begin receive on warpper socket (warrper buffer , offset , size , flag , async call back , warpper object)
AnnounceNewConnection.Invoke(wr); //invoking "AnnounceNewConnection" event with warpper parameter
_socket.BeginAccept(AcceptConnections, new Wrapper()); //warpper socket begin accepting new connection
}
catch { }
}
private void ReceiveData(IAsyncResult result)
{
try
{
Wrapper wr = result.AsyncState as Wrapper;
if (!wr._socket.Connected)
return;
SocketError error = SocketError.Disconnecting;
int size = wr._socket.EndReceive(result, out error);
if (error == SocketError.Success && size != 0)
{
byte[] buffer = new byte[size];
Buffer.BlockCopy(wr.buffer, 0, buffer, 0, size);
byte[] question = new byte[] { 1 };
AnnounceReceive.Invoke(buffer, wr, question);
if (wr._socket.Connected && question[0] == 1)
wr._socket.BeginReceive(wr.buffer, 0, 65535, SocketFlags.None, ReceiveData, wr);
}
else
{
if (wr._socket.Connected)
{
wr._socket.Disconnect(true);
}
try
{
AnnounceDisconnection.Invoke(wr);
}
catch { }
}
}
catch { }
}
what i did so far
Code:
private void AcceptConnections(IAsyncResult resultt)
{
try
{
ReceiveHeader(resultt);
}
catch { }
}
private byte[] receiveBuffer;
private ushort type;
private ushort size;
public void ReceiveHeader(IAsyncResult result)
{
// only accept 4 bytes which is size and type
Wrapper wr = result.AsyncState as Wrapper;
wr._socket = _socket.EndAccept(result);
wr._Port = this.OutPort;
wr.buffer = new byte[4];
wr._socket.BeginReceive(wr.buffer, 0, 4, SocketFlags.None, new AsyncCallback(ReceiveHeader_Callback), wr);
AnnounceNewConnection.Invoke(wr);
_socket.BeginAccept(AcceptConnections, new Wrapper());
}
public void ReceiveBody(IAsyncResult result)
{
Wrapper wr = result.AsyncState as Wrapper;
wr._socket = _socket.EndAccept(result);
wr._Port = this.OutPort;
wr.buffer = new byte[size - 4];
wr._socket.BeginReceive(wr.buffer, 0, (size - 4), SocketFlags.None, new AsyncCallback(ReceiveBody_Callback), wr);
AnnounceNewConnection.Invoke(wr);
_socket.BeginAccept(AcceptConnections, new Wrapper());
}
private void ReceiveHeader_Callback(IAsyncResult asyncResult)
{
try
{
Wrapper wr = asyncResult.AsyncState as Wrapper;
if (!wr._socket.Connected)
return;
SocketError error = SocketError.Disconnecting;
int hSize = wr._socket.EndReceive(asyncResult, out error);
if (error == SocketError.Success && size != 0)
{
if (hSize == 4)
{
byte[] rBuffer = new byte[4];
System.Buffer.BlockCopy(receiveBuffer, 0, rBuffer, 0, 4);
DataPacket header = new DataPacket(rBuffer);
size = header.Size;
type = header.Type;
ReceiveBody(asyncResult);
}
else
AnnounceDisconnection.Invoke(wr);
}
else
AnnounceDisconnection.Invoke(wr);
}
catch
{
}
}
private void ReceiveBody_Callback(IAsyncResult asyncResult)
{
try
{
Wrapper wr = asyncResult.AsyncState as Wrapper;
if (!wr._socket.Connected)
return;
SocketError error = SocketError.Disconnecting;
int bSize = wr._socket.EndReceive(asyncResult, out error);
if (error == SocketError.Success)
{
if (bSize == (size - 4))
{
byte[] rBuffer = new byte[size];
System.Buffer.BlockCopy(receiveBuffer, 0, rBuffer, 4, bSize);
DataPacket bpacket = new DataPacket(rBuffer);
bpacket.Size = size;
bpacket.Type = type;
byte[] question = new byte[] { 1 };
AnnounceReceive.Invoke(bpacket, wr, question);
if (wr._socket.Connected && question[0] == 1)
ReceiveHeader(asyncResult);
ReceiveHeader(asyncResult);
}
else
AnnounceDisconnection.Invoke(wr);
}
else
AnnounceDisconnection.Invoke(wr);
}
catch
{}
}
}
i think im doing something stupid but i got no idea what it is , don't really code it for me , just tell me what im doing and what i should be doing , thanks folks
|
|
|
09/20/2012, 22:55
|
#17
|
elite*gold: 0
Join Date: Sep 2012
Posts: 171
Received Thanks: 68
|
Quote:
Originally Posted by I don't have a username
Graduated with an A
|
Congratulations ! :P
|
|
|
|
|
Similar Threads
|
[Release] EXP/SP Rates splitter
02/18/2024 - SRO PServer Guides & Releases - 38 Replies
so,this project was only in underground section,but i decided to release it here,
this is a patcher which sets sp rates,so now you can make smth like:
exp rates:200x
sp rates:300x
download in attachments (source code included)
this works only for vsro 188 serverfiles
put it in your serverfiles folder,run Rates Splitter.exe (make sure your gameserver is called SR_GameServer.exe) and set your rates
|
Async Socket Wrapper
11/11/2011 - CO2 Programming - 8 Replies
So I was bored and thought I would code a socket wrapper. It's a class library, but full project is available for download + an example use for a socket server.
It contains both wrapper for server and client stuff, which means it can be used for either private servers as server-socket or for a proxy.
WinAsync - This class contains all the events.
public delegate void WinEvent(WinClient wClient);
public delegate void WinBufferEvent(WinClient wClient, WinBuffer Buffer);
...
|
[VK]Splitter entfernen!
06/08/2011 - Metin2 Trading - 0 Replies
Verkaufe Stein-Handbuch!
Verkaufe auf S25 Leviathan einen Account(Level 1,hat ein Stein-Handbuch).
Damit kannst du deine Splitter aus einen beliebiegen Gegenstand entfernen!
Nehme nur E*Gold!
Macht Gebote!
|
[How To]Splitter Enfernen
11/03/2008 - Metin2 Guides & Templates - 20 Replies
Hi,
Ich sage euch nun wie ihr Splitter enfernen koennt wenn ihr welche in euren waffen bzw ruetungen habt.Das geht auf jedem Server (ausser deutschen)!.Zuerst muesst ihr lvl 25 erreicht haben was nicht ausserordentlich schwer ist auf longju,Us,chinatown usw :D.Danach geht ihr zu Deokbae (dem holzfaeller) in map2 und klickt auf ihn.Das muesste dann ca so aussehen : 黄金斧.Danach geht ihr (egal welches lvl ihr seit also koennt auch lvl 70 sein^^) St.Wilde Generaele killen.Irgendwann nach langem...
|
Splitter-,-
08/31/2008 - Metin2 Private Server - 15 Replies
huhu,
wollt mal fragn ob es am markt auch splitter entfernen gibt?
Und wenn ja wie sieht das aus?
oder kann mir das jemand ingame verkaufn der itemshopt...
|
All times are GMT +2. The time now is 14:54.
|
|