Files
lserp_cs_6.0/插件库/Lskj.SocketClient/SyncSocketProtocolCore/ClientBaseSocket.cs
T
cyf ab56a9bcf7 基线 SVN r240
SVN-Revision: r240
2025-02-06 06:46:06 +00:00

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;
}
}
}
}