📄 msgconnection.old.pas
字号:
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 + -