📄 msgconnection.old.pas
字号:
{$IFDEF DEBUG_LOG_NETWORK}
buf: PChar;
i: Integer;
{$ENDIF}
{$IFDEF NETWORK_TEST}
Connections: TList;
Connection: PMsgClntConnection;
{$ENDIF}
{$IFDEF DEBUG_LOG_NETWORK_SHORT}
str: String;
{$ENDIF}
begin
{$IFDEF DEBUG_LOG_NETWORK_TIME}
aaWriteToLog('TMsgNetwork.SendBuffer');
aaWriteToLog(IntToStr(gettickcount));
{$ENDIF}
Header := PMsgPacketHeader(Buffer);
Header.Sender := FLocalClient;
Header.CheckSum := CheckSum(Buffer, Count);
{$IFDEF DEBUG_LOG_NETWORK_SHORT}
if LocalPort = MsgDefaultClientPort then
str := 'Client'
else
if LocalPort = MsgDefaultServerPort then
str := 'Server'
else
str := IntToStr(LocalPort);
str := str + '>>> '
+IntToStr(Header.CurrentRequestID)+' : '
+IntToStr(Header.PacketID)+' / '
+IntToStr(Header.ControlCode)
//+' <'+IntToStr(Header.Recepient)+'>'
;
aaWriteToLog(str);
{$ENDIF}
{$IFDEF DEBUG_LOG_NETWORK}
aaWriteToLog('--------------------------------------------');
aaWriteToLog('MsgConnection>TMsgNetwork.SendBuffer('+IntToHex(Integer(@Buffer),6)+', '+IntToStr(Count)+')');
aaWriteToLog('Sender : '+IntToStr(FLocalClient));
aaWriteToLog('-----------');
aaWriteToLog('RemoteHost: '+RemoteHost);
aaWriteToLog('RemotePort: '+IntToStr(RemotePort));
aaWriteToLog('LocalHost : '+LocalHost);
aaWriteToLog('LocalPort : '+IntToStr(LocalPort));
aaWriteToLog('>>> Head:');
aaWriteToLog('CheckSum '+IntToStr(Header.CheckSum));
aaWriteToLog('Signature '+Header.Signature);
aaWriteToLog('Recepient '+IntToStr(Header.Recepient));
aaWriteToLog('Sender '+IntToStr(Header.Sender));
aaWriteToLog('ConnectionID '+IntToStr(Header.ConnectionID));
aaWriteToLog('SessionID '+IntToStr(Header.SessionID));
aaWriteToLog('CurrentRequestID '+IntToStr(Header.CurrentRequestID));
aaWriteToLog('PacketID '+IntToStr(Header.PacketID));
aaWriteToLog('ControlCode '+IntToStr(Header.ControlCode));
(*
aaWriteToLog('>>> Data:');
buf:=MemoryManager.GetMem(Count-SizeOf(TMsgPacketHeader)+1);
Move(PChar(Integer(Buffer)+SizeOf(TMsgPacketHeader))^, buf^, Count-SizeOf(TMsgPacketHeader));
for i:= 0 to Count-SizeOf(TMsgPacketHeader)-1 do
if (buf+i)^=#0 then
(buf+i)^:='0';
(buf+Count-SizeOf(TMsgPacketHeader))^:=#0;
aaWriteToLog(buf);
aaWriteToLog('###');
MemoryManager.FreeAndNilMem(buf);
*)
{$ENDIF}
{******************************************************************************}
// Send Buffer
{******************************************************************************}
// EnterCriticalSection(FCSect);
{$IFDEF NETWORK_TEST}
if FManager.FClient then
if Assigned(TMsgServerConnectionManager(FManager.FOtherManager).FNetwork.OnDataReceived) then
TMsgServerConnectionManager(FManager.FOtherManager).FNetwork.OnDataReceived(Buffer, Count, LocalHost, LocalPort)
else
begin
Connections:=TMsgClientConnectionManager(FManager.FOtherManager).FConnections.LockList;
try
Connection := Connections.Items[0];
finally
TMsgClientConnectionManager(FManager.FOtherManager).FConnections.UnlockList;
end;
Connection.Network.OnDataReceived(Buffer, Count, LocalHost, LocalPort);
end;
{$ELSE}
{$IFDEF API_NETWORK}
FMsgNetwork.SendBuffer(Buffer, Count);
// sleep(0); // TRY TO REMOVE!!!
{$ELSE}
{$IFDEF D6H}
FNetworkServer.SendBuffer(FRemoteHost, FRemotePort, Buffer^, Count);
// FNetworkClient.SendBuffer(Buffer^, Count);
{$ELSE}
Move(Buffer^, Buff[0], Count);
FTransport.SendBuffer(Buff, Count);
{$ENDIF D6H}
{$ENDIF API_NETWORK}
{$ENDIF NETWORK_TEST}
// LeaveCriticalSection(FCSect);
{******************************************************************************}
{$IFDEF DEBUG_LOG_NETWORK_TIME}
aaWriteToLog(IntToStr(gettickcount));
aaWriteToLog('');
{$ENDIF}
end; // SendBuffer
//------------------------------------------------------------------------------
// OnDisconnect
//------------------------------------------------------------------------------
procedure TMsgNetwork.OnDisconnect(
FromHost: String;
FromPort: Integer
);
begin
{$IFDEF DEBUG_LOG_NETWORK_ERRORS}
aaWriteToLog('MsgConnection> TMsgNetwork.OnDisconnect> START');
{$ENDIF}
try
FManager.OnDisconnect(self, FromHost, FromPort);
except
on E: Exception do
begin
{$IFDEF DEBUG_LOG_NETWORK_ERRORS}
aaWriteToLog('**************************************************************');
aaWriteToLog('MsgConnection> TMsgNetwork.OnDisconnect - Error:');
aaWriteToLog(E.Message);
aaWriteToLog('**************************************************************');
{$ENDIF}
raise;
end;
end;
{$IFDEF DEBUG_LOG_NETWORK_ERRORS}
aaWriteToLog('MsgConnection> TMsgNetwork.OnDisconnect> FINISH');
{$ENDIF}
end;// OnDisconnect
//------------------------------------------------------------------------------
// OnDataReceived
//------------------------------------------------------------------------------
{$IFDEF API_NETWORK}
procedure TMsgNetwork.OnDataReceived(
Buffer: PChar;
Count: Integer;
FromHost: String;
FromPort: Integer
);
{$ELSE}
{$IFDEF D6H}
procedure TMsgNetwork.OnDataReceived(
Sender: TObject;
AData: TStream;
ABinding: TIdSocketHandle
);
{$ELSE}
procedure TMsgNetwork.OnDataReceived(
Sender: TComponent;
BufferSize: Integer;
FromIP: string;
Port: integer
);
{$ENDIF D6H}
{$ENDIF API_NETWORK}
var
Buf: PChar;
BufSize: Integer;
{$IFDEF API_NETWORK}
{$ELSE}
{$IFDEF D6H}
FromHost: String;
FromPort: Integer;
{$ELSE}
Buffer: array [0..MsgMaxPacketSize] of Char;
{$ENDIF}
{$ENDIF}
Header: PMsgPacketHeader;
{$IFDEF DEBUG_LOG_NETWORK}
buff: pchar;
i: integer;
{$ENDIF}
{$IFDEF DEBUG_LOG_NETWORK_SHORT}
str: String;
{$ENDIF}
begin
{$IFDEF DEBUG_LOG_NETWORK_TIME}
aaWriteToLog('TMsgNetwork.OnDataReceived');
aaWriteToLog(IntToStr(gettickcount));
{$ENDIF}
// EnterCriticalSection(FCSect);
{$IFDEF API_NETWORK}
Buf := MemoryManager.GetMem(Count);
Move(Buffer^, Buf^, Count);
BufSize := Count;
{$ELSE}
{$IFDEF D6H}
Buf := MemoryManager.GetMem(MsgMaxPacketSize);
BufSize := AData.Read(Buf^, MsgMaxPacketSize);
FromHost := ABinding.PeerIP;
FromPort := ABinding.PeerPort;
{$ELSE}
Buf := MemoryManager.GetMem(BufferSize);
FTransport.ReadBuffer(Buffer, BufferSize);
Move(Buffer[0], Buf^, BufferSize);
BufSize := BufferSize;
{$ENDIF D6H}
{$ENDIF API_NETWORK}
// LeaveCriticalSection(FCSect);
Header := PMsgPacketHeader(Buf);
{$IFDEF DEBUG_LOG_NETWORK_SHORT}
if LocalPort = MsgDefaultClientPort then
str := 'Client'
else
if LocalPort = MsgDefaultServerPort then
str := 'Server'
else
str := IntToStr(LocalPort);
str := str + '<<< '
+IntToStr(Header.CurrentRequestID)+' : '
+IntToStr(Header.PacketID)+' / '
+IntToStr(Header.ControlCode)
//+' <'+IntToStr(Header.Recepient)+'>'
;
aaWriteToLog(str);
{$ENDIF}
{$IFDEF DEBUG_LOG_NETWORK}
aaWriteToLog('--------------------------------------------');
aaWriteToLog('MsgConnection>TMsgNetwork.OnDataReceived('+IntToHex(Integer(@Buf),6)+', '+IntToStr(BufSize)+')');
aaWriteToLog('Recepient : '+IntToStr(FLocalClient));
aaWriteToLog('-----------');
{$IFDEF API_NETWORK}
aaWriteToLog('RemoteHost: '+FromHost);
aaWriteToLog('RemotePort: '+IntToStr(FromPort));
{$ELSE}
{$IFDEF D6H}
aaWriteToLog('RemoteHost: '+FromHost);
aaWriteToLog('RemotePort: '+IntToStr(FromPort));
{$ELSE}
aaWriteToLog('RemoteHost: '+FromIP);
aaWriteToLog('RemotePort: '+IntToStr(Port));
{$ENDIF D6H}
{$ENDIF API_NETWORK}
aaWriteToLog('LocalHost : '+LocalHost);
aaWriteToLog('LocalPort : '+IntToStr(LocalPort));
aaWriteToLog('>>> Head:');
aaWriteToLog('CheckSum '+IntToStr(Header.CheckSum));
aaWriteToLog('Signature '+Header.Signature);
aaWriteToLog('Recepient '+IntToStr(Header.Recepient));
aaWriteToLog('Sender '+IntToStr(Header.Sender));
aaWriteToLog('ConnectionID '+IntToStr(Header.ConnectionID));
aaWriteToLog('SessionID '+IntToStr(Header.SessionID));
aaWriteToLog('CurrentRequestID '+IntToStr(Header.CurrentRequestID));
aaWriteToLog('PacketID '+IntToStr(Header.PacketID));
aaWriteToLog('ControlCode '+IntToStr(Header.ControlCode));
(*
aaWriteToLog('>>> Data:');
buff:=MemoryManager.GetMem(BufSize-SizeOf(TMsgPacketHeader)+1);
Move(PChar(Integer(Buf)+SizeOf(TMsgPacketHeader))^, buff^, BufSize-SizeOf(TMsgPacketHeader));
for i:= 0 to BufSize-SizeOf(TMsgPacketHeader)-1 do
if (buff+i)^=#0 then
(buff+i)^:='0';
(buff+BufSize-SizeOf(TMsgPacketHeader))^:=#0;
aaWriteToLog(buff);
aaWriteToLog('###');
MemoryManager.FreeAndNilMem(buff);
*)
{$ENDIF DEBUG_LOG_NETWORK}
{$IFDEF DEBUG_LOG_NETWORK_TIME}
aaWriteToLog(IntToStr(gettickcount)+ ' - buffer prepared');
{$ENDIF}
if (Header.Recepient = FLocalClient)
{$IFDEF MsgCommunicator}
or (
// (Header.Recepient = Integer(MSG_INVALID_USER_ID) and
((Header.ControlCode = MsgConnect) or (Header.ControlCode = MsgConnect+MsgLastPacket))
and
(Header.Signature = MsgClientPacketSign)
)
{$ENDIF MsgCommunicator}
then
{$IFDEF API_NETWORK}
FManager.NetworkListener(Buf, BufSize, Self, FromHost, FromPort);
{$ELSE}
{$IFDEF D6H}
FManager.NetworkListener(Buf, BufSize, Self, FromHost, FromPort);
{$ELSE}
FManager.NetworkListener(Buf, BufSize, Self, FromIP, Port);
{$ENDIF D6H}
{$ENDIF API_NETWORK}
{$IFDEF DEBUG_LOG_NETWORK_TIME}
aaWriteToLog(IntToStr(gettickcount)+' - end of parsing');
aaWriteToLog('');
{$ENDIF}
end;
// TMsgNetwork
////////////////////////////////////////////////////////////////////////////////
//
// TMsgBaseConnectionManager
//
////////////////////////////////////////////////////////////////////////////////
//------------------------------------------------------------------------------
// compresses and encrypts buffer
//------------------------------------------------------------------------------
procedure TMsgBaseConnectionManager.CompressAndEncryptBuffer(
Session: TMsgComBaseSession;
var Buffer: PChar;
var BufferSize: Integer
);
begin
try
MsgBaseEngine.CompressAndEncryptBuffer(Session.ConnectParams.CryptoInfo,
Session.ConnectParams.CompressionAlgorithm,
Session.ConnectParams.CompressionMode,
Buffer,
BufferSize
);
except
{$IFDEF DEBUG_LOG_NETWORK_ERRORS}
on E: Exception do
begin
aaWriteToLog('**************************************************************');
aaWriteToLog('MsgConnection> CompressAndEncryptBuffer - Error:');
aaWriteToLog(E.Message);
aaWriteToLog('**************************************************************');
end;
{$ELSE}
raise;
{$ENDIF}
end;
end; // CompressAndEncryptBuffer
//------------------------------------------------------------------------------
// decompresses and decrypts buffer
//------------------------------------------------------------------------------
function TMsgBaseConnectionManager.DecompressAndDecryptBuffer(
Session: TMsgComBaseSession;
var Buffer: PChar;
var BufferSize: Integer
): Boolean;
begin
try
Result := MsgBaseEngine.DecompressAndDecryptBuffer(
Session.ConnectParams.CryptoInfo,
Session.ConnectParams.CompressionAlgorithm,
Session.ConnectParams.CompressionMode,
Buffer,
BufferSize);
except
{$IFDEF DEBUG_LOG_NETWORK_ERRORS}
on E: Exception do
begin
Result := False;
aaWriteToLog('**************************************************************');
aaWriteToLog('MsgConnection> DecompressAndDecryptBuffer - Error:');
aaWriteToLog(E.Message);
aaWriteToLog('**************************************************************');
end;
{$ELSE}
Result := False;
{$ENDIF}
end;
end; // DecompressAndDecryptBuffer
{$IFDEF CLIENT_VERSION}
////////////////////////////////////////////////////////////////////////////////
//
// TMsgClientConnectionManager
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -