📄 msgconnection.pas
字号:
Count: Integer
);
procedure OnDisconnect(
FromHost: String;
FromPort: Integer;
Recv: Boolean = False
);
{$IFDEF API_NETWORK}
procedure OnDataReceived(
Buffer: PChar;
Count: Integer;
FromHost: String;
FromPort: Integer
);
{$ELSE}
{$IFDEF D6H}
procedure OnDataReceived(
Sender: TObject;
AData: TStream;
ABinding: TIdSocketHandle
);
{$ELSE}
procedure OnDataReceived(
Sender: TComponent;
BufferSize: Integer;
FromIP: string;
Port: integer
);
{$ENDIF}
{$ENDIF}
public
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;
FListenerStoped: Boolean;
public
FSessions: TThreadList;
FThreadCount: Integer;
protected
procedure IncThreadCount(Ignore: Boolean = False);
procedure DecThreadCount(Ignore: Boolean = False);
procedure SetThreadCount(Value: Integer);
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;
InBuffer: PChar;
InBufferSize: Integer;
var OutBuffer: PChar;
var OutBufferSize: Integer
);
function DecompressAndDecryptBuffer(
Session: TMsgComBaseSession;
var Buffer: PChar;
var BufferSize: Integer
): Boolean;
public
property ThreadCount: Integer read FThreadCount write SetThreadCount;
end; // TMsgBaseConnectionManager
////////////////////////////////////////////////////////////////////////////////
//
// TMsgClientConnectionManager
//
////////////////////////////////////////////////////////////////////////////////
{$IFDEF CLIENT_VERSION}
TMsgClientConnectionManager = class (TMsgBaseConnectionManager)
private
FConnections: TThreadList;
FConnectionID: TMsgConnectionID;
FApplication: String;
FMaxThreadCount: Integer;
FReceiveTimeOut: 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 SendPing(ClientSession: PMsgClntSession);
procedure SendAcknowledgement(ClientSession: PMsgClntSession;
Msg: Boolean = False;
CurrentRequestID: Integer = -1);
{$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 TuneConnectionParamaters(ClientSession: PMsgClntSession);
procedure Connect(Session: TMsgComBaseSession;
ListenOnly: Boolean = False;
Tune: Boolean = True
);
procedure Disconnect(Session: TMsgComBaseSession; ListenOnly: Boolean = False);
procedure DisconnectAll;
procedure SendBuffer(
Session: TMsgComBaseSession;
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;
Sessions: TList;
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
{$IFDEF SERVER_VERSION} // Server
////////////////////////////////////////////////////////////////////////////////
//
// TMsgServerSessionTerminatorThread
//
////////////////////////////////////////////////////////////////////////////////
TMsgServerSessionTerminatorThread = class(TThread)
private
FManager: TMsgServerConnectionManager;
FTerminatedSessions: TThreadList;
Error: String;
protected
procedure Execute; override;
public
constructor Create(
Manager: TMsgServerConnectionManager
);
destructor Destroy; override;
public
end;// TMsgServerSessionThread
////////////////////////////////////////////////////////////////////////////////
//
// TMsgServerPingClientsThread
//
////////////////////////////////////////////////////////////////////////////////
TMsgServerPingClientsThread = class(TThread)
private
FManager: TMsgServerConnectionManager;
Error: String;
protected
procedure Execute; override;
public
constructor Create(
Manager: TMsgServerConnectionManager
);
destructor Destroy; override;
public
end;// TMsgServerSessionThread
////////////////////////////////////////////////////////////////////////////////
//
// TMsgServerConnectionManager
//
////////////////////////////////////////////////////////////////////////////////
TMsgServerConnectionManager = class (TMsgBaseConnectionManager)
private
FServer: TComponent;
ResendRequestThread: TMsgServerResendRequestThread;
MsgResendRequestThread: TMsgServerMsgResendRequestThread;
SessionTerminator: TMsgServerSessionTerminatorThread;
PingClientsThread: TMsgServerPingClientsThread;
public
FNetwork: TMsgNetwork;
// property Network: TMsgNetwork read FNetwork write FNetwork;
private
function SessionsCount: Integer;
procedure WaitForThread(
Thread: PThread;
TimeOut: DWORD
);
function TerminateServerThread(
Thread: PThread;
ErrProcess: Integer;
ErrObject: String;
WaitTimeOut: DWORD = MsgServerThreadsTerminateDelay
): Boolean;
procedure TerminateAllSessionThreads(ServerSession: PMsgSrvrSession);
procedure TerminateMessageThreads(ServerSession: PMsgSrvrSession);
procedure TerminateCommandThreads(ServerSession: PMsgSrvrSession);
procedure EnableNextCommand(ServerSession: PMsgSrvrSession);
procedure PacketResendRequest(
Buffer: PChar;
Network: TMsgNetwork;
RemoteHost: String;
RemotePort: Integer;
PacketID: Integer = -1;
Msg: Boolean = False
);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -