lludp ChatFromSimulator enconding; some simplification
parent
84187975bd
commit
6fd7b931b1
|
@ -913,24 +913,60 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
}
|
}
|
||||||
|
|
||||||
buf.DataLength = 80 + len;
|
buf.DataLength = 80 + len;
|
||||||
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Unknown, null, false, false);
|
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Unknown);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendChatMessage(
|
static private readonly byte[] ChatFromSimulatorHeader = new byte[] {
|
||||||
string message, byte type, Vector3 fromPos, string fromName,
|
Helpers.MSG_RELIABLE,
|
||||||
UUID fromAgentID, UUID ownerID, byte source, byte audible)
|
0, 0, 0, 0, // sequence number
|
||||||
{
|
0, // extra
|
||||||
ChatFromSimulatorPacket reply = (ChatFromSimulatorPacket)PacketPool.Instance.GetPacket(PacketType.ChatFromSimulator);
|
0xff, 0xff, 0, 139 // ID 139 (low frequency bigendian)
|
||||||
reply.ChatData.Audible = audible;
|
};
|
||||||
reply.ChatData.Message = Util.StringToBytes1024(message);
|
|
||||||
reply.ChatData.ChatType = type;
|
|
||||||
reply.ChatData.SourceType = source;
|
|
||||||
reply.ChatData.Position = fromPos;
|
|
||||||
reply.ChatData.FromName = Util.StringToBytes256(fromName);
|
|
||||||
reply.ChatData.OwnerID = ownerID;
|
|
||||||
reply.ChatData.SourceID = fromAgentID;
|
|
||||||
|
|
||||||
OutPacket(reply, ThrottleOutPacketType.Unknown);
|
public void SendChatMessage(string message, byte chattype, Vector3 fromPos, string fromName,
|
||||||
|
UUID sourceID, UUID ownerID, byte sourcetype, byte audible)
|
||||||
|
{
|
||||||
|
UDPPacketBuffer buf = m_udpServer.GetNewUDPBuffer(m_udpClient.RemoteEndPoint);
|
||||||
|
byte[] data = buf.Data;
|
||||||
|
|
||||||
|
//setup header
|
||||||
|
Buffer.BlockCopy(ChatFromSimulatorHeader, 0, data, 0, 10);
|
||||||
|
|
||||||
|
byte[] fname = Util.StringToBytes256(fromName);
|
||||||
|
int len = fname.Length;
|
||||||
|
int pos = 11;
|
||||||
|
if (len == 0)
|
||||||
|
data[10] = 0;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
data[10] = (byte)len;
|
||||||
|
Buffer.BlockCopy(fname, 0, data, 11, len);
|
||||||
|
pos += len;
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceID.ToBytes(data, pos); pos += 16;
|
||||||
|
ownerID.ToBytes(data, pos); pos += 16;
|
||||||
|
data[pos++] = sourcetype;
|
||||||
|
data[pos++] = chattype;
|
||||||
|
data[pos++] = audible;
|
||||||
|
fromPos.ToBytes(data, pos); pos += 12;
|
||||||
|
|
||||||
|
byte[] msg = Util.StringToBytes1024(message);
|
||||||
|
len = msg.Length;
|
||||||
|
if (len == 0)
|
||||||
|
{
|
||||||
|
data[pos++] = 0;
|
||||||
|
data[pos++] = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
data[pos++] = (byte)len;
|
||||||
|
data[pos++] = (byte)(len >> 8);
|
||||||
|
Buffer.BlockCopy(msg, 0, data, pos, len); pos += len;
|
||||||
|
}
|
||||||
|
|
||||||
|
buf.DataLength = pos;
|
||||||
|
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Unknown);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -1336,7 +1372,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
data[9] = (byte)(datasize >> 8);
|
data[9] = (byte)(datasize >> 8);
|
||||||
|
|
||||||
buf.DataLength = bitpack.BytePos + 1;
|
buf.DataLength = bitpack.BytePos + 1;
|
||||||
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Land, null, false, false);
|
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Land);
|
||||||
|
|
||||||
// start another
|
// start another
|
||||||
buf = m_udpServer.GetNewUDPBuffer(m_udpClient.RemoteEndPoint);
|
buf = m_udpServer.GetNewUDPBuffer(m_udpClient.RemoteEndPoint);
|
||||||
|
@ -1364,7 +1400,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
data[9] = (byte)(datasize >> 8);
|
data[9] = (byte)(datasize >> 8);
|
||||||
|
|
||||||
buf.DataLength = bitpack.BytePos + 1;
|
buf.DataLength = bitpack.BytePos + 1;
|
||||||
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Land, null, false, false);
|
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Land);
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
@ -1645,7 +1681,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
buf.DataLength = lastpos;
|
buf.DataLength = lastpos;
|
||||||
// send it
|
// send it
|
||||||
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Land, null, false, false);
|
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Land);
|
||||||
|
|
||||||
buf = newbuf;
|
buf = newbuf;
|
||||||
data = buf.Data;
|
data = buf.Data;
|
||||||
|
@ -1661,7 +1697,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
data[countpos] = (byte)count;
|
data[countpos] = (byte)count;
|
||||||
|
|
||||||
buf.DataLength = pos;
|
buf.DataLength = pos;
|
||||||
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Land, null, false, false);
|
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Land);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1757,7 +1793,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
buf.DataLength = lastpos;
|
buf.DataLength = lastpos;
|
||||||
// send it
|
// send it
|
||||||
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Land, null, false, false);
|
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Land);
|
||||||
|
|
||||||
buf = newbuf;
|
buf = newbuf;
|
||||||
data = buf.Data;
|
data = buf.Data;
|
||||||
|
@ -1786,7 +1822,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
data[pos++] = 0;
|
data[pos++] = 0;
|
||||||
|
|
||||||
buf.DataLength = pos;
|
buf.DataLength = pos;
|
||||||
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Land, null, false, false);
|
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Land);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4122,8 +4158,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
data[pos++] = 0; // no physical avatar events
|
data[pos++] = 0; // no physical avatar events
|
||||||
|
|
||||||
buf.DataLength = pos;
|
buf.DataLength = pos;
|
||||||
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Task | ThrottleOutPacketType.HighPriority,
|
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Task | ThrottleOutPacketType.HighPriority);
|
||||||
null, false, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendObjectAnimations(UUID[] animations, int[] seqs, UUID senderId)
|
public void SendObjectAnimations(UUID[] animations, int[] seqs, UUID senderId)
|
||||||
|
@ -4180,7 +4215,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
CreatePrimUpdateBlock(ent as SceneObjectPart, (ScenePresence)SceneAgent, zc);
|
CreatePrimUpdateBlock(ent as SceneObjectPart, (ScenePresence)SceneAgent, zc);
|
||||||
|
|
||||||
buf.DataLength = zc.Finish();
|
buf.DataLength = zc.Finish();
|
||||||
m_udpServer.SendUDPPacket(m_udpClient, buf, ptype , null, false, false);
|
m_udpServer.SendUDPPacket(m_udpClient, buf, ptype);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendEntityTerseUpdateImmediate(ISceneEntity ent)
|
public void SendEntityTerseUpdateImmediate(ISceneEntity ent)
|
||||||
|
@ -4275,7 +4310,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
}
|
}
|
||||||
|
|
||||||
buf.DataLength = pos;
|
buf.DataLength = pos;
|
||||||
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Task, null, false, false);
|
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Task);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion Avatar Packet/Data Sending Methods
|
#endregion Avatar Packet/Data Sending Methods
|
||||||
|
@ -5332,7 +5367,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
//m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Task,
|
//m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Task,
|
||||||
// delegate (OutgoingPacket oPacket) { ResendPrimUpdates(tau, oPacket); }, false, false);
|
// delegate (OutgoingPacket oPacket) { ResendPrimUpdates(tau, oPacket); }, false, false);
|
||||||
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Task, null, false, false);
|
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Task);
|
||||||
buf = newbuf;
|
buf = newbuf;
|
||||||
zc.Data = buf.Data;
|
zc.Data = buf.Data;
|
||||||
zc.ZeroCount = 0;
|
zc.ZeroCount = 0;
|
||||||
|
@ -5353,7 +5388,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
buf.DataLength = zc.Finish();
|
buf.DataLength = zc.Finish();
|
||||||
//m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Task,
|
//m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Task,
|
||||||
// delegate (OutgoingPacket oPacket) { ResendPrimUpdates(tau, oPacket); }, false, false);
|
// delegate (OutgoingPacket oPacket) { ResendPrimUpdates(tau, oPacket); }, false, false);
|
||||||
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Task, null, false, false);
|
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Task);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5373,7 +5408,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
//tau.Add(new ObjectPropertyUpdate((ISceneEntity) eu, (uint)eu.Flags, true, false));
|
//tau.Add(new ObjectPropertyUpdate((ISceneEntity) eu, (uint)eu.Flags, true, false));
|
||||||
//m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Task,
|
//m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Task,
|
||||||
// delegate (OutgoingPacket oPacket) { ResendPrimUpdates(tau, oPacket); }, false, false);
|
// delegate (OutgoingPacket oPacket) { ResendPrimUpdates(tau, oPacket); }, false, false);
|
||||||
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Task, null, false, false);
|
m_udpServer.SendUDPPacket(m_udpClient, buf, ThrottleOutPacketType.Task);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -970,7 +970,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
{
|
{
|
||||||
bool highPriority = false;
|
bool highPriority = false;
|
||||||
|
|
||||||
if(zerocode)
|
if (zerocode)
|
||||||
buffer = ZeroEncode(buffer);
|
buffer = ZeroEncode(buffer);
|
||||||
|
|
||||||
if (category != ThrottleOutPacketType.Unknown && (category & ThrottleOutPacketType.HighPriority) != 0)
|
if (category != ThrottleOutPacketType.Unknown && (category & ThrottleOutPacketType.HighPriority) != 0)
|
||||||
|
@ -989,6 +989,26 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
SendPacketFinal(outgoingPacket);
|
SendPacketFinal(outgoingPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SendUDPPacket(LLUDPClient udpClient, UDPPacketBuffer buffer, ThrottleOutPacketType category)
|
||||||
|
{
|
||||||
|
bool highPriority = false;
|
||||||
|
|
||||||
|
if (category != ThrottleOutPacketType.Unknown && (category & ThrottleOutPacketType.HighPriority) != 0)
|
||||||
|
{
|
||||||
|
category = (ThrottleOutPacketType)((int)category & 127);
|
||||||
|
highPriority = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
OutgoingPacket outgoingPacket = new OutgoingPacket(udpClient, buffer, category, null);
|
||||||
|
|
||||||
|
// If we were not provided a method for handling unacked, use the UDPServer default method
|
||||||
|
if ((outgoingPacket.Buffer.Data[0] & Helpers.MSG_RELIABLE) != 0)
|
||||||
|
outgoingPacket.UnackedMethod = delegate (OutgoingPacket oPacket) { ResendUnacked(oPacket); };
|
||||||
|
|
||||||
|
if (!outgoingPacket.Client.EnqueueOutgoing(outgoingPacket, false, highPriority))
|
||||||
|
SendPacketFinal(outgoingPacket);
|
||||||
|
}
|
||||||
|
|
||||||
static private readonly byte[] PacketAckHeader = new byte[] {
|
static private readonly byte[] PacketAckHeader = new byte[] {
|
||||||
0,
|
0,
|
||||||
0, 0, 0, 0, // sequence number
|
0, 0, 0, 0, // sequence number
|
||||||
|
@ -1018,7 +1038,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
{
|
{
|
||||||
data[10] = 255;
|
data[10] = 255;
|
||||||
buf.DataLength = pos;
|
buf.DataLength = pos;
|
||||||
SendUDPPacket(udpClient, buf, ThrottleOutPacketType.Unknown, null, false, false);
|
SendUDPPacket(udpClient, buf, ThrottleOutPacketType.Unknown);
|
||||||
|
|
||||||
buf = GetNewUDPBuffer(udpClient.RemoteEndPoint);
|
buf = GetNewUDPBuffer(udpClient.RemoteEndPoint);
|
||||||
Buffer.BlockCopy(PacketAckHeader, 0, buf.Data, 0, 10);
|
Buffer.BlockCopy(PacketAckHeader, 0, buf.Data, 0, 10);
|
||||||
|
@ -1031,7 +1051,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
{
|
{
|
||||||
data[10] = (byte)count;
|
data[10] = (byte)count;
|
||||||
buf.DataLength = pos;
|
buf.DataLength = pos;
|
||||||
SendUDPPacket(udpClient, buf, ThrottleOutPacketType.Unknown, null, false, false);
|
SendUDPPacket(udpClient, buf, ThrottleOutPacketType.Unknown);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1057,7 +1077,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
data[11] = 0;
|
data[11] = 0;
|
||||||
|
|
||||||
buf.DataLength = 12;
|
buf.DataLength = 12;
|
||||||
SendUDPPacket(udpClient, buf, ThrottleOutPacketType.Unknown, null, false, false);
|
SendUDPPacket(udpClient, buf, ThrottleOutPacketType.Unknown);
|
||||||
|
|
||||||
udpClient.m_lastStartpingTimeMS = Util.GetTimeStampMS();
|
udpClient.m_lastStartpingTimeMS = Util.GetTimeStampMS();
|
||||||
}
|
}
|
||||||
|
@ -1078,7 +1098,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
data[7] = pingID;
|
data[7] = pingID;
|
||||||
|
|
||||||
buf.DataLength = 8;
|
buf.DataLength = 8;
|
||||||
SendUDPPacket(udpClient, buf, ThrottleOutPacketType.Unknown, null, false, false);
|
SendUDPPacket(udpClient, buf, ThrottleOutPacketType.Unknown);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void HandleUnacked(LLClientView client)
|
public void HandleUnacked(LLClientView client)
|
||||||
|
|
Loading…
Reference in New Issue