我写了一个Socketconnection三层结构,用来接收邮件,我想用中间层去收邮件,当客户端发送一个消息给中间层时,中间层在处理消息时,要回调客户端的函数并且返回信息给客户端。如:在收邮件中异常错误等请问怎么写这个回调函数,或者有什么办法。高手请教!。

解决方案 »

  1.   

    我理解,中间层类似于桥梁:正常操作结果原样写到客户端。出错则raise exception。这个exception也会发送到客户端。(我瞎猜的,没测试过)
      

  2.   

    在中间层声明一个函数,具有返回参数不就行了,如:中间层接口:
    function TRDMServer.GetMail(const UserID: WideString): OleVariant;
    begin
      //在这里执行动作,如果需返回消息,返回一个OleVariant变量(具体想写什么信息就写什么吧)
    end;
    客户端调用:
    Function  GetMail: OleVariant;
    begin
      Try
        Result := U_BasDM.FrmDM.BESConnectionBroker.AppServer.GetMail(pubUserID);
      Except
        ShowMessage('读取邮件时发生意外错误,请与系统开发人员联系.');
      End;
      //都获取了一个OleVariant返回变量,其它的就自己看着办吧…
    end;
      

  3.   

    传递一个DCOM接口给她就可以了type
      ISubscriber = interface(...)
        procedure Ok;
        procedure Failure;
      end;function TRDMServer.GetMail(const UserID: WideString; aSubscriber: ISubscriber): OleVariant;
    begin
       ...
       fSubscriberList.add(aSubscriber);
    end;
    procedure TRDMServer.Notify(aSubscriber: ISubscriber; const aSuccess: Boolean);
    begin
      if aSuccess then
        aSubscriber.Ok()
      else aSubscriber.Failure();
    end;