Skip to content

Commit

Permalink
Added new GenericMessage for sending EC data as binary to Naali client.
Browse files Browse the repository at this point in the history
*Added methods to EntityComponentModule to send messages to all clients.
  • Loading branch information
pallarim committed Oct 7, 2010
1 parent 67913fc commit 4b68791
Show file tree
Hide file tree
Showing 2 changed files with 102 additions and 2 deletions.
62 changes: 62 additions & 0 deletions ModularRex/RexNetwork/ClientViews/NaaliClientView.cs
Expand Up @@ -119,5 +119,67 @@ public override void SendRexObjectProperties(UUID id, RexObjectProperties x)

OutPacket(gmp, ThrottleOutPacketType.Task);
}

public void SendECData(ECData data)
{
GenericMessagePacket gmp = new GenericMessagePacket();
gmp.MethodData.Method = Utils.StringToBytes("ecsync");

byte[] ecbytedata = GetECBytes(data);
int numlines = 0;
int i = 0;

if (ecbytedata != null)
{
while (i <= ecbytedata.Length)
{
numlines++;
i += 200;
}
}

gmp.ParamList = new GenericMessagePacket.ParamListBlock[1 + numlines];
gmp.ParamList[0] = new GenericMessagePacket.ParamListBlock();
gmp.ParamList[0].Parameter = Utils.StringToBytes(data.EntityID.ToString());

for (i = 0; i < numlines; i++)
{
gmp.ParamList[i + 1] = new GenericMessagePacket.ParamListBlock();

if ((ecbytedata.Length - i * 200) < 200)
{
gmp.ParamList[i + 1].Parameter = new byte[ecbytedata.Length - i * 200];
Buffer.BlockCopy(ecbytedata, i * 200, gmp.ParamList[i + 1].Parameter, 0, ecbytedata.Length - i * 200);
}
else
{
gmp.ParamList[i + 1].Parameter = new byte[200];
Buffer.BlockCopy(ecbytedata, i * 200, gmp.ParamList[i + 1].Parameter, 0, 200);
}
}

OutPacket(gmp, ThrottleOutPacketType.Task);
}

private byte[] GetECBytes(ECData data)
{
int size =
data.ComponentType.Length + 1 +
data.ComponentName.Length + 1 +
data.Data.Length +1;

byte[] buffer = new byte[size];
int idx = 0;

Encoding.ASCII.GetBytes(data.ComponentType).CopyTo(buffer, idx);
idx += data.ComponentType.Length;

Encoding.ASCII.GetBytes(data.ComponentName).CopyTo(buffer, idx);
idx += data.ComponentName.Length;

data.Data.CopyTo(buffer, idx);

return buffer;
}
}
}
42 changes: 40 additions & 2 deletions ModularRex/RexParts/EntityComponentModule.cs
Expand Up @@ -102,6 +102,7 @@ public void AddRegion(Scene scene)
public void RemoveRegion(Scene scene)
{
m_scenes.Remove(scene);
scene.EventManager.OnClientConnect -= new EventManager.OnClientConnectCoreDelegate(RegisterGMHandler);
}

public void RegionLoaded(Scene scene)
Expand All @@ -118,13 +119,13 @@ private void RegisterGMHandler(OpenSim.Framework.Client.IClientCore client)
NaaliClientView naali;
if (client.TryGet<NaaliClientView>(out naali))
{
naali.OnBinaryGenericMessage += new OpenSim.Region.ClientStack.LindenUDP.LLClientView.BinaryGenericMessage(HandleGenericMessage);
naali.OnBinaryGenericMessage += new OpenSim.Region.ClientStack.LindenUDP.LLClientView.BinaryGenericMessage(HandleGenericBinaryMessage);
naali.AddGenericPacketHandler("ecstring", HandleEcStringGenericMessage);
naali.AddGenericPacketHandler("ecremove", HandleEcRemoveGenericMessage);
}
}

private void HandleGenericMessage(object sender, string method, byte[][] args)
private void HandleGenericBinaryMessage(object sender, string method, byte[][] args)
{
UUID entityId;
string componentName;
Expand Down Expand Up @@ -209,6 +210,43 @@ private void SaveLocal(ECData component)
m_entity_components[component.EntityID].Components[new KeyValuePair<string, string>(component.ComponentType, component.ComponentName)] = component;
}

public void SendECDataToAll(ECData component)
{
foreach (Scene scene in m_scenes)
{
scene.ForEachClient(
delegate(IClientAPI client)
{
if (client is NaaliClientView)
{
((NaaliClientView)client).SendECData(component);
}
}
);
}
}

public void SendECRemovedToAll(UUID entityId, string componentType, string componentName)
{
List<string> msgArgs = new List<string>();
msgArgs.Add(entityId.ToString());
msgArgs.Add(componentType);
msgArgs.Add(componentName);

foreach (Scene scene in m_scenes)
{
scene.ForEachClient(
delegate(IClientAPI client)
{
if (client is NaaliClientView)
{
((NaaliClientView)client).SendGenericMessage("ecremoved", msgArgs);
}
}
);
}
}

public bool SaveECData(object sender, ECData component)
{
try
Expand Down

0 comments on commit 4b68791

Please sign in to comment.