add message chunking support to group and instant message sessions. message ordering not guarenteed and will probably be out of order.

This commit is contained in:
nooperation
2025-06-23 21:26:11 -04:00
parent 0e6447753a
commit cc4e8061d5

View File

@@ -1809,12 +1809,21 @@ namespace OpenMetaverse
InstantMessageDialog dialog, InstantMessageOnline offline, Vector3 position, UUID regionID,
byte[] binaryBucket)
{
if (target != UUID.Zero)
if (target == UUID.Zero)
{
Logger.Log($"Suppressing instant message \"{message}\" to UUID.Zero", Helpers.LogLevel.Error, Client);
return;
}
var messageParts = SplitMultibyteString(message, MaxChatMessageSize);
foreach (var messagePart in messageParts)
{
ImprovedInstantMessagePacket im = new ImprovedInstantMessagePacket();
if (imSessionID.Equals(UUID.Zero) || imSessionID.Equals(AgentID))
{
imSessionID = AgentID.Equals(target) ? AgentID : target ^ AgentID;
}
im.AgentData.AgentID = Client.Self.AgentID;
im.AgentData.SessionID = Client.Self.SessionID;
@@ -1823,7 +1832,7 @@ namespace OpenMetaverse
im.MessageBlock.FromAgentName = Utils.StringToBytes(fromName);
im.MessageBlock.FromGroup = false;
im.MessageBlock.ID = imSessionID;
im.MessageBlock.Message = Utils.StringToBytes(message);
im.MessageBlock.Message = Utils.StringToBytes(messagePart);
im.MessageBlock.Offline = (byte)offline;
im.MessageBlock.ToAgentID = target;
@@ -1837,11 +1846,6 @@ namespace OpenMetaverse
// Send the message
Client.Network.SendPacket(im);
}
else
{
Logger.Log($"Suppressing instant message \"{message}\" to UUID.Zero",
Helpers.LogLevel.Error, Client);
}
}
/// <summary>
@@ -1864,7 +1868,15 @@ namespace OpenMetaverse
{
lock (GroupChatSessions.Dictionary)
{
if (GroupChatSessions.ContainsKey(groupID))
if (!GroupChatSessions.ContainsKey(groupID))
{
Logger.Log("No Active group chat session appears to exist, use RequestJoinGroupChat() to join one",
Helpers.LogLevel.Error, Client);
return;
}
var messageChunks = SplitMultibyteString(message, MaxChatMessageSize);
foreach (var messageChunk in messageChunks)
{
ImprovedInstantMessagePacket im = new ImprovedInstantMessagePacket
{
@@ -1878,7 +1890,7 @@ namespace OpenMetaverse
Dialog = (byte) InstantMessageDialog.SessionSend,
FromAgentName = Utils.StringToBytes(fromName),
FromGroup = false,
Message = Utils.StringToBytes(message),
Message = Utils.StringToBytes(messageChunk),
Offline = 0,
ID = groupID,
ToAgentID = groupID,
@@ -1888,14 +1900,8 @@ namespace OpenMetaverse
}
};
Client.Network.SendPacket(im);
}
else
{
Logger.Log("No Active group chat session appears to exist, use RequestJoinGroupChat() to join one",
Helpers.LogLevel.Error, Client);
}
}
}