ab56a9bcf7
SVN-Revision: r240
207 lines
6.6 KiB
C#
207 lines
6.6 KiB
C#
/******************************
|
|
* 说明:Socket传输基类
|
|
* 创建人:龚宇超
|
|
* 创建日期:2018-01-23
|
|
* 修改人:
|
|
* 修改日期:
|
|
* 修改备注:
|
|
* 版本:1.0.0.0
|
|
******************************/
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using Lskj.SocketService;
|
|
|
|
namespace Lskj.SocketClient
|
|
{
|
|
/// <summary>
|
|
/// Socket传输基类
|
|
/// </summary>
|
|
public class ClientBaseSocket : SyncSocketInvokeElement
|
|
{
|
|
protected string _errorString;
|
|
/// <summary>
|
|
/// 用户名
|
|
/// </summary>
|
|
protected string _userName;
|
|
/// <summary>
|
|
/// 密码
|
|
/// </summary>
|
|
protected string _password;
|
|
/// <summary>
|
|
/// 错误码
|
|
/// </summary>
|
|
/// <value>The error string.</value>
|
|
public string ErrorString { get { return _errorString; } }
|
|
|
|
public ClientBaseSocket()
|
|
: base()
|
|
{
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>说明:检查是否传输结果</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2018-01-24 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
|
|
public bool CheckErrorCode()
|
|
{
|
|
int errorCode = 0;
|
|
_incomingDataParser.GetValue(ProtocolKey.Code, ref errorCode);
|
|
if (errorCode == ProtocolCode.Success)
|
|
return true;
|
|
else
|
|
{
|
|
_errorString = ProtocolCode.GetErrorCodeString(errorCode);
|
|
return false;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// <para>说明:发送Active命令</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2018-01-24 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
|
|
public bool DoActive()
|
|
{
|
|
try
|
|
{
|
|
_outgoingDataAssembler.Clear();
|
|
_outgoingDataAssembler.AddRequest();
|
|
_outgoingDataAssembler.AddCommand(ProtocolKey.Active);
|
|
SendCommand();
|
|
bool bSuccess = RecvCommand();
|
|
if (bSuccess)
|
|
return CheckErrorCode();
|
|
else
|
|
return false;
|
|
}
|
|
catch (Exception E)
|
|
{
|
|
//记录日志
|
|
_errorString = E.Message;
|
|
return false;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// <para>说明:发送登录命令</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2018-01-24 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="userName">Name of the user.</param>
|
|
/// <param name="password">The password.</param>
|
|
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
|
|
public bool DoLogin(string userName, string password)
|
|
{
|
|
try
|
|
{
|
|
_outgoingDataAssembler.Clear();
|
|
_outgoingDataAssembler.AddRequest();
|
|
_outgoingDataAssembler.AddCommand(ProtocolKey.Login);
|
|
_outgoingDataAssembler.AddValue(ProtocolKey.UserName, userName);
|
|
_outgoingDataAssembler.AddValue(ProtocolKey.Password, BasicFunc.MD5String(password));
|
|
SendCommand();
|
|
bool bSuccess = RecvCommand();
|
|
if (bSuccess)
|
|
{
|
|
bSuccess = CheckErrorCode();
|
|
if (bSuccess)
|
|
{
|
|
_userName = userName;
|
|
_password = password;
|
|
}
|
|
return bSuccess;
|
|
}
|
|
else
|
|
return false;
|
|
}
|
|
catch (Exception E)
|
|
{
|
|
//记录日志
|
|
_errorString = E.Message;
|
|
return false;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// <para>说明:检查连接是否存在,不存在则重连服务器</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2018-01-24 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
|
|
public bool ReConnect()
|
|
{
|
|
if (_tcpClient.Connected && (!DoActive()))
|
|
return true;
|
|
else
|
|
{
|
|
if (!_tcpClient.Connected)
|
|
{
|
|
try
|
|
{
|
|
Connect(_host, _port);
|
|
return true;
|
|
}
|
|
catch (Exception)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
else
|
|
return true;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// <para>说明:检查连接是否存在,不存在则重连并登录</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2018-01-24 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
|
|
public bool ReConnectAndLogin()
|
|
{
|
|
if (_tcpClient.Connected && (!DoActive()))
|
|
return true;
|
|
else
|
|
{
|
|
if (!_tcpClient.Connected)
|
|
{
|
|
try
|
|
{
|
|
Disconnect();
|
|
Connect(_host, _port);
|
|
return DoLogin(_userName, _password);
|
|
}
|
|
catch (Exception E)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
else
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|