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

📄 msgconnection.old.pas

📁 Delphi MsgCommunicator 2-10 component.I ve used, really good job. can be Server-Client message appl
💻 PAS
📖 第 1 页 / 共 5 页
字号:
    property RemoteHost: String read GetRemoteHost write SetRemoteHost;
    property RemotePort: Integer read GetRemotePort write SetRemotePort;
    property LocalHost: String read GetLocalHost write SetLocalHost;
    property LocalPort: Integer read GetLocalPort write SetLocalPort;
    property LocalClientID: Integer read FLocalClient write FLocalClient;
  end; // TMsgNetwork



////////////////////////////////////////////////////////////////////////////////
//
// TMsgBaseConnectionManager
//
////////////////////////////////////////////////////////////////////////////////

  TMsgBaseConnectionManager = class (TObject)
   private
{$IFDEF CONNECTION_TEST}
    FOtherManager:  TObject;
{$ELSE}
 {$IFDEF NETWORK_TEST}
    FOtherManager:  TObject;
    FClient:        Boolean;
 {$ENDIF}
{$ENDIF}
    FCSect:         TRTLCriticalSection;
    FSessionID:     TMsgSessionID;
   public
    FSessions:      TThreadList;
   private
    procedure NetworkListener(
                               Buffer:        PChar;
                               BufferSize:    Integer;
                               Network:       TMsgNetwork;
                               FromHost:      String;
                               FromPort:      Integer
                              ); virtual; abstract;
    procedure OnDisconnect(
                               FNetwork:      TMsgNetwork;
                               FromHost:      String;
                               FromPort:      Integer
                              ); virtual; abstract;
    procedure CompressAndEncryptBuffer(
                        Session:              TMsgComBaseSession;
                        var Buffer:           PChar;
                        var BufferSize:       Integer
                                        );
    function DecompressAndDecryptBuffer(
                        Session:              TMsgComBaseSession;
                        var Buffer:           PChar;
                        var BufferSize:       Integer
                                        ): Boolean;
  end; // TMsgBaseConnectionManager



////////////////////////////////////////////////////////////////////////////////
//
// TMsgClientConnectionManager
//
////////////////////////////////////////////////////////////////////////////////

{$IFDEF CLIENT_VERSION}
  TMsgClientConnectionManager = class (TMsgBaseConnectionManager)
   private
    FConnections:     TThreadList;
    FConnectionID:    TMsgConnectionID;
    FApplication:     String;
    FLiveSessions:    Integer;
    procedure PacketResendRequest(
                               Buffer:        PChar;
                               Network:       TMsgNetwork;
                               RemoteHost:    String;
                               RemotePort:    Integer;
                               PacketID:      Integer = -1;
                               Msg:           Boolean = False
                                 );
    procedure SendConnectRequest(ClientSession: PMsgClntSession);
    procedure SendDisconnectRequest(ClientSession: PMsgClntSession;
                                    WaitForAnswer: Boolean = True);
    procedure SendAcknowledgement(ClientSession: PMsgClntSession; Msg: Boolean = False);
{$IFDEF MsgCommunicator}
    function IsAuthorizationBufferValid(
                      CryptoInfo: TMsgCryptoInfo;
                      Buffer:     PChar;
                      BufferSize: Integer
                                    ): Boolean;
    procedure SendConnectAckn(
                          ClientSession:        PMsgClntSession;
                          ClientConnection:     PMsgClntConnection;
                          CurrentRequestID:     Integer = -1
                              );
{$ENDIF MsgCommunicator}
    procedure DoDisconnect(Session: TMsgComBaseSession);
    procedure TerminateAllSessionThreads(ClientSession: PMsgClntSession);
    procedure TerminateMessageThreads(ClientSession: PMsgClntSession);
    procedure TerminateCommandThreads(ClientSession: PMsgClntSession);
    procedure DeleteSession(ClientSession: PMsgClntSession);
    procedure OnDisconnect(
                               FNetwork:      TMsgNetwork;
                               FromHost:      String;
                               FromPort:      Integer
                              ); override;
    procedure NetworkListener(
                               Buffer:        PChar;
                               BufferSize:    Integer;
                               Network:       TMsgNetwork;
                               FromHost:      String;
                               FromPort:      Integer
                              ); override;
    procedure DoSendBuffer(
                          ClientSession:    PMsgClntSession;
                          ClientConnection: PMsgClntConnection;
                          Buffer:           PChar;
                          BufferSize:       Integer;
                          Code:             Integer = MsgNewRequest
                         );
    // if encryption algorithm <> msg_Cipher_None then allocate buffer, fill it and return size
    // otherwise return BufferSize = 0
    procedure CreateAuthorizationBuffer(
                          CryptoInfo:     TMsgCryptoInfo;
                          out Buffer:     PChar;
                          out BufferSize: Integer
                                        );
   public
    constructor Create;
    destructor Destroy; override;
    procedure Connect(Session: TMsgComBaseSession; ListenOnly: Boolean = False);
    procedure Disconnect(Session: TMsgComBaseSession; ListenOnly: Boolean = False);
    procedure DisconnectAll;
    procedure SendBuffer(
                          Session:    TMsgComBaseSession;
                          var Buffer: PChar;
                          BufferSize: Integer;
                          Code:       Integer = MsgNewRequest
                          );
    procedure ReceiveBuffer(
                          Session:        TMsgComBaseSession;
                          var Buffer:     PChar;
                          var BufferSize: Integer
                          );
    procedure SendMessage(
                          Session:    TMsgComBaseSession;
                          Buffer:     PChar;
                          BufferSize: Integer
                          );
    procedure ReceiveMessage(
                          ClientSession:  PMsgClntSession;
                          var Buffer:     PChar;
                          var BufferSize: Integer
                          );
  end; // TMsgClientConnectionManager



////////////////////////////////////////////////////////////////////////////////
//
// TMsgClientListenerThread
//
////////////////////////////////////////////////////////////////////////////////

  TMsgClientListenerThread = class(TThread)
  private
    FManager:       TMsgClientConnectionManager;
    FNetwork:       TMsgNetwork;
    Buffer:         PChar;
    BufferSize:     Integer;
    FromHost:       String;
    FromPort:       Integer;
    ClientSession:  PMsgClntSession;
  protected
    procedure Execute; override;
  public
    constructor Create(
                       Manager:       TMsgClientConnectionManager;
                       Buffer:        PChar;
                       BufferSize:    Integer;
                       Network:       TMsgNetwork;
                       FromHost:      String;
                       FromPort:      Integer
                       );
    destructor Destroy; override;
  end;// TMsgClientListenerThread



////////////////////////////////////////////////////////////////////////////////
//
// TMsgClientResendRequestThread
//
////////////////////////////////////////////////////////////////////////////////

  TMsgClientResendRequestThread = class(TThread)
  private
    FManager:           TMsgClientConnectionManager;
    FClientSession:     PMsgClntSession;
    FBuffer:            PChar;
    FNetwork:           TMsgNetwork;
    FHost:              String;
    FPort:              Integer;
  protected
    procedure Execute; override;
  public
    constructor Create(
                       Manager:           TMsgClientConnectionManager;
                       ClientSession:     PMsgClntSession;
                       Buffer:            PChar;
                       Network:           TMsgNetwork;
                       FromHost:          String;
                       FromPort:          Integer
                       );
    destructor Destroy; override;
  end;// TMsgClientResendRequestThread



////////////////////////////////////////////////////////////////////////////////
//
// TMsgClientMsgResendRequestThread
//
////////////////////////////////////////////////////////////////////////////////

  TMsgClientMsgResendRequestThread = class(TThread)
  private
    FManager:           TMsgClientConnectionManager;
    FClientSession:     PMsgClntSession;
    FBuffer:            PChar;
    FNetwork:           TMsgNetwork;
    FHost:              String;
    FPort:              Integer;
  protected
    procedure Execute; override;
  public
    constructor Create(
                       Manager:           TMsgClientConnectionManager;
                       ClientSession:     PMsgClntSession;
                       Buffer:            PChar;
                       Network:           TMsgNetwork;
                       FromHost:          String;
                       FromPort:          Integer
                       );
    destructor Destroy; override;
  end;// TMsgClientMsgResendRequestThread

{$ENDIF} // Client



////////////////////////////////////////////////////////////////////////////////
//
// TMsgServerConnectionManager
//
////////////////////////////////////////////////////////////////////////////////


{$IFDEF SERVER_VERSION}
  TMsgServerConnectionManager = class (TMsgBaseConnectionManager)
   private
    FServer:                TComponent;
    FListenerStoped:        Boolean;
    ResendRequestThread:    TMsgServerResendRequestThread;
    MsgResendRequestThread: TMsgServerMsgResendRequestThread;

    FNetwork:       TMsgNetwork;
{
   public
    property FNetwork: TMsgNetwork read Network write Network;
}
   private
    function SessionsCount: Integer;
    procedure TerminateAllSessionThreads(ServerSession: PMsgSrvrSession);
    procedure TerminateMessageThreads(ServerSession: PMsgSrvrSession);
    procedure TerminateCommandThreads(ServerSession: PMsgSrvrSession);
    procedure PacketResendRequest(
                               Buffer:      PChar;
                               Network:     TMsgNetwork;
                               RemoteHost:    String;
                               RemotePort:    Integer;
                               PacketID:      Integer = -1;
                               Msg:           Boolean = False
                                 );
    procedure DeleteSession(ServerSession: PMsgSrvrSession);
    procedure DoDisconnect(Session: TMsgComBaseSession);
    procedure DoSendBuffer(
                          ServerSession:    PMsgSrvrSession;
                          Buffer:     PChar;
                          BufferSize: Integer;
                          Code:       Integer = MsgNoAction
                                                  );
    procedure SendDisconnectRequest(ServerSession: PMsgSrvrSession;
                                    WaitForAnswer: Boolean = True);
    procedure SendConnectAckn(
                          ServerSession:        PMsgSrvrSession;
                          CurrentRequestID:     Integer = -1
                              );
    procedure SendAcknowledgement(
                          ServerSession:        PMsgSrvrSession;
                          Msg:                  Boolean = False;
                          CurrentRequestID:     Integer = -1
                              );
    procedure OnDisconnect(
                               FNetwork:      TMsgNetwork;
                               FromHost:      String;
                               FromPort:      Integer
                              ); override;
    procedure NetworkListener(
                               Buffer:        PChar;
                               BufferSize:    Integer;
                               Network:       TMsgNetwork;
                               FromHost:      String;
                               FromPort:      Integer
                              ); override;
    procedure CommandReceived(
                               ServerSession:  PMsgSrvrSession;
                               ControlCode:    TMsgControlCode
                              );
    procedure MessageReceived(
                               ServerSession:  PMsgSrvrSession
                              );
    // if authorization buffer is valid (encrypted by the same crypto settings as in CryptoInfo)
    // then return true else return false
    function IsAuthorizationBufferValid(
                          CryptoInfo: TMsgCryptoInfo;
                          Buffer:     PChar;
                          BufferSize: Integer
                                        ): Boolean;
   public
    constructor Create(Server: TComponent);
    destructor Destroy; override;
    procedure Disconnect(Session: TMsgComBaseSession);
    procedure DisconnectAll(WaitForAllDisconected: Boolean = True);
    procedure SendBuffer(
                          Session:    TMsgComBaseSession;
                          var Buffer: PChar;
                          BufferSize: Integer;
                          Code:       Integer = MsgNoAction
                          );
    procedure ReceiveBuffer(
                          ServerSession:  PMsgSrvrSession;
                          var Buffer:     PChar;
                          var BufferSize: Integer
                          );
    procedure SendMessage(
                          Session:    TMsgComBaseSession;
                          Buffer:     PChar;
                          BufferSize: Integer
                          );
    procedure ReceiveMessage(
                          ServerSession:  PMsgSrvrSession;
                          var Buffer:     PChar;
                          var BufferSize: Integer
                          );
    function GetClientInfo(
                          Session:          TMsgComBaseSession;
                          var Host:         String;
                          var Port:         Integer;
                          var Application:  String
                            ): Boolean;
    // fill array with server session object connected to this server
    procedure GetClientsList(var Clients: TMsgSessionsArray);
  end; // TMsgClientConnectionManager



////////////////////////////////////////////////////////////////////////////////
//
// TMsgServerSessionThread
//
////////////////////////////////////////////////////////////////////////////////

  TMsgServerSessionThread = class(TThread)
  private
    FServerSession:           PMsgSrvrSession;
    FManager:                 TMsgServerConnectionManager;
    FCode:                    TMsgControlCode;
  protected
    procedure Execute; override;
  public
    constructor Create(
                          Manager:          TMsgServerConnectionManager;
                          ServerSession:    PMsgSrvrSession;
                          Code:             Integer = MsgNoAction
                       );
    destructor Destroy; override;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -