Bump protocol to v9 and carry talk-circle ids on the presence frame.
Names stay off the wire; a person not in a circle writes an empty member list and topic. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -202,6 +202,14 @@ public static class ProtocolCodec
|
||||
foreach (var person in message.People)
|
||||
{
|
||||
size += StringSize(person.Id) + StringSize(person.NodeId) + sizeof(byte);
|
||||
var members = person.TalkMemberIds ?? [];
|
||||
size += sizeof(byte);
|
||||
foreach (var memberId in members)
|
||||
{
|
||||
size += StringSize(memberId);
|
||||
}
|
||||
|
||||
size += StringSize(person.TalkTopicId ?? "");
|
||||
}
|
||||
|
||||
return size;
|
||||
@@ -242,9 +250,22 @@ public static class ProtocolCodec
|
||||
writer.WriteUInt16((ushort)message.People.Count);
|
||||
foreach (var person in message.People)
|
||||
{
|
||||
var members = person.TalkMemberIds ?? [];
|
||||
if (members.Count > byte.MaxValue)
|
||||
{
|
||||
throw new ProtocolException($"Presence person {person.Id} has {members.Count} talk members; u8 count cannot hold it.");
|
||||
}
|
||||
|
||||
writer.WriteString(person.Id);
|
||||
writer.WriteString(person.NodeId);
|
||||
writer.WriteByte(person.State);
|
||||
writer.WriteByte((byte)members.Count);
|
||||
foreach (var memberId in members)
|
||||
{
|
||||
writer.WriteString(memberId);
|
||||
}
|
||||
|
||||
writer.WriteString(person.TalkTopicId ?? "");
|
||||
}
|
||||
|
||||
return writer.Position;
|
||||
@@ -403,7 +424,18 @@ public static class ProtocolCodec
|
||||
var people = new PresencePerson[personCount];
|
||||
for (var i = 0; i < personCount; i++)
|
||||
{
|
||||
people[i] = new PresencePerson(reader.ReadString(), reader.ReadString(), reader.ReadByte());
|
||||
var id = reader.ReadString();
|
||||
var nodeId = reader.ReadString();
|
||||
var state = reader.ReadByte();
|
||||
var memberCount = reader.ReadByte();
|
||||
var members = new string[memberCount];
|
||||
for (var member = 0; member < memberCount; member++)
|
||||
{
|
||||
members[member] = reader.ReadString();
|
||||
}
|
||||
|
||||
var topicId = reader.ReadString();
|
||||
people[i] = new PresencePerson(id, nodeId, state, members, topicId);
|
||||
}
|
||||
|
||||
return new ServerPresenceMessage(schoolId, nodes, people);
|
||||
|
||||
Reference in New Issue
Block a user