finish notificationSendHelper

This commit is contained in:
CWX
2025-01-27 19:51:14 +00:00
parent 8fc0bb9547
commit 96110519de
3 changed files with 93 additions and 4 deletions
@@ -14,7 +14,8 @@ public class NotificationSendHelper(
IWebSocketConnectionHandler _sptWebSocketConnectionHandler,
HashUtil _hashUtil,
SaveServer _saveServer,
NotificationService _notificationService
NotificationService _notificationService,
TimeUtil _timeUtil
)
{
/// <summary>
@@ -47,7 +48,28 @@ public class NotificationSendHelper(
string messageText,
MessageType messageType)
{
throw new NotImplementedException();
var dialog = GetDialog(sessionId, messageType, senderDetails);
dialog.New += 1;
Message message = new Message {
Id = _hashUtil.Generate(),
UserId = dialog.Id,
MessageType = messageType,
DateTime = _timeUtil.GetTimeStamp(),
Text = messageText,
HasRewards = null,
RewardCollected = null,
Items = null,
};
dialog.Messages.Add(message);
WsChatMessageReceived notification = new WsChatMessageReceived {
EventType = NotificationEventType.new_message,
EventIdentifier = message.Id,
DialogId = message.UserId,
Message = message,
};
SendMessage(sessionId, notification);
}
/// <summary>
@@ -59,6 +81,26 @@ public class NotificationSendHelper(
/// <returns>Dialogue</returns>
protected Models.Eft.Profile.Dialogue GetDialog(string sessionId, MessageType messageType, UserDialogInfo senderDetails)
{
throw new NotImplementedException();
// Use trader id if sender is trader, otherwise use nickname
var key = senderDetails.Id;
var dialogueData = _saveServer.GetProfile(sessionId).DialogueRecords;
var isNewDialogue = dialogueData.ContainsKey(key);
var dialogue = dialogueData[key];
// Existing dialog not found, make new one
if (isNewDialogue) {
dialogue = new Models.Eft.Profile.Dialogue {
Id = key,
Type = messageType,
Messages = [],
Pinned = false,
New = 0,
AttachmentsNew = 0,
Users = senderDetails.Info.MemberCategory == MemberCategory.Trader ? null : [senderDetails],
};
dialogueData[key] = dialogue;
}
return dialogue;
}
}
+47
View File
@@ -5,8 +5,55 @@ namespace Core.Utils;
[Injectable]
public class CompareUtil
{
private readonly HashSet<string> typesToCheckAgainst = [
"string",
"number",
"boolean",
"bigint",
"symbol",
"undefined",
"null",
];
/**
* This function does an object comparison, equivalent to applying reflections
* and scanning for all possible properties including arrays.
* @param v1 value 1 to compare
* @param v2 value 2 to compare
* @returns true if equal, false if not
*/
public bool RecursiveCompare(object v1, object v2)
{
// const typeOfv1 = typeof v1;
// const typeOfv2 = typeof v2;
// if (CompareUtil.typesToCheckAgainst.has(typeOfv1)) {
// return v1 === v2;
// }
// if (typeOfv1 === "object" && typeOfv2 === "object") {
// if (Array.isArray(v1)) {
// if (!Array.isArray(v2)) {
// return false;
// }
// const arr1 = v1 as Array<any>;
// const arr2 = v2 as Array<any>;
// if (arr1.length !== arr2.length) {
// return false;
// }
// return arr1.every((vOf1) => arr2.find((vOf2) => this.recursiveCompare(vOf1, vOf2)));
// }
// for (const propOf1 in v1) {
// if (v2[propOf1] === undefined) {
// return false;
// }
// return this.recursiveCompare(v1[propOf1], v2[propOf1]);
// }
// }
// if (typeOfv1 === typeOfv2) {
// return v1 === v2;
// }
//
// return false;
throw new NotImplementedException();
}
}
+1 -1
View File
@@ -2,7 +2,7 @@
"profiles": {
"Spt Server Debug": {
"commandName": "Project",
"hotReloadEnabled": true,
"hotReloadEnabled": false,
"workingDirectory": "$(OutputPath)"
}
}