⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uitaxiserviceodmpclientlogistic.pas

📁 a voice guide client ,it is the second part of voice guide center
💻 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 + -