public object KNetDeserializeReference(byte[] data) { KNetRpcInfo res = null; using (MemoryStream ms = new MemoryStream(data)) { BinaryFormatter bf = new BinaryFormatter(); object[] refer = (object[])bf.Deserialize(ms); var kNetView = (KNetView)KlivenNet.ZeroView.KNetDeserializeReference((byte[])refer[0]); res = kNetView.Rpcs[(short)refer[1]]; } return(res); }
public static KNetRpcInfo CreateRpcInfo(short id, KNetView view, MethodInfo methodInfo) { KNetRpcInfo info = new KNetRpcInfo(); var args = methodInfo.GetParameters().OrderBy(e => e.Position); if (args.Where(e => KNetUtils.IsSerializable(e.ParameterType) == SerializableType.nonSerializable).Any()) { return(null); } info.methodInfo = methodInfo; info.Name = methodInfo.Name; info.ArgumentsInfo = args.ToArray(); info.ArgumentsTypes = new Type[info.ArgumentsInfo.Length]; info.ArgSerializationTypes = new SerializableType[info.ArgumentsInfo.Length]; for (int i = 0; i < info.ArgumentsInfo.Length; i++) { info.ArgumentsTypes[i] = info.ArgumentsInfo[i].ParameterType; info.ArgSerializationTypes[i] = KNetUtils.IsSerializable(info.ArgumentsTypes[i]); } info.Id = id; info.kNetView = view; return(info); }
public KNetRpc(KNetRpcInfo rpcInfo, params object[] arguments) { this.RpcInfo = rpcInfo; this.Arguments = arguments; this.Counts = new int[arguments.Length]; }