socketclientsync.cs
来自「ActiveSync数据同步」· CS 代码 · 共 889 行 · 第 1/2 页
CS
889 行
//----- Received!
lock (FReceivedQueue)
{
if (FReceivedQueue.Count > 0)
{
result = FReceivedQueue.Dequeue();
}
}
FLastException = null;
break;
case 1:
//----- Disconnected!
DoDisconnect();
break;
case 2:
//----- Exception!
break;
default:
//----- TimeOut!
FLastException = new TimeoutException("Read timeout.");
break;
}
}
}
}
return result;
}
#endregion
#region DoDisconnect
internal void DoDisconnect()
{
bool fireEvent = false;
lock (FConnectedSync)
{
if (FConnected)
{
//----- Disconnect!
FConnected = false;
FSocketConnection = null;
if (FSocketClient != null)
{
FSocketClient.Stop();
FSocketClient.Dispose();
FSocketClient = null;
}
fireEvent = true;
}
}
if ( (FOnDisconnectedEvent != null) && fireEvent)
{
FOnDisconnectedEvent();
}
}
#endregion
#region Disconnect
public void Disconnect()
{
if (!Disposed)
{
FLastException = null;
if (Connected)
{
FExceptionEvent.Reset();
if (FSocketConnection != null)
{
WaitHandle[] wait = new WaitHandle[] { FDisconnectEvent, FExceptionEvent };
FSocketConnection.BeginDisconnect();
int signaled = WaitHandle.WaitAny(wait, FConnectTimeout, false);
switch (signaled)
{
case 0:
DoDisconnect();
break;
case 1:
//----- Exception!
DoDisconnect();
break;
default:
//----- TimeOut!
FLastException = new TimeoutException("Disconnect timeout.");
break;
}
}
}
}
}
#endregion
#endregion
#region Properties
public event OnDisconnectEvent OnDisconnected
{
add
{
FOnDisconnectedEvent += value;
}
remove
{
FOnDisconnectedEvent -= value;
}
}
public event OnSymmetricAuthenticateEvent OnSymmetricAuthenticate
{
add
{
FOnSymmetricAuthenticateEvent += value;
}
remove
{
FOnSymmetricAuthenticateEvent -= value;
}
}
public event OnSSLClientAuthenticateEvent OnSSLClientAuthenticate
{
add
{
FOnSSLClientAuthenticateEvent += value;
}
remove
{
FOnSSLClientAuthenticateEvent -= value;
}
}
public IPEndPoint RemoteEndPoint
{
get { return FRemoteEndPoint; }
set { FRemoteEndPoint = value; }
}
public IPEndPoint LocalEndPoint
{
get { return FLocalEndPoint; }
set { FLocalEndPoint = value; }
}
public DelimiterType DelimiterType
{
get { return FDelimiterType; }
set { FDelimiterType = value; }
}
public EncryptType EncryptType
{
get { return FEncryptType; }
set { FEncryptType = value; }
}
public CompressionType CompressionType
{
get { return FCompressionType; }
set { FCompressionType = value; }
}
public byte[] Delimiter
{
get { return FDelimiter; }
set { FDelimiter = value; }
}
public ProxyInfo ProxyInfo
{
get { return FProxyInfo; }
set { FProxyInfo = value; }
}
public int MessageBufferSize
{
get { return FMessageBufferSize; }
set { FMessageBufferSize = value; }
}
public int SocketBufferSize
{
get { return FSocketBufferSize; }
set { FSocketBufferSize = value; }
}
internal ManualResetEvent DisconnectEvent
{
get
{
return FDisconnectEvent;
}
}
internal AutoResetEvent ConnectEvent
{
get
{
return FConnectEvent;
}
}
internal AutoResetEvent SentEvent
{
get
{
return FSentEvent;
}
}
internal AutoResetEvent ExceptionEvent
{
get
{
return FExceptionEvent;
}
}
internal ISocketConnection SocketConnection
{
get
{
return FSocketConnection;
}
set
{
FSocketConnection = value;
}
}
public bool Connected
{
get
{
bool connected = false;
lock (FConnectedSync)
{
connected = FConnected;
}
return connected;
}
internal set
{
lock (FConnectedSync)
{
FConnected = value;
}
}
}
public Exception LastException
{
get
{
return FLastException;
}
internal set
{
FLastException = value;
}
}
#endregion
}
#endregion
#region SocketClientSyncSocketService
internal class SocketClientSyncSocketService: BaseSocketService
{
#region Fields
private SocketClientSync FSocketClient;
#endregion
#region Constructor
public SocketClientSyncSocketService(SocketClientSync client)
{
FSocketClient = client;
}
#endregion
#region Methods
public override void OnConnected(ConnectionEventArgs e)
{
FSocketClient.SocketConnection = e.Connection;
FSocketClient.SocketConnection.BeginReceive();
FSocketClient.ConnectEvent.Set();
}
public override void OnException(ExceptionEventArgs e)
{
FSocketClient.LastException = e.Exception;
FSocketClient.ExceptionEvent.Set();
}
public override void OnSent(MessageEventArgs e)
{
FSocketClient.SentEvent.Set();
}
public override void OnReceived(MessageEventArgs e)
{
FSocketClient.Enqueue(Encoding.GetEncoding(1252).GetString(e.Buffer));
FSocketClient.SocketConnection.BeginReceive();
}
public override void OnDisconnected(ConnectionEventArgs e)
{
FSocketClient.DisconnectEvent.Set();
}
#endregion
}
#endregion
#region SocketClientSyncCryptService
internal class SocketClientSyncCryptService : BaseCryptoService
{
#region Fields
private SocketClientSync FSocketClient;
#endregion
#region Constructor
public SocketClientSyncCryptService(SocketClientSync client)
{
FSocketClient = client;
}
#endregion
#region Methods
public override void OnSymmetricAuthenticate(ISocketConnection connection, out RSACryptoServiceProvider serverKey, out byte[] signMessage)
{
FSocketClient.DoOnSymmetricAuthenticate(connection, out serverKey, out signMessage);
}
public override void OnSSLClientAuthenticate(ISocketConnection connection, out string serverName, ref X509Certificate2Collection certs, ref bool checkRevocation)
{
FSocketClient.DoOnSSLClientAuthenticate(connection, out serverName, ref certs, ref checkRevocation);
}
#endregion
}
#endregion
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?