예제 #1
0
        /// <summary>
        /// 反转到具体的方法上
        /// </summary>
        /// <param name="IUserToken"></param>
        /// <param name="msg"></param>
        /// <returns></returns>
        public static byte[] Reversal(IUserToken IUserToken, RSocketMsg msg)
        {
            byte[] result = null;

            object[] inputs = null;

            if (msg.Data != null)
            {
                var serviceInfo = RPCMapping.Get(msg.ServiceName, msg.MethodName);

                if (serviceInfo == null)
                {
                    throw new RPCNotFundException($"找不到服务:{msg.ServiceName}/{msg.MethodName}");
                }

                var ptypes = serviceInfo.Pamars.Values.ToArray();

                inputs = SAEASerialize.Deserialize(ptypes, msg.Data);
            }

            var r = Reversal(IUserToken, msg.ServiceName, msg.MethodName, inputs);

            if (r != null)
            {
                return(SAEASerialize.Serialize(r));
            }
            return(result);
        }
예제 #2
0
        void ReplyData(byte[] data)
        {
            var dt = SAEASerialize.Deserialize <DataInfo>(data);

            OnReceive?.Invoke(dt);

            var userIDs = _storage.GetChannelUsers(dt.ChannelID);

            Parallel.ForEach(userIDs, (id) =>
            {
                BaseReply(id, ProtocalType.Data, dt.Data);
            });
        }
예제 #3
0
        /// <summary>
        /// 调用远程RPC
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="serviceName"></param>
        /// <param name="method"></param>
        /// <param name="args"></param>
        /// <returns></returns>
        public T RemoteCall <T>(string serviceName, string method, params object[] args)
        {
            T t = default(T);

            byte[] abytes = null;

            if (args != null)
            {
                abytes = SAEASerialize.Serialize(args);
            }

            var data = _consumerMultiplexer.Request(serviceName, method, abytes, _retry);

            if (data != null)
            {
                t = SAEASerialize.Deserialize <T>(data);
            }
            return(t);
        }
예제 #4
0
        protected void OnReceived(byte[] data)
        {
            ((RCoder)_RContext.Unpacker).Unpack(data, msg =>
            {
                switch ((RSocketMsgType)msg.Type)
                {
                case RSocketMsgType.Ping:
                    break;

                case RSocketMsgType.Pong:

                    break;

                case RSocketMsgType.Request:
                    break;

                case RSocketMsgType.Response:
                    _syncHelper.Set(msg.SequenceNumber, msg.Data);
                    break;

                case RSocketMsgType.Notice:
                    OnNoticed.Invoke(msg.Data);
                    break;

                case RSocketMsgType.Error:
                    ExceptionCollector.Add("Consumer.OnReceived Error", new Exception(SAEASerialize.Deserialize <string>(msg.Data)));
                    _syncHelper.Set(msg.SequenceNumber, msg.Data);
                    break;

                case RSocketMsgType.Close:
                    break;
                }
            });
        }
예제 #5
0
파일: RClient.cs 프로젝트: yswenli/SAEA
        protected void OnReceived(byte[] data)
        {
            try
            {
                _rUnpacker.Unpack(data, msg =>
                {
                    switch ((RSocketMsgType)msg.Type)
                    {
                    case RSocketMsgType.Ping:
                        break;

                    case RSocketMsgType.Pong:

                        break;

                    case RSocketMsgType.Request:
                        break;

                    case RSocketMsgType.Response:
                        _disorderSyncHelper.Set(msg.SequenceNumber, msg.Data);
                        break;

                    case RSocketMsgType.Notice:
                        OnNoticed.Invoke(msg.Data);
                        break;

                    case RSocketMsgType.Error:
                        ExceptionCollector.Add("Consumer.OnReceived Error", new Exception(SAEASerialize.Deserialize <string>(msg.Data)));
                        _disorderSyncHelper.Set(msg.SequenceNumber, msg.Data);
                        break;

                    case RSocketMsgType.Close:
                        break;
                    }
                });
            }
            catch (Exception ex)
            {
                OnError?.Invoke(_client.Endpoint.ToString(), ex);
            }
        }
예제 #6
0
 private static void RpcServiceProxy_OnNoticed(byte[] serializeData)
 {
     ConsoleHelper.WriteLine($"RPCServiceProxy 收到服务推送的消息: {SAEASerialize.Deserialize<string>(serializeData)}");
 }
예제 #7
0
        static void SerializeTest()
        {
            var groupInfo = new GroupInfo()
            {
                GroupID     = 1,
                IsTemporary = false,
                Name        = "yswenli group",
                Created     = DateTimeHelper.Now,
                Creator     = new UserInfo()
                {
                    ID       = 1,
                    Birthday = DateTimeHelper.Now.AddYears(-100),
                    UserName = "******"
                },
                Users = new System.Collections.Generic.List <UserInfo>()
                {
                    new UserInfo()
                    {
                        ID       = 1,
                        Birthday = DateTimeHelper.Now.AddYears(-100),
                        UserName = "******"
                    }
                }
            };

            var count = 100000;
            var len1  = 0;
            var len2  = 0;

            Stopwatch sw = new Stopwatch();

            sw.Start();

            List <byte[]> list = new List <byte[]>();

            for (int i = 0; i < count; i++)
            {
                var bytes = SerializeBinary(groupInfo);
                len1 = bytes.Length;
                list.Add(bytes);
            }
            ConsoleHelper.WriteLine($"BinaryFormatter实体序列化平均:{count * 1000 / sw.ElapsedMilliseconds} 次/秒");

            sw.Restart();
            for (int i = 0; i < count; i++)
            {
                var obj = DeSerializeBinary(list[i]);
            }
            ConsoleHelper.WriteLine($"BinaryFormatter实体反序列化平均:{count * 1000 / sw.ElapsedMilliseconds} 次/秒");
            ConsoleHelper.WriteLine($"BinaryFormatter序列化生成bytes大小:{len1 * count * 1.0 / 1024 / 1024} Mb");
            list.Clear();
            sw.Restart();

            for (int i = 0; i < count; i++)
            {
                var bytes = SAEASerialize.Serialize(groupInfo);
                len2 = bytes.Length;
                list.Add(bytes);
            }
            ConsoleHelper.WriteLine($"ParamsSerializeUtil实体序列化平均:{count * 1000 / sw.ElapsedMilliseconds} 次/秒");
            sw.Restart();
            for (int i = 0; i < count; i++)
            {
                var obj = SAEASerialize.Deserialize <GroupInfo>(list[i]);
            }
            ConsoleHelper.WriteLine($"ParamsSerializeUtil实体反序列化平均:{count * 1000 / sw.ElapsedMilliseconds} 次/秒");
            ConsoleHelper.WriteLine($"ParamsSerializeUtil序列化生成bytes大小:{len2 * count * 1.0 / 1024 / 1024} Mb");
            sw.Stop();
        }