📄 msgtypes.pas
字号:
unit MsgTypes;
interface
{$I MsgVer.inc}
uses
SysUtils, Classes,
{$IFDEF MSWINDOWS}
Controls,
Windows,
{$ENDIF}
// MsgCommunicator units
{$IFDEF LINUX}
MsgLinux,
{$ENDIF}
{$IFDEF DEBUG_LOG}
MsgDebug,
{$ENDIF}
MsgMemory,
MsgConst,
MsgExcept;
type
TMsgUserIDs = array of Cardinal;
TMsgContactNameSource = (mcnsUserName,mcnsFirstName,mcnsLastName,mcnsFullName,
mcnsCustom);
TMsgMessageType = (
// Message Types
aamtText, aamtBinary, aamtStream,
// Command Types
MsgUserOnLine, MsgUserOffLine,
MsgCustomCommand,
aamtNone
);
TMsgCommandID = Int64;
TMsgCommandHeader = packed record
// RandomData MUST BE THE FIRST field in record !!! otherwise it will have no effect
// CTS or CBC modes recommended. ECB not recommended - will produce same ends.
RandomData: array [0..3] of Integer; // 128 bit of random data
CommandCode: Integer; // code of the command (like in ConnectionManager.SendBuffer)
CommandResult: Integer; // error code or MSG_COMMAND_OK
NativeError: Integer; // native error code: EMsgException.NativeError
end; // TMsgCommandHeader
PMsgCommandHeader = ^TMsgCommandHeader;
TMsgStringComparison = (mscmpExact,mscmpStarts,mscmpContains);
TMsgComparisonOperator = (mcmpopNone,mcmpopEqual,mcmpopGreater,mcmpopLower,mcmpopNotEqual,
mcmpopGreaterEqual,mcmpopLowerEqual);
TMsgTextComparison = packed record
Comparison: TMsgStringComparison;
CaseInsensitive: Boolean;
end;
TMsgDateComparison = packed record
Comparison1: TMsgComparisonOperator;
DateTime1: TDateTime;
Comparison2: TMsgComparisonOperator;
DateTime2: TDateTime;
end;
TMsgIntegerComparison = packed record
Comparison1: TMsgComparisonOperator;
Value1: Integer;
Comparison2: TMsgComparisonOperator;
Value2: Integer;
end;
const MsgLowestType = MsgUserOnLine;
const MsgHighestType = MsgCustomCommand;
type
//------------------------------------------------------------------------------
// Encryption types
//------------------------------------------------------------------------------
TMsgCryptoKey = packed record
Key: array [0..Msg_MAX_KEY] of Byte;
KeySize: Word; // 0 by default
end;
TMsgCryptoInfo = packed record
KeyInfo: TMsgCryptoKey;
InitVector: array [0..Msg_MAX_VECTOR] of Byte;
Password: String; // MsgDefaultPassword by default
CryptoAlgorithm: Byte; // msg_Cipher_None by Default
CryptoMode: Byte; // msg_CTS by Default
UseInitVector: Boolean; // False by default
end;
TMsgCryptoControlBlock = packed record
Data: array [0..Msg_MAX_CONTROL_BLOCK] of Byte;
end; // 256
TMsgCryptoHeader = packed record
ControlBlock: TMsgCryptoControlBlock;
ControlBlockCRC: Cardinal;
CryptoAlgorithm: Byte;
CryptoMode: Byte;
CryptoAskPassword: Byte; // ask password (1) or key (0)
Reserverd: array[0..4] of Byte;
end; // 268
TMsgCryptoParams = TMsgCryptoInfo;
//------------------------------------------------------------------------------
// general types
//------------------------------------------------------------------------------
TMsgIntegerArray = class;
TMsgLockParams = packed record
RetryCount: Integer;
Delay: Integer;
end;
//------------------------------------------------------------------------------
// network types
//------------------------------------------------------------------------------
TMsgConnectParams = packed record
ConnectionParamsTunning: Boolean;
PingClients: Boolean;
CompressionAlgorithm: Byte;
CompressionMode: Byte;
CryptoInfo: TMsgCryptoInfo;
RemoteHost: String;
RemotePort: Integer;
LocalHost: String;
LocalPort: Integer;
ServerID: Integer;
PacketSize: Integer;
MaxThreadCount: Integer;
TestPacketCount: Integer;
ConnectRetryCount: Integer;
ConnectDelay: Integer;
StartReceiveTimeOut: Integer;
ReceiveTimeOut: Integer;
ReceiveSleep: Integer;
ServerReceiveTimeOut: Integer;
ServerReceiveSleep: Integer;
MinSendTimeOut: Integer;
SendTimeOut: Integer;
MinServerSendTimeOut: Integer;
ServerSendTimeOut: Integer;
WaitForSendSleep: Integer;
ServerWaitForSendSleep: Integer;
ResendDelay: Integer;
RequestDelay: Integer;
ServerResendDelay: Integer;
ServerRequestDelay: Integer;
DisconnectRetryCount: Integer;
DisconnectDelay: Integer;
WaitForTimeOut: Integer;
WaitForMessagesSend: Integer;
WaitForServerSessionThreadTimeOut:Integer;
ThreadsTerminateDelay: Integer;
ServerThreadsTerminateDelay: Integer;
ServerSessionTerminatorSleep: Integer;
WaitForPingAnswer: Integer;
ServerPingSleep: Integer;
end;
PMsgConnectParams = ^TMsgConnectParams;
TMsgSessionID = Integer;
// MsgDatabaseFile Mode Types
TMsgShareMode = (smExclusive, smShared);
TMsgAccessMode = (amReadOnly, amReadWrite);
TMsgTimeoutParams = record
RetryCount: Word;
Timeout: Integer;
end;
////////////////////////////////////////////////////////////////////////////////
//
// TMsgIntegerArray
//
////////////////////////////////////////////////////////////////////////////////
TMsgIntegerArray = class(TObject)
public
Items: array of Integer;
ItemCount: Integer;
AllocBy: Integer;
deAllocBy: Integer;
MaxAllocBy: Integer;
AllocItemCount: Integer;
constructor Create(
size: Integer = 0;
DefaultAllocBy: Integer = 10;
MaximumAllocBy: Integer = 100
);
destructor Destroy; override;
procedure SetSize(newSize: Integer);
procedure Assign(v: TMsgIntegerArray);
procedure Append(value: Integer);
procedure Add(value: Integer);
procedure Remove(value: Integer);
procedure Insert(ItemNo: Integer; value: Integer);
procedure Delete(ItemNo: Integer);
procedure MoveTo(itemNo, newItemNo: Integer);
procedure CopyTo(
var ar: array of Integer;
itemNo, iCount: Integer
);
function IsValueExists(value: Integer): Boolean;
end; // TMsgIntegerArray
////////////////////////////////////////////////////////////////////////////////
//
// TMsgThreadIntArray
//
////////////////////////////////////////////////////////////////////////////////
TMsgThreadIntArray = class(TMsgIntegerArray)
private
FCSect: TRTLCriticalSection;
public
constructor Create(
size: Integer = 0;
DefaultAllocBy: Integer = 10;
MaximumAllocBy: Integer = 100
);
destructor Destroy; override;
procedure Lock;
procedure Unlock;
end; // TMsgThreadIntArray
////////////////////////////////////////////////////////////////////////////////
//
// Other functions
//
////////////////////////////////////////////////////////////////////////////////
// returns temporary name
function GetTemporaryName(Prefix: String): String;
implementation
uses
// MsgExpressions,
MsgCompression, Math;
////////////////////////////////////////////////////////////////////////////////
//
// TMsgIntegerArray
//
////////////////////////////////////////////////////////////////////////////////
//------------------------------------------------------------------------------
// Construct array of specified size
//------------------------------------------------------------------------------
constructor TMsgIntegerArray.Create(
size: Integer;
DefaultAllocBy: Integer;
MaximumAllocBy: Integer
);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -