! UPDATED Download: Pack.rar
Information
SocketListener using async, events and pooling. (Very Stable)
Read the 'README' :)
Credits
50% Microsoft (Doing examples how to create)
50% Me (Doing te codes)
Example(s)
Pooling
Code:
internal SocketAsyncEventArgs Pop()
{
lock (this.Pool)
{
return this.Pool.Pop();
}
}
internal void Push(SocketAsyncEventArgs item)
{
lock (this.Pool)
{
this.Pool.Push(item);
}
} Async Accepting
Code:
private static void WaitForAsync(SocketAsyncEventArgs Args)
{
if (Args == null)
{
Args = new SocketAsyncEventArgs();
Args.Completed += new EventHandler<SocketAsyncEventArgs>(AcceptAsync_Completed);
}
else
{
Args.AcceptSocket = null;
}
SocketSemaphore.WaitOne();
BaseSocket.AcceptAsync(Args);
}
private static void HandleAsync(SocketAsyncEventArgs Args)
{
try
{
Interlocked.Increment(ref ConnectedAmount);
var SingleSocketAsync = SocketPool.Pop();
var Token = (AsyncUserToken)SingleSocketAsync.UserToken;
Token.Socket = Args.AcceptSocket;
var Session = new Session(Interlocked.Increment(ref Counter), Token.Socket, Args);
Sessions.Add(Session.Id, Session);
if (!Args.AcceptSocket.ReceiveAsync(SingleSocketAsync))
{
HandleReceive(SingleSocketAsync);
}
}
catch { }
finally { WaitForAsync(Args); }
}
Like if you like!
I use this in (Boolean) : http://forum.ragezone.com/f331/proje...63a-os-808457/