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

📄 msgconnection.pas

📁 Delphi MsgCommunicator 2-10 component.I ve used, really good job. can be Server-Client message appl
💻 PAS
📖 第 1 页 / 共 5 页
字号:
    procedure DeleteSession(ServerSession: PMsgSrvrSession;
                            SkipServerSessionTermination: Boolean = False);
    procedure DoDisconnect(Session: TMsgComBaseSession;
                            SkipServerSessionTermination: Boolean = False);
    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 SendPing(ServerSession: PMsgSrvrSession);
    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 WaitForServerSessionThread(
                 ServerSession:    PMsgSrvrSession;
                 TimeOut:          DWORD = MsgWaitForServerSessionThreadTimeOut
                                          );
    procedure WaitForServerSessionMsgThread(
                 ServerSession:    PMsgSrvrSession;
                 TimeOut:          DWORD = MsgWaitForServerSessionThreadTimeOut
                                          );
    procedure CommandReceived(
                          ServerSession:    PMsgSrvrSession;
                          ControlCode:      TMsgControlCode;
                          CurrentRequestID: Integer
                              );
    procedure MessageReceived(
                               ServerSession:  PMsgSrvrSession;
                               ControlCode:    TMsgControlCode = MsgMessage
                              );
    // 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;
                          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);
    procedure TerminateSession(Session: TMsgComBaseSession);
  end; // TMsgClientConnectionManager



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

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



////////////////////////////////////////////////////////////////////////////////
//
// TMsgServerSessionMsgThread
//
////////////////////////////////////////////////////////////////////////////////

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



////////////////////////////////////////////////////////////////////////////////
//
// TMsgServerSessionDisconnectThread
//
////////////////////////////////////////////////////////////////////////////////

  TMsgServerSessionDisconnectThread = class(TThread)
  private
    FServerSession:           PMsgSrvrSession;
    FManager:                 TMsgServerConnectionManager;
    FCurrentRequestID:        Integer;
    Error:                    String;
  protected
    procedure Execute; override;
  public
    constructor Create(
                          Manager:          TMsgServerConnectionManager;
                          ServerSession:    PMsgSrvrSession;
                          CurrentRequestID: Integer = -1
                       );
    destructor Destroy; override;
  public
  end;// TMsgServerSessionDisconnectThread



////////////////////////////////////////////////////////////////////////////////
//
// TMsgServerListenerThread
//
////////////////////////////////////////////////////////////////////////////////

  TMsgServerListenerThread = class(TThread)
  private
    FManager:       TMsgServerConnectionManager;
    Buffer:         PChar;
    BufferSize:     Integer;
    FromHost:       String;
    FromPort:       Integer;
    ServerSession:  PMsgSrvrSession;
    SessionFound:   Boolean;
    Error:          String;
  protected
    procedure Execute; override;
  public
    constructor Create(
                       Manager:       TMsgServerConnectionManager;
                       Buffer:        PChar;
                       BufferSize:    Integer;
                       FromHost:      String;
                       FromPort:      Integer
                       );
    destructor Destroy; override;
  end;// TMsgServerListenerThread



////////////////////////////////////////////////////////////////////////////////
//
// TMsgServerResendRequestThread
//
////////////////////////////////////////////////////////////////////////////////

  TMsgServerResendRequestThread = class(TThread)
  private
    FManager:           TMsgServerConnectionManager;
    Error:              String;
  protected
    procedure Execute; override;
  public
    constructor Create(
                       Manager:           TMsgServerConnectionManager
                       );
    destructor Destroy; override;
  end;// TMsgServerResendRequestThread



////////////////////////////////////////////////////////////////////////////////
//
// TMsgServerMsgResendRequestThread
//
////////////////////////////////////////////////////////////////////////////////

  TMsgServerMsgResendRequestThread = class(TThread)
  private
    FManager:           TMsgServerConnectionManager;
    Error:              String;
  protected
    procedure Execute; override;
  public
    constructor Create(
                       Manager:           TMsgServerConnectionManager
                       );
    destructor Destroy; override;
  end;// TMsgServerMsgResendRequestThread

{$ENDIF} // Server



////////////////////////////////////////////////////////////////////////////////
//
// Procedures and Functions
//
////////////////////////////////////////////////////////////////////////////////

  function CheckSum(Buffer: PChar; BufferSize: Integer): Cardinal;

{$IFNDEF MsgCommunicator}
{IFDEF SERVER_VERSION}
{$ENDIF MsgCommunicator}
  function fnIsAuthorizationBufferValid(
                      CryptoInfo: TMsgCryptoInfo;
                      Buffer:     PChar;
                      BufferSize: Integer
                                    ): Boolean;
{$IFNDEF MsgCommunicator}
{ENDIF SERVER_VERSION}
{$ENDIF MsgCommunicator}


implementation

uses
{$IFDEF SERVER_VERSION}
  MsgServer,
{$ENDIF}
{IFDEF MsgCommunicator}
 {$IFDEF CLIENT_VERSION}
  MsgClient,
 {$ENDIF}
{ENDIF}
{$IFNDEF MsgCommunicator}
  MsgCommunication,
{$ENDIF}
  MsgComMain;

////////////////////////////////////////////////////////////////////////////////
// CheckSum
////////////////////////////////////////////////////////////////////////////////
function CheckSum(Buffer: PChar; BufferSize: Integer): Cardinal;
begin
// Start Point = Pointer(Buffer)+4
// Count (in Bytes) = BufferSize-4
  Result := CRC32(555, PChar(Buffer+4), BufferSize-4);
end;



////////////////////////////////////////////////////////////////////////////////
//
// TMsgNetwork
//
////////////////////////////////////////////////////////////////////////////////

//------------------------------------------------------------------------------
// CreateNetwork
//------------------------------------------------------------------------------
procedure TMsgNetwork.CreateNetwork;
begin
{$IFDEF API_NETWORK}
  FMsgNetwork := TMsgapiNetwork.Create;
  FMsgNetwork.OnDataReceived := OnDataReceived;
  FMsgNetwork.OnDisconnect := OnDisconnect;
{$ELSE}
 {$IFDEF D6H}
//  FNetworkClient := TIdUDPClient.Create(nil);
  FNetworkServer := TIdUDPServer.Create(nil);
  FNetworkServer.OnUDPRead := OnDataReceived;
 {$ELSE}
  FTransport := TNMUDP.Create(nil);
  FTransport.OnDataReceived := OnDataReceived;
 {$ENDIF D6H}
{$ENDIF API_NETWORK}
end; // CreateNetwork


//------------------------------------------------------------------------------
// FreeNetwork
//------------------------------------------------------------------------------
procedure TMsgNetwork.FreeNetwork;
begin
{$IFDEF API_NETWORK}
  if FMsgNetwork <> nil then
    FMsgNetwork.Free;
  FMsgNetwork := nil;
{$ELSE}
 {$IFDEF D6H}
//  FNetworkClient.Free;
  FNetworkServer.Free;
 {$ELSE}
  FTransport.Free;
 {$ENDIF D6H}
{$ENDIF}
end; // FreeNetwork


//------------------------------------------------------------------------------
// ReCreateNetwork
//------------------------------------------------------------------------------
procedure TMsgNetwork.ReCreateNetwork;
var
  lRemoteHost:       String;
  lLocalHost:        String;
  lRemotePort:       Integer;
  lLocalPort:        Integer;
begin
{$IFDEF DEBUG_LOG_NETWORK_ONDISCONNECT}
aaWriteToLog('MsgConnection> TMsgNetwork.ReCreateNetwork> START');
{$ENDIF}
  EnterCriticalSection(FManager.FCSect);
{$IFDEF DEBUG_LOG_NETWORK_ONDISCONNECT}
aaWriteToLog('MsgConnection> TMsgNetwork.ReCreateNetwork> CS entered');
{$ENDIF}
{$IFDEF DEBUG_LOG_NETWORK_ONDISCONNECT}
aaWriteToLog('MsgConnection> TMsgNetwork.ReCreateNetwork> RemoteHost="'+RemoteHost+'"');
{$ENDIF}
  lRemoteHost := RemoteHost;
{$IFDEF DEBUG_LOG_NETWORK_ONDISCONNECT}
aaWriteToLog('MsgConnection> TMsgNetwork.ReCreateNetwork> RemotePort='+IntToStr(RemotePort));
{$ENDIF}
  lRemotePort := RemotePort;
{$IFDEF DEBUG_LOG_NETWORK_ONDISCONNECT}
aaWriteToLog('MsgConnection> TMsgNetwork.ReCreateNetwork> LocalHost="'+LocalHost+'"');
{$ENDIF}
  lLocalHost := LocalHost;
{$IFDEF DEBUG_LOG_NETWORK_ONDISCONNECT}
aaWriteToLog('MsgConnection> TMsgNetwork.ReCreateNetwork> LocalPort='+IntToStr(LocalPort));
{$ENDIF}
  lLocalPort := LocalPort;
{$IFDEF DEBUG_LOG_NETWORK_ONDISCONNECT}
aaWriteToLog('MsgConnection> TMsgNetwork.ReCreateNetwork> Free...');
{$ENDIF}
  FreeNetwork;
{$IFDEF DEBUG_LOG_NETWORK_ONDISCONNECT}
aaWriteToLog('MsgConnection> TMsgNetwork.ReCreateNetwork> Create...');

⌨️ 快捷键说明

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