📄 msgserver.pas
字号:
UserInfo: TMsgUserInfo;
begin
CommandHeader.CommandResult := MSG_Error_AddUserToContacts_InvalidParams;
try
LoadDataFromStream(UserID,SizeOf(UserID),Stream,11502);
LoadDataFromStream(ContactNameSource,SizeOf(ContactNameSource),Stream,11503);
LoadShortStringFromStream(ContactCustomName,Stream,11504);
CommandHeader.CommandResult := MSG_COMMAND_OK;
except
on e: EMsgException do
FServer.DoOnError(CommandHeader.CommandResult,e.NativeError,e.Message);
on e: Exception do
FServer.DoOnError(CommandHeader.CommandResult,-1,e.Message)
else
FServer.DoOnError(CommandHeader.CommandResult);
end;
Stream.Size := 0;
Stream.Position := 0;
if (CommandHeader.CommandResult = MSG_COMMAND_OK) then
begin
try
CommandHeader.CommandResult := MSG_Error_AddUserToContacts_Failed;
if (not FServer.IsUserExisting(UserID)) then
CommandHeader.CommandResult := MSG_Error_AddUserToContacts_UserDoesNotExist
else
begin
FServer.AddUserToContacts(FUserID,UserID,ContactNameSource,ContactCustomName);
CommandHeader.CommandResult := MSG_COMMAND_OK;
end;
except
on e: EMsgException do
FServer.DoOnError(CommandHeader.CommandResult,e.NativeError,e.Message);
on e: Exception do
FServer.DoOnError(CommandHeader.CommandResult,-1,e.Message)
else
FServer.DoOnError(CommandHeader.CommandResult);
end;
end;
SaveDataToStream(CommandHeader,SizeOf(CommandHeader),Stream,11505);
if (CommandHeader.CommandResult = MSG_COMMAND_OK) then
begin
UserInfo := FServer.GetUserInfo(UserID);
FServer.SaveUserInfoToStream(UserInfo,Stream);
end;
Buffer := Stream.Buffer;
SendBuffer(Buffer,Stream.Size);
end; // ExecuteAddUserToContacts
//------------------------------------------------------------------------------
// update user in contacts
//------------------------------------------------------------------------------
procedure TMsgServerSession.ExecuteUpdateUserInContacts(var CommandHeader: TMsgCommandHeader; Stream: TMsgMemoryStream);
var UserID: Cardinal;
Buffer: PChar;
ContactCustomName: ShortString;
ContactNameSource: TMsgContactNameSource;
begin
CommandHeader.CommandResult := MSG_Error_UpdateUserInContacts_InvalidParams;
try
LoadDataFromStream(UserID,SizeOf(UserID),Stream,11509);
LoadDataFromStream(ContactNameSource,SizeOf(ContactNameSource),Stream,11510);
LoadShortStringFromStream(ContactCustomName,Stream,11511);
CommandHeader.CommandResult := MSG_COMMAND_OK;
except
on e: EMsgException do
FServer.DoOnError(CommandHeader.CommandResult,e.NativeError,e.Message);
on e: Exception do
FServer.DoOnError(CommandHeader.CommandResult,-1,e.Message)
else
FServer.DoOnError(CommandHeader.CommandResult);
end;
Stream.Size := 0;
Stream.Position := 0;
if (CommandHeader.CommandResult = MSG_COMMAND_OK) then
begin
try
CommandHeader.CommandResult := MSG_Error_UpdateUserInContacts_Failed;
if (not FServer.IsUserExisting(UserID)) then
CommandHeader.CommandResult := MSG_Error_UpdateUserInContacts_UserDoesNotExist
else
begin
FServer.UpdateUserInContacts(FUserID,UserID,ContactNameSource,ContactCustomName);
CommandHeader.CommandResult := MSG_COMMAND_OK;
end;
except
on e: EMsgException do
FServer.DoOnError(CommandHeader.CommandResult,e.NativeError,e.Message);
on e: Exception do
FServer.DoOnError(CommandHeader.CommandResult,-1,e.Message)
else
FServer.DoOnError(CommandHeader.CommandResult);
end;
end;
SaveDataToStream(CommandHeader,SizeOf(CommandHeader),Stream,11512);
Buffer := Stream.Buffer;
SendBuffer(Buffer,Stream.Size);
end; // ExecuteUpdateUserInContacts
//------------------------------------------------------------------------------
// remove user from contacts
//------------------------------------------------------------------------------
procedure TMsgServerSession.ExecuteRemoveUserFromContacts(var CommandHeader: TMsgCommandHeader; Stream: TMsgMemoryStream);
var UserID: Cardinal;
Buffer: PChar;
begin
CommandHeader.CommandResult := MSG_Error_RemoveUserFromContacts_InvalidParams;
try
LoadDataFromStream(UserID,SizeOf(UserID),Stream,11514);
CommandHeader.CommandResult := MSG_COMMAND_OK;
except
on e: EMsgException do
FServer.DoOnError(CommandHeader.CommandResult,e.NativeError,e.Message);
on e: Exception do
FServer.DoOnError(CommandHeader.CommandResult,-1,e.Message)
else
FServer.DoOnError(CommandHeader.CommandResult);
end;
Stream.Size := 0;
Stream.Position := 0;
if (CommandHeader.CommandResult = MSG_COMMAND_OK) then
begin
try
CommandHeader.CommandResult := MSG_Error_RemoveUserFromContacts_Failed;
if (not FServer.IsUserExisting(UserID)) then
CommandHeader.CommandResult := MSG_Error_RemoveUserFromContacts_UserDoesNotExist
else
begin
FServer.RemoveUserFromContacts(FUserID,UserID);
CommandHeader.CommandResult := MSG_COMMAND_OK;
end;
except
on e: EMsgException do
FServer.DoOnError(CommandHeader.CommandResult,e.NativeError,e.Message);
on e: Exception do
FServer.DoOnError(CommandHeader.CommandResult,-1,e.Message)
else
FServer.DoOnError(CommandHeader.CommandResult);
end;
end;
SaveDataToStream(CommandHeader,SizeOf(CommandHeader),Stream,11515);
Buffer := Stream.Buffer;
SendBuffer(Buffer,Stream.Size);
end; // ExecuteRemoveUserFromContacts
//------------------------------------------------------------------------------
// find users
//------------------------------------------------------------------------------
procedure TMsgServerSession.ExecuteFindUsers(var CommandHeader: TMsgCommandHeader; Stream: TMsgMemoryStream);
var
Buffer: PChar;
Len: Integer;
Users: TMsgUserInfoArray;
UserNameComparison: TMsgTextComparison;
FirstNameComparison: TMsgTextComparison;
LastNameComparison: TMsgTextComparison;
OrganizationComparison: TMsgTextComparison;
DepartmentComparison: TMsgTextComparison;
ApplicationComparison: TMsgTextComparison;
HostComparison: TMsgTextComparison;
PortComparison: TMsgIntegerComparison;
Status: TMsgUserStatus;
UserID: Cardinal;
UserName: String;
FirstName: String;
LastName: String;
Organization: String;
Department: String;
Host: String;
Application: String;
SearchCondition: String; // SQL WHERE clause without word WHERE
SortBy: TMsgUserInfoArraySortBy;
Ascending: Boolean;
OrderByClause: String;
begin
CommandHeader.CommandResult := MSG_Error_FindUsers_InvalidParams;
try
// load
LoadDataFromStream(UserNameComparison,SizeOf(UserNameComparison),Stream,11520);
LoadDataFromStream(FirstNameComparison,SizeOf(FirstNameComparison),Stream,11521);
LoadDataFromStream(LastNameComparison,SizeOf(LastNameComparison),Stream,11522);
LoadDataFromStream(OrganizationComparison,SizeOf(OrganizationComparison),Stream,11523);
LoadDataFromStream(DepartmentComparison,SizeOf(DepartmentComparison),Stream,11524);
LoadDataFromStream(ApplicationComparison,SizeOf(ApplicationComparison),Stream,11525);
LoadDataFromStream(HostComparison,SizeOf(HostComparison),Stream,11526);
LoadDataFromStream(PortComparison,SizeOf(PortComparison),Stream,11527);
LoadDataFromStream(Status,SizeOf(Status),Stream,11528);
LoadDataFromStream(UserID,SizeOf(UserID),Stream,11529);
LoadStringFromStream(UserName,Stream,11530);
LoadStringFromStream(FirstName,Stream,11531);
LoadStringFromStream(LastName,Stream,11532);
LoadStringFromStream(Organization,Stream,11533);
LoadStringFromStream(Department,Stream,11534);
LoadStringFromStream(Host,Stream,11535);
LoadStringFromStream(Application,Stream,11536);
LoadStringFromStream(SearchCondition,Stream,11547);
LoadDataFromStream(SortBy,SizeOf(SortBy),Stream,11540);
LoadBooleanFromStream(Ascending,Stream,11541);
LoadStringFromStream(OrderByClause,Stream,11542);
CommandHeader.CommandResult := MSG_COMMAND_OK;
except
on e: EMsgException do
FServer.DoOnError(CommandHeader.CommandResult,e.NativeError,e.Message);
on e: Exception do
FServer.DoOnError(CommandHeader.CommandResult,-1,e.Message)
else
FServer.DoOnError(CommandHeader.CommandResult);
end;
Stream.Size := 0;
Stream.Position := 0;
if (CommandHeader.CommandResult = MSG_COMMAND_OK) then
begin
try
CommandHeader.CommandResult := MSG_Error_FindUsers_Failed;
if (FServer.Database = nil) then
CommandHeader.CommandResult := MSG_Error_FindUsers_DatabaseIsNotAssigned
else
begin
FServer.FindUsers(
Users,
UserNameComparison,FirstNameComparison,LastNameComparison,
OrganizationComparison,DepartmentComparison,
ApplicationComparison,HostComparison,PortComparison,
Status,UserID,
UserName,
FirstName,
LastName,
Organization,
Department,
Host,
Application,
SearchCondition,
SortBy,
Ascending,
OrderByClause
);
CommandHeader.CommandResult := MSG_COMMAND_OK;
end;
except
on e: EMsgException do
FServer.DoOnError(CommandHeader.CommandResult,e.NativeError,e.Message);
on e: Exception do
FServer.DoOnError(CommandHeader.CommandResult,-1,e.Message)
else
FServer.DoOnError(CommandHeader.CommandResult);
end;
end;
SaveDataToStream(CommandHeader,SizeOf(CommandHeader),Stream,11519);
if (CommandHeader.CommandResult = MSG_COMMAND_OK) then
begin
Len := Length(Users);
SaveDataToStream(Len,SizeOf(Len),Stream,11544);
if (Len > 0) then
SaveDataToStream(Users[0],SizeOf(Users[0])*Len,Stream,11545);
end;
Buffer := Stream.Buffer;
SendBuffer(Buffer,Stream.Size);
end; // ExecuteFindUsers
//------------------------------------------------------------------------------
// find users
//------------------------------------------------------------------------------
procedure TMsgServerSession.ExecuteFindMessages(var CommandHeader: TMsgCommandHeader; Stream: TMsgMemoryStream);
var
Buffer: PChar;
MessageTextComparison: TMsgTextComparison;
MessageUnicodeTextComparison: TMsgTextComparison;
SendingDate: TMsgDateComparison;
DeliveryDate: TMsgDateComparison;
SearchDelivered: Boolean;
Delivered: Boolean;
MessageText: String; // text of the message
MessageUnicodeText: WideString; // unicode text of the message
SenderID: Cardinal;
RecipientID: Cardinal;
MessageType: TMsgMessageType;
MessageDataSize: Integer; // size of MessageData
OrderBySendingDate: Boolean;
// ORDER BY columns without ORDER BY statement
// example: SenderID DESC, SendingDate ASC
OrderByClause: String;
Command: Cardinal; // no condition on command field if TMsgMessageType = aamtNone
ds: TDataset;
begin
ds := nil;
CommandHeader.CommandResult := MSG_Error_FindMessages_InvalidParams;
try
// load
LoadDataFromStream(MessageTextComparison,SizeOf(MessageTextComparison),Stream,11549);
LoadDataFromStream(MessageUnicodeText,SizeOf(MessageUnicodeText),Stream,11550);
LoadDataFromStream(SendingDate,SizeOf(SendingDate),Stream,11551);
LoadDataFromStream(DeliveryDate,SizeOf(DeliveryDate),Stream,11552);
LoadBooleanFromStream(SearchDelivered,Stream,11553);
LoadBooleanFromStream(Delivered,Stream,11554);
LoadStringFromStream(MessageText,Stream,11555);
LoadWideStringFromStream(MessageUnicodeText,Stream,11556);
LoadDataFromStream(SenderID,SizeOf(SenderID),Stream,1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -