📄 uitaxiserviceodmpclientlogistic.pas
字号:
//==============================================================================
// $修订版本号: 1.0 $
// $日期 : 2007年4月20日 星期五 14:44:42 $
// $版本号 : 1.0.0 Goshgen 1 $
//
// 电召客户端逻辑层定义。
//
//
// $BeginLog$
// $Endlog $
// $Copyright 版权所有 (c)2007 TRANSIT 保留所有权利$
//==============================================================================
{:
电召客户端逻辑层定义。
}
unit uITaxiServiceODMPClientLogistic;
interface
uses Classes, DB, SysUtils, uBaseODMProtocalClient, uBaseODMDefs,
uBaseODMProtocalUtils, uBaseODMProtocalCommander,
uITaxiServiceODMPLogisticDefs;
Type
{: 接收回复指令的触发事件。}
TOnProtocalReplyResult = procedure(_status_id: Integer) of Object;
{: 接收主动发送的指令的触发事件。}
TOnProtocalReceiveResult = procedure(_p_protocal_dataset: PBaseODMProtocalDataset) of Object;
// 触发连接状态
TOnLogResult = procedure(_sender: TObject; _is_connect: Boolean) of Object;
// 触发连接错误
TOnTCPClientErrorEvent = procedure(_sender: TObject) of Object;
{: 电召客户端逻辑层类。}
TITaxiServiceBaseODMProtocalClientLogistic = class
private
// 客户端
baseNetClient : TBaseODMProtocalClient;
{: 指令状态触发事件。}
FOnProtocalReplyResult : TOnProtocalReplyResult;
FOnProtocalReceiveResult : TOnProtocalReceiveResult;
FOnLogResult : TOnLogResult;
FOnTCPClientError : TOnTCPClientErrorEvent;
procedure doOnProtocalResult(_sender: TObject; _protocal_dataset: PBaseODMProtocalDataset;
_command_status: TBaseODMCommanderStatus);
procedure doOnTCPClientDisConnect(_sender: TObject);
procedure doOnTCPClientConnect(_sender: TObject);
procedure doOnTCPClientError(_sender: TObject; _ip: string);
// 构造析构
public
constructor Create;
destructor Destroy; override;
public
procedure ConnectCallServer(_address: string; _port: Integer);
procedure DisConnectCallServer;
procedure SendODMP(_p_protocal_dataset: PBaseODMProtocalDataset);
procedure AuthODMP(_command_name, _user_name, _user_password: string;
_is_ok, _is_active, _is_kick: Boolean);
procedure CallODMP(_command_name: string; _caller_id: Integer;
_caller_lon, _caller_lat: Double;
_caller_info: string);
procedure SendNoop;
procedure SendHelp;
procedure SendQuit;
published
property OnProtocalReplyResult : TOnProtocalReplyResult
read FOnProtocalReplyResult
write FOnProtocalReplyResult;
property OnProtocalReceiveResult : TOnProtocalReceiveResult
read FOnProtocalReceiveResult
write FOnProtocalReceiveResult;
property OnLogResult : TOnLogResult
read FOnLogResult
write FOnLogResult;
property OnTCPClientError : TOnTCPClientErrorEvent
read FOnTCPClientError
write FOnTCPClientError;
end;
implementation
{ TITaxiServiceBaseODMProtocalClientLogistic }
//------------------------------------------------------------------------------
// 构造与析构
//------------------------------------------------------------------------------
{: 构造函数。
}
constructor TITaxiServiceBaseODMProtocalClientLogistic.Create;
begin
// 定义常用指令
DefineListCommandDefine := TStringList.Create;
DefineListODMPDataDefine := TStringList.Create;
baseNetClient := TBaseODMProtocalClient.Create;
baseNetClient.OnProtocalResult := doOnProtocalResult;
baseNetClient.OnTCPClientConnect := doOnTCPClientConnect;
baseNetClient.OnTCPClientDisConnect := doOnTCPClientDisConnect;
baseNetClient.OnTCPClientError := doOnTCPClientError;
TITaxiServiceODMPLogisticUtils.defineCommandBCMSeatLogon;
TITaxiServiceODMPLogisticUtils.defineCommandBCMTaskInfoBase;
TITaxiServiceODMPLogisticUtils.DefineCommandBCMTaskCancel;
TITaxiServiceODMPLogisticUtils.DefineCommandBCMTaskReply;
TITaxiServiceODMPLogisticUtils.DefineCommandBCMTaskEnd;
TITaxiServiceODMPLogisticUtils.defineCommandBCMTaskInfoAdditional;
TITaxiServiceODMPLogisticUtils.DefineCommandBCMTaskNew;
TITaxiServiceODMPLogisticUtils.defineCommandBCMTaskStatus;
TITaxiServiceODMPLogisticUtils.DefineCommandBCMTaskTaxiInfo;
TITaxiServiceODMPLogisticUtils.DefineCommandBCMTaskProcessDisconnect;
end;
{: 析构函数。
}
destructor TITaxiServiceBaseODMProtocalClientLogistic.Destroy;
begin
TBaseODMProtocalUtils.ClearDefineCommandList(DefineListCommandDefine);
DefineListCommandDefine.Free;
TBaseODMProtocalUtils.ClearDefineDataList(DefineListODMPDataDefine);
DefineListODMPDataDefine.Free;
baseNetClient.Free;
inherited;
end;
//------------------------------------------------------------------------------
// 公有方法 -- 连接和触发事件
//------------------------------------------------------------------------------
{: 客户端连接服务端。
@param _address IP地址
@param _port 端口
}
procedure TITaxiServiceBaseODMProtocalClientLogistic.ConnectCallServer(_address: string;
_port: Integer);
begin
baseNetClient.Connect(_address, _port);
end;
{: 客户端断开服务端。
@param _address IP地址
@param _port 端口
}
procedure TITaxiServiceBaseODMProtocalClientLogistic.DisConnectCallServer;
begin
baseNetClient.Disconnect;
end;
{: 指令接收触发事件。
@param _p_protocal_dataset 指令集
@param _command_status 指令状态
}
procedure TITaxiServiceBaseODMProtocalClientLogistic.doOnProtocalResult(
_sender: TObject; _protocal_dataset: PBaseODMProtocalDataset;
_command_status: TBaseODMCommanderStatus);
begin
// 触发日志
TBaseODMProtocalUtils.OnProtocalResult(
_protocal_dataset^.Command^.CommandDefine^.CommandName,
'', _command_status);
// 处理逻辑指令
case _command_status of
// 接收指令
TBaseODMCommanderStatusReceive:
// 如果是回复的指令
if _protocal_dataset^.Command^.CommandDefine^.CommandName = 'REPLY' then
begin
if Assigned(FOnProtocalReplyResult) then
FOnProtocalReplyResult(StrToIntDef(_protocal_dataset^.Command^.CommandStatus, 0));
end
// 收到服务端发送的指令
else begin
if Assigned(FOnProtocalReceiveResult) then
FOnProtocalReceiveResult(_protocal_dataset);
end
end;
end;
{: 断开触发事件。
@param _p_protocal_dataset 指令集
@param _command_status 指令状态
}
procedure TITaxiServiceBaseODMProtocalClientLogistic.doOnTCPClientDisConnect(
_sender: TObject);
begin
if Assigned(FOnLogResult) then
FOnLogResult(Self, False);
end;
{: 连接触发事件。
@param _p_protocal_dataset 指令集
@param _command_status 指令状态
}
procedure TITaxiServiceBaseODMProtocalClientLogistic.doOnTCPClientConnect(
_sender: TObject);
begin
if Assigned(FOnLogResult) then
FOnLogResult(Self, True);
end;
procedure TITaxiServiceBaseODMProtocalClientLogistic.doOnTCPClientError(_sender: TObject; _ip: string);
begin
if Assigned(FOnLogResult) then
FOnLogResult(Self, False);
end;
//------------------------------------------------------------------------------
// 公有方法 -- 指令发送
//------------------------------------------------------------------------------
{: 发送认证。
@param _p_protocal_dataset 指令数据集
}
procedure TITaxiServiceBaseODMProtocalClientLogistic.SendODMP(_p_protocal_dataset: PBaseODMProtocalDataset);
begin
// 发送指令对象
baseNetClient.commander.SendCommand(_p_protocal_dataset);
// 释放指令对象
TBaseODMProtocalUtils.ClearProtocalDataset(_p_protocal_dataset);
end;
{: 发送认证。
@param _user_name 用户名
@param _user_password 密码
@param _is_kick 是否踢用户
}
procedure TITaxiServiceBaseODMProtocalClientLogistic.AuthODMP(_command_name, _user_name,
_user_password: string; _is_ok, _is_active, _is_kick: Boolean);
var
p_protocal_dataset : PBaseODMProtocalDataset;
begin
// 建立对象
p_protocal_dataset := TBaseODMProtocalUtils.BuildProtocalDataset(
_command_name, False, 0);
// 增加指令对象内容
TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
'UserName', _user_name);
TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
'Password', _user_password);
TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
'IsOK', _is_ok);
TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
'IsActive', _is_active);
TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
'IsKick', _is_kick);
// 发送指令对象
baseNetClient.commander.SendCommand(p_protocal_dataset);
// 释放指令对象
TBaseODMProtocalUtils.ClearProtocalDataset(p_protocal_dataset);
end;
{: 发送招车指令。
@param _caller_id 业务编号
@param _caller_lon 经度
@param _caller_lat 纬度
@param _caller_info 招车人信息
}
procedure TITaxiServiceBaseODMProtocalClientLogistic.CallODMP(_command_name: string;
_caller_id: Integer; _caller_lon, _caller_lat: Double; _caller_info: string);
begin
// // 建立对象
// p_protocal_dataset := TBaseODMProtocalUtils.BuildProtocalDataset(
// _command_name, False, 0);
//
// // 增加指令对象内容
// TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
// 'Caller_id, '');
// TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
// _caller_lon, '');
// TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
// _caller_lat, '');
// TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
// _caller_info, _caller_info);
//
// // 发送指令对象
// baseNetClient.commander.SendCommand(p_protocal_dataset);
// // 释放指令对象
// TBaseODMProtocalUtils.ClearProtocalDataset(p_protocal_dataset);
end;
////------------------------------------------------------------------------------
//// 公有方法 -- 定义常用指令
////------------------------------------------------------------------------------
//
//{: 定义认证指令。}
//procedure TITaxiServiceBaseODMProtocalClientLogistic.defineCommandAuth;
//var
// p_command_define: PBaseODMProtocalCommandDefine;
//begin
// // 定义指令定义
// p_command_define := TBaseODMProtocalUtils.DefineCommandDefine(
// 'AUTH', TBaseODMProtocalCommandDefineWithDataNo, True);
//
// // 定义指令定义的参数
// TBaseODMProtocalUtils.DefineCommandDefineAddParam(p_command_define,
// 'user_name', '用户名', 'UserName', ftString);
// TBaseODMProtocalUtils.DefineCommandDefineAddParam(p_command_define,
// 'user_password', '密码', 'UserPassword', ftString);
// TBaseODMProtocalUtils.DefineCommandDefineAddParam(p_command_define,
// 'is_ok', '是否成功', 'IsOK', ftBoolean);
// TBaseODMProtocalUtils.DefineCommandDefineAddParam(p_command_define,
// 'is_active', '是否激活', 'IsActive', ftBoolean);
// TBaseODMProtocalUtils.DefineCommandDefineAddParam(p_command_define,
// 'is_kickoff', '是否踢用户', 'IsKickoff', ftBoolean);
//end;
//
//{: 定义召车指令。}
//procedure TITaxiServiceBaseODMProtocalClientLogistic.defineCommandCall;
//var
// p_command_define: PBaseODMProtocalCommandDefine;
//begin
// // 定义指令定义
// p_command_define := TBaseODMProtocalUtils.DefineCommandDefine(
// 'CALL', TBaseODMProtocalCommandDefineWithDataNo, True);
//
// // 定义指令定义的参数
// TBaseODMProtocalUtils.DefineCommandDefineAddParam(p_command_define,
// 'caller_id', '业务编号', 'CallerID', ftInteger);
// TBaseODMProtocalUtils.DefineCommandDefineAddParam(p_command_define,
// 'caller_lon', '经度', 'CallerLon', ftFloat);
// TBaseODMProtocalUtils.DefineCommandDefineAddParam(p_command_define,
// 'caller_lat', '纬度', 'CallerLat', ftFloat);
// TBaseODMProtocalUtils.DefineCommandDefineAddParam(p_command_define,
// 'caller_info', '召车人信息', 'CallerInfo', ftString);
//end;
//
//{: 定义帮助指令。}
//procedure TITaxiServiceBaseODMProtocalClientLogistic.defineCommandHelp;
//begin
// TBaseODMProtocalUtils.DefineCommandDefine(
// 'HELP', TBaseODMProtocalCommandDefineWithDataNo, True);
//end;
//
//{: 定义空指令。}
//procedure TITaxiServiceBaseODMProtocalClientLogistic.defineCommandNoop;
//begin
// TBaseODMProtocalUtils.DefineCommandDefine(
// 'NOOP', TBaseODMProtocalCommandDefineWithDataNo, True);
//end;
//
//{: 定义退出指令。}
//procedure TITaxiServiceBaseODMProtocalClientLogistic.defineCommandQuit;
//begin
// TBaseODMProtocalUtils.DefineCommandDefine(
// 'QUIT', TBaseODMProtocalCommandDefineWithDataNo, True);
//end;
procedure TITaxiServiceBaseODMProtocalClientLogistic.SendHelp;
begin
baseNetClient.commander.SendCommandHelp;
end;
procedure TITaxiServiceBaseODMProtocalClientLogistic.SendNoop;
begin
baseNetClient.commander.SendCommandNoop;
end;
procedure TITaxiServiceBaseODMProtocalClientLogistic.SendQuit;
begin
baseNetClient.commander.SendCommandQuit;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -