提交 0f752a9b 编写于 作者: T tanghai

修改了mongo中IOS不支持的部分,可以用mongdb序列化消息了

上级 4bf7bfac
......@@ -24,14 +24,14 @@
public void Awake()
{
this.Awake(NetworkProtocol.TCP);
this.MessagePacker = new JsondotnetPacker();
this.MessagePacker = new MongoPacker();
this.MessageDispatcher = new OuterMessageDispatcher();
}
public void Awake(string host, int port)
{
this.Awake(NetworkProtocol.TCP, host, port);
this.MessagePacker = new JsondotnetPacker();
this.MessagePacker = new MongoPacker();
this.MessageDispatcher = new OuterMessageDispatcher();
}
......
......@@ -16,7 +16,7 @@
using System;
using System.Linq.Expressions;
using System.Reflection;
using System.Reflection.Emit;
//using System.Reflection.Emit;
using MongoDB.Bson.Serialization.Serializers;
namespace MongoDB.Bson.Serialization
......@@ -580,18 +580,20 @@ namespace MongoDB.Bson.Serialization
throw new BsonSerializationException(message);
}
var sourceType = fieldInfo.DeclaringType;
var method = new DynamicMethod("Set" + fieldInfo.Name, null, new[] { typeof(object), typeof(object) }, true);
var gen = method.GetILGenerator();
gen.Emit(OpCodes.Ldarg_0);
gen.Emit(OpCodes.Castclass, sourceType);
gen.Emit(OpCodes.Ldarg_1);
gen.Emit(OpCodes.Unbox_Any, fieldInfo.FieldType);
gen.Emit(OpCodes.Stfld, fieldInfo);
gen.Emit(OpCodes.Ret);
return (Action<object, object>)method.CreateDelegate(typeof(Action<object, object>));
// ios上不支持Emit
//var sourceType = fieldInfo.DeclaringType;
//var method = new DynamicMethod("Set" + fieldInfo.Name, null, new[] { typeof(object), typeof(object) }, true);
//var gen = method.GetILGenerator();
//
//gen.Emit(OpCodes.Ldarg_0);
//gen.Emit(OpCodes.Castclass, sourceType);
//gen.Emit(OpCodes.Ldarg_1);
//gen.Emit(OpCodes.Unbox_Any, fieldInfo.FieldType);
//gen.Emit(OpCodes.Stfld, fieldInfo);
//gen.Emit(OpCodes.Ret);
//
//return (Action<object, object>)method.CreateDelegate(typeof(Action<object, object>));
return (obj, value) => { fieldInfo.SetValue(obj, value); };
}
private Func<object, object> GetGetter()
......
......@@ -19,14 +19,14 @@
public void Awake()
{
this.Awake(NetworkProtocol.TCP);
this.MessagePacker = new JsondotnetPacker();
this.MessagePacker = new MongoPacker();
this.MessageDispatcher = new ClientDispatcher();
}
public void Awake(string host, int port)
{
this.Awake(NetworkProtocol.TCP, host, port);
this.MessagePacker = new JsondotnetPacker();
this.MessagePacker = new MongoPacker();
this.MessageDispatcher = new ClientDispatcher();
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册