mirror of
https://github.com/esiur/esiur-dotnet.git
synced 2025-06-27 13:33:13 +00:00
Token
This commit is contained in:
@ -42,7 +42,7 @@ namespace Esyur.Net.Sockets
|
||||
public delegate void ISocketConnectEvent();
|
||||
public delegate void ISocketCloseEvent();
|
||||
|
||||
public interface ISocket: IDestructible
|
||||
public interface ISocket : IDestructible
|
||||
{
|
||||
SocketState State { get; }
|
||||
|
||||
@ -57,6 +57,7 @@ namespace Esyur.Net.Sockets
|
||||
void Close();
|
||||
AsyncReply<bool> Connect(string hostname, ushort port);
|
||||
bool Begin();
|
||||
AsyncReply<bool> BeginAsync();
|
||||
//ISocket Accept();
|
||||
AsyncReply<ISocket> AcceptAsync();
|
||||
ISocket Accept();
|
||||
|
@ -76,21 +76,19 @@ namespace Esyur.Net.Sockets
|
||||
{
|
||||
var rt = new AsyncReply<bool>();
|
||||
|
||||
this.hostname = hostname;
|
||||
this.server = false;
|
||||
|
||||
state = SocketState.Connecting;
|
||||
await sock.ConnectAsync(hostname, port);
|
||||
|
||||
if (server)
|
||||
await ssl.AuthenticateAsServerAsync(cert);
|
||||
else
|
||||
await ssl.AuthenticateAsClientAsync(hostname);
|
||||
|
||||
try
|
||||
{
|
||||
await BeginAsync();
|
||||
state = SocketState.Established;
|
||||
OnConnect?.Invoke();
|
||||
|
||||
if (!server)
|
||||
Begin();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@ -135,11 +133,28 @@ namespace Esyur.Net.Sockets
|
||||
|
||||
private void SendCallback(IAsyncResult ar)
|
||||
{
|
||||
if (ar != null && ar.AsyncState != null)
|
||||
((AsyncReply<bool>)ar.AsyncState).Trigger(true);
|
||||
if (ar != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
ssl.EndWrite(ar);
|
||||
|
||||
if (ar.AsyncState != null)
|
||||
((AsyncReply<bool>)ar.AsyncState).Trigger(true);
|
||||
}
|
||||
catch
|
||||
{
|
||||
if (state != SocketState.Closed && !sock.Connected)
|
||||
{
|
||||
state = SocketState.Terminated;
|
||||
Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
lock (sendLock)
|
||||
{
|
||||
|
||||
if (sendBufferQueue.Count > 0)
|
||||
{
|
||||
var kv = sendBufferQueue.Dequeue();
|
||||
@ -151,10 +166,10 @@ namespace Esyur.Net.Sockets
|
||||
catch (Exception ex)
|
||||
{
|
||||
asyncSending = false;
|
||||
|
||||
try
|
||||
{
|
||||
kv.Key.Trigger(false);
|
||||
if (kv.Key != null)
|
||||
kv.Key.Trigger(false);
|
||||
|
||||
if (state != SocketState.Closed && !sock.Connected)
|
||||
{
|
||||
@ -167,7 +182,7 @@ namespace Esyur.Net.Sockets
|
||||
state = SocketState.Terminated;
|
||||
}
|
||||
|
||||
Global.Log("TCPSocket", LogType.Error, ex.ToString());
|
||||
//Global.Log("TCPSocket", LogType.Error, ex.ToString());
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -223,39 +238,41 @@ namespace Esyur.Net.Sockets
|
||||
|
||||
|
||||
|
||||
public SSLSocket(Socket Socket, X509Certificate2 certificate, bool authenticateAsServer)
|
||||
public SSLSocket(Socket socket, X509Certificate2 certificate, bool authenticateAsServer)
|
||||
{
|
||||
cert = certificate;
|
||||
sock = Socket;
|
||||
sock = socket;
|
||||
receiveBuffer = new byte[sock.ReceiveBufferSize];
|
||||
|
||||
ssl = new SslStream(new NetworkStream(sock));
|
||||
|
||||
server = authenticateAsServer;
|
||||
|
||||
if (socket.Connected)
|
||||
state = SocketState.Established;
|
||||
}
|
||||
|
||||
|
||||
public void Close()
|
||||
{
|
||||
if (state != SocketState.Closed && state != SocketState.Terminated)
|
||||
{
|
||||
state = SocketState.Closed;
|
||||
|
||||
if (sock.Connected)
|
||||
{
|
||||
try
|
||||
if (sock.Connected)
|
||||
{
|
||||
sock.Shutdown(SocketShutdown.Both);
|
||||
}
|
||||
catch
|
||||
{
|
||||
state = SocketState.Terminated;
|
||||
try
|
||||
{
|
||||
sock.Shutdown(SocketShutdown.Both);
|
||||
}
|
||||
catch
|
||||
{
|
||||
state = SocketState.Terminated;
|
||||
}
|
||||
}
|
||||
|
||||
OnClose?.Invoke();
|
||||
}
|
||||
|
||||
sock.Shutdown(SocketShutdown.Both);
|
||||
|
||||
OnClose?.Invoke();
|
||||
}
|
||||
|
||||
|
||||
@ -351,6 +368,7 @@ namespace Esyur.Net.Sockets
|
||||
// }
|
||||
//}
|
||||
|
||||
|
||||
public bool Begin()
|
||||
{
|
||||
if (began)
|
||||
@ -358,6 +376,11 @@ namespace Esyur.Net.Sockets
|
||||
|
||||
began = true;
|
||||
|
||||
if (server)
|
||||
ssl.AuthenticateAsServer(cert);
|
||||
else
|
||||
ssl.AuthenticateAsClient(hostname);
|
||||
|
||||
if (state == SocketState.Established)
|
||||
{
|
||||
ssl.BeginRead(receiveBuffer, 0, receiveBuffer.Length, ReceiveCallback, this);
|
||||
@ -367,6 +390,26 @@ namespace Esyur.Net.Sockets
|
||||
return false;
|
||||
}
|
||||
|
||||
public async AsyncReply<bool> BeginAsync()
|
||||
{
|
||||
if (began)
|
||||
return false;
|
||||
|
||||
began = true;
|
||||
|
||||
if (server)
|
||||
await ssl.AuthenticateAsServerAsync(cert);
|
||||
else
|
||||
await ssl.AuthenticateAsClientAsync(hostname);
|
||||
|
||||
if (state == SocketState.Established)
|
||||
{
|
||||
ssl.BeginRead(receiveBuffer, 0, receiveBuffer.Length, ReceiveCallback, this);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
private void ReceiveCallback(IAsyncResult results)
|
||||
{
|
||||
@ -398,7 +441,7 @@ namespace Esyur.Net.Sockets
|
||||
Close();
|
||||
}
|
||||
|
||||
Global.Log("SSLSocket", LogType.Error, ex.ToString());
|
||||
//Global.Log("SSLSocket", LogType.Error, ex.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
@ -426,7 +469,7 @@ namespace Esyur.Net.Sockets
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void Hold()
|
||||
{
|
||||
@ -441,7 +484,7 @@ namespace Esyur.Net.Sockets
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine(ex);
|
||||
Global.Log(ex);
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
@ -65,6 +65,11 @@ namespace Esyur.Net.Sockets
|
||||
|
||||
SocketAsyncEventArgs socketArgs = new SocketAsyncEventArgs();
|
||||
|
||||
public async AsyncReply<bool> BeginAsync()
|
||||
{
|
||||
return Begin();
|
||||
}
|
||||
|
||||
public bool Begin()
|
||||
{
|
||||
if (began)
|
||||
@ -74,7 +79,7 @@ namespace Esyur.Net.Sockets
|
||||
|
||||
socketArgs.SetBuffer(receiveBuffer, 0, receiveBuffer.Length);
|
||||
socketArgs.Completed += SocketArgs_Completed;
|
||||
|
||||
|
||||
if (!sock.ReceiveAsync(socketArgs))
|
||||
SocketArgs_Completed(null, socketArgs);
|
||||
|
||||
@ -176,8 +181,8 @@ namespace Esyur.Net.Sockets
|
||||
if (State != SocketState.Established)
|
||||
return;
|
||||
|
||||
if (e.BytesTransferred < 0)
|
||||
Console.WriteLine("BytesTransferred is less than zero");
|
||||
//if (e.BytesTransferred < 0)
|
||||
// Console.WriteLine("BytesTransferred is less than zero");
|
||||
|
||||
if (e.BytesTransferred <= 0)
|
||||
{
|
||||
@ -185,8 +190,8 @@ namespace Esyur.Net.Sockets
|
||||
return;
|
||||
}
|
||||
|
||||
if (e.BytesTransferred > 100000)
|
||||
Console.WriteLine("BytesTransferred is large " + e.BytesTransferred);
|
||||
//if (e.BytesTransferred > 100000)
|
||||
// Console.WriteLine("BytesTransferred is large " + e.BytesTransferred);
|
||||
|
||||
recCount = e.BytesTransferred > e.Count ? e.Count : e.BytesTransferred;
|
||||
|
||||
@ -382,8 +387,24 @@ namespace Esyur.Net.Sockets
|
||||
|
||||
private void SendCallback(IAsyncResult ar)
|
||||
{
|
||||
if (ar != null && ar.AsyncState != null)
|
||||
((AsyncReply<bool>)ar.AsyncState).Trigger(true);
|
||||
if (ar != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
sock.EndSend(ar);
|
||||
|
||||
if (ar.AsyncState != null)
|
||||
((AsyncReply<bool>)ar.AsyncState).Trigger(true);
|
||||
}
|
||||
catch
|
||||
{
|
||||
if (state != SocketState.Closed && !sock.Connected)
|
||||
{
|
||||
state = SocketState.Terminated;
|
||||
Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
lock (sendLock)
|
||||
{
|
||||
@ -401,7 +422,8 @@ namespace Esyur.Net.Sockets
|
||||
|
||||
try
|
||||
{
|
||||
kv.Key.Trigger(false);
|
||||
if (kv.Key != null)
|
||||
kv.Key.Trigger(false);
|
||||
|
||||
if (state != SocketState.Closed && !sock.Connected)
|
||||
{
|
||||
|
@ -322,5 +322,10 @@ namespace Esyur.Net.Sockets
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public AsyncReply<bool> BeginAsync()
|
||||
{
|
||||
return sock.BeginAsync();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user