Esempio n. 1
0
        //public abstract void Handle(INetworkChannel networkChannel, object messagName, object messageData);

        public void DoHandle(INetworkChannel networkChannel, string messagName, int messageCode, object messageBody, IRpcNetworkMessageSerializer serializer)
        {
        }
Esempio n. 2
0
        public void DoHandle(INetworkChannel networkChannel, object messagName, object messageBody, IRpcNetworkMessageSerializer serializer)
        {
            //if (messageBody != null && !(messageBody is ByteString))
            //    throw new Exception("error type");

            try
            {
                byte[] byteArray = null;
                //if (messageBody != null)
                //{
                //    byteArray = (messageBody as ByteString).ToByteArray();
                //    _receiveMemoryStream.Write(byteArray, 0, byteArray.Length);
                //}

                var      methodInfo = this.GetType().GetMethod("Handle");
                object[] paramValus = new object[methodInfo.GetParameters().Length];
                paramValus[0] = networkChannel;
                paramValus[1] = messagName;
                for (int i = 2; i < methodInfo.GetParameters().Length; i++)
                {
                    byteArray = (messageBody as List <ByteString>)[i - 2].ToByteArray();
                    _receiveMemoryStream.Write(byteArray, 0, byteArray.Length);
                    _receiveMemoryStream.Position = 0;

                    var mi  = serializer.GetType().GetMethod("Deserialize");
                    var gmi = mi.MakeGenericMethod(methodInfo.GetParameters()[i].ParameterType);
                    paramValus[i] = gmi.Invoke(serializer, new object[] { _receiveMemoryStream });
                    _receiveMemoryStream.Position = 0;
                    _receiveMemoryStream.SetLength(0);
                }

                methodInfo.Invoke(this, paramValus);
            }
            catch (Exception e)
            {
                _logger.Error("Rpc Error", e);
            }

            //Handle(networkChannel, messagName, obj);
        }