private void TestFloat(IMessageQueue q, int pos, float value) { q.WriteFloat(pos, value); Assert.AreEqual(value, q.ReadFloat(pos)); }
public void Send(IMessageQueue queue, LuaObject luaObject) { var id = (int)luaObject[LuaObject.FromString("MessageId")].AsNumber(); var message = this.registry.GetDefinition(id); var table = luaObject.AsTable(); int dynamicSize = 0; int foundProperties = 0; foreach (var property in message.Properties) { var serializer = this.luaTypeRegistry.GetSerializer(property.PropertyType); LuaObject propertyValue; if (table.TryGetValue(LuaObject.FromString(property.Name), out propertyValue)) { ++foundProperties; } dynamicSize += serializer.GetDynamicSize(queue, propertyValue); } var position = queue.Allocate(message.MinSize + dynamicSize); foreach (var keyValue in table) { var keyObject = keyValue.Key; int propertyKey = 0; if (keyObject.IsNumber) { propertyKey = (int)keyObject.AsNumber(); } else { propertyKey = Hash.Eval(keyObject.AsString()); } var property = message.GetPropertyById(propertyKey); switch (property.PropertyType) { case PropertyTypes.Int32: queue.WriteInt32(position + property.Offset, (int)keyValue.Value.AsNumber()); break; case PropertyTypes.Single: queue.WriteFloat(position + property.Offset, (float)keyValue.Value.AsNumber()); break; case PropertyTypes.String: queue.WriteInt32(position + property.Offset, message.MinSize); queue.WriteStringContent(position + message.MinSize, keyValue.Value.AsString()); break; default: throw new NotImplementedException(); } } queue.Commit(position); }