zoukankan      html  css  js  c++  java
  • DIOCP转发型中间网关

    处理部分关键代码:

    中转类网关处理部分:
    procedure DiocpExecute(pvCMDObject: TSimpleMsgPack; pvContext:TDiocpStreamClientContext);
    var
    lvCMDIndex:Integer;
    lvSession:TCHATSession;
    ToUserID:string;
    DataDBID:string;
    begin
    if pvCMDObject.O['ResultCMD']<> nil then
    begin
    ToUserID:=pvCMDObject.ForcePathObject('FrmUser').asstring;
    pvCMDObject.ForcePathObject('CMD').AsInteger:=pvCMDObject.ForcePathObject('ResultCMD').asinteger;

    pvCMDObject.DeleteObject('ResultCMD');

    SendCMDObject(pvCMDObject,TCHATSession(ChatSessions.FindSession(ToUserID)).FContext);

    pvCMDObject.clear;
    exit;
    end;

    if pvCMDObject.O['cmd']<> nil then
    begin


    lvCMDIndex := pvCMDObject.ForcePathObject('cmd').AsInteger;

    case lvCMDIndex of
    0: ExecuteHeart (pvCMDObject, pvContext); // 心跳
    1: ExecuteLogin (pvCMDObject, pvContext); // 登陆
    10: ExecuteSql (pvCMDObject, pvContext);
    else //转发数据给处理端
    begin
    lvSession := TCHATSession(TDiocpStreamClientContext(pvContext).Data);
    if lvSession = nil then
    begin
    raise exception.CreateFmt(pvContext.RemoteAddr+'['+inttostr(pvcontext.RemotePort) +']非法连接关闭:[%d]', [lvCMDIndex]);
    end
    else
    begin

    pvCMDObject.ForcePathObject('FrmUser').asstring:=lvSession.useriD;

    if DataDBSrv.count>0 then

    begin

    Randomize;

    DataDBID:=DataDBSrv.strings[Random(DataDBSrv.count)];
    // sflogger.logMessage(datadbid);
    end

    else

    begin

    sflogger.logMessage('处理端未开启');
    end;


    SendCMDObject(pvCMDObject,TCHATSession(ChatSessions.FindSession(DataDBID)).FContext);

    end;
    // sfLogger.logMessage('转发成功');
    exception.CreateFmt(pvContext.RemoteAddr+'['+inttostr(pvcontext.RemotePort) +']执行未知命令:[%d]', [lvCMDIndex]);
    end;
    end;
    end;

    end;

  • 相关阅读:
    Windows自带Android模拟器启动失败
    Xamarin.Android提示找不到mono.Android.Support.v4
    Xamarin提示Build-tools版本过老
    Xamarin Android布局文件没有智能提示
    Xamarin.iOS模拟器调试找不到资源文件
    彻底卸载 RAD Studio 2009/2010/XE+ 的步骤
    Delphi版本号对照
    RAD Studio 2010 环境设置(转)
    C语言写的俄罗斯方块
    字符编解码的故事–ASCII,ANSI,Unicode,Utf-8区别
  • 原文地址:https://www.cnblogs.com/diocp/p/9347543.html
Copyright © 2011-2022 走看看