コード例 #1
0
        public byte[] EncodeMessageEnvelope <T>(T messageData)
        {
            var message = new ActorMessageEnvelope()
            {
                MessageType = typeof(T).Name,
                MessageData = EncodeMessage(messageData),
            };

            return(_encoder.EncodeMessage(message));
        }
コード例 #2
0
        private void OnAddRequest(ActorSender sender, ActorMessageEnvelope <AddRequest> request)
        {
            var response = new ActorMessageEnvelope <AddResponse>()
            {
                CorrelationID   = request.MessageID,
                CorrelationTime = request.MessageTime,
                Message         = Add(request.Message),
            };

            this.BeginReply(sender.ChannelIdentifier, response);
        }
コード例 #3
0
ファイル: CalcClient.cs プロジェクト: wenshizhizi/Redola
        public int Add(int x, int y)
        {
            var request = new ActorMessageEnvelope <AddRequest>()
            {
                Message = new AddRequest()
                {
                    X = x, Y = y
                },
            };

            return(this.Actor.Send <AddRequest, AddResponse>("server", request).Message.Result);
        }
コード例 #4
0
        public ActorMessageEnvelope <Hello10000Response> SayHello10000()
        {
            var request = new ActorMessageEnvelope <Hello10000Request>()
            {
                Message = new Hello10000Request()
                {
                    Text = DateTime.Now.ToString(@"yyyy-MM-dd HH:mm:ss.fffffff")
                },
            };

            return(this.Actor.Send <Hello10000Request, Hello10000Response>("server", request));
        }
コード例 #5
0
ファイル: CalcService.cs プロジェクト: wenshizhizi/Redola
        private void OnAddRequest(ActorIdentity remoteActor, ActorMessageEnvelope <AddRequest> request)
        {
            var response = new ActorMessageEnvelope <AddResponse>()
            {
                CorrelationID   = request.MessageID,
                CorrelationTime = request.MessageTime,
                Message         = new AddResponse()
                {
                    Result = request.Message.X + request.Message.Y
                },
            };

            this.Actor.BeginSend(remoteActor, response);
        }
コード例 #6
0
        private void OnHello10000Request(ActorIdentity remoteActor, ActorMessageEnvelope <Hello10000Request> request)
        {
            var response = new ActorMessageEnvelope <Hello10000Response>()
            {
                CorrelationID   = request.MessageID,
                CorrelationTime = request.MessageTime,
                Message         = new Hello10000Response()
                {
                    Text = DateTime.Now.ToString(@"yyyy-MM-dd HH:mm:ss.fffffff")
                },
            };

            this.Actor.BeginSend(remoteActor, response);
        }
コード例 #7
0
ファイル: Program.cs プロジェクト: anbgsl1110/Redola
        private static void NotifyOrderChanged(OrderService orderService)
        {
            var notification = new ActorMessageEnvelope <OrderStatusChangedNotification>()
            {
                Message = new OrderStatusChangedNotification()
                {
                    OrderID     = Guid.NewGuid().ToString(),
                    OrderStatus = 1,
                },
            };

            _log.DebugFormat("NotifyOrderChanged, notify order changed with MessageID[{0}].", notification.MessageID);
            orderService.NotifyOrderChanged(notification);
        }
コード例 #8
0
        private void OnOrderDeliveredNotification(ActorSender sender, ActorMessageEnvelope <OrderDeliveredNotification> request)
        {
            _log.DebugFormat("OnOrderDeliveredNotification, MessageID[{0}], CorrelationID[{1}].",
                             request.MessageID, request.CorrelationID);

            var response = new ActorMessageEnvelope <OrderDeliveredConfirmation>()
            {
                CorrelationID   = request.MessageID,
                CorrelationTime = request.MessageTime,
                Message         = OrderDelivered(request.Message),
            };

            this.BeginReply(sender.ChannelIdentifier, response);
        }
コード例 #9
0
        private void OnHelloRequest(ActorIdentity remoteActor, ActorMessageEnvelope <HelloRequest> request)
        {
            var response = new ActorMessageEnvelope <HelloResponse>()
            {
                CorrelationID   = request.MessageID,
                CorrelationTime = request.MessageTime,
                Message         = new HelloResponse()
                {
                    Text = DateTime.Now.ToString(@"yyyy-MM-dd HH:mm:ss.fffffff")
                },
            };

            _log.DebugFormat("OnHelloRequest, say hello, MessageID[{0}], CorrelationID[{1}].",
                             response.MessageID, response.CorrelationID);
            this.Actor.BeginSend(remoteActor, response);
        }
コード例 #10
0
ファイル: OrderService.cs プロジェクト: wenshizhizi/Redola
        private void OnPlaceOrderRequest(ActorIdentity remoteActor, ActorMessageEnvelope<PlaceOrderRequest> request)
        {
            var response = new ActorMessageEnvelope<PlaceOrderResponse>()
            {
                CorrelationID = request.MessageID,
                CorrelationTime = request.MessageTime,
                Message = new PlaceOrderResponse()
                {
                    Contract = request.Message.Contract,
                    Order = request.Message.Contract,
                    ErrorCode = PlaceOrderErrorCode.OrderPlaced,
                },
            };

            _log.DebugFormat("OnPlaceOrderRequest, place order, MessageID[{0}], CorrelationID[{1}].",
                response.MessageID, response.CorrelationID);
            this.Actor.BeginSend(remoteActor, response);
        }
コード例 #11
0
        private static void Hello(ILog log, HelloClient helloClient)
        {
            var request = new ActorMessageEnvelope <HelloRequest>()
            {
                Message = new HelloRequest()
                {
                    Text = DateTime.Now.ToString(@"yyyy-MM-dd HH:mm:ss.fffffff")
                },
            };

            log.DebugFormat("Hello, say hello to server with MessageID[{0}].",
                            request.MessageID);

            var response = helloClient.SayHello(request);

            log.DebugFormat("Hello, receive hello response from server with MessageID[{0}] and CorrelationID[{1}].",
                            response.MessageID, response.CorrelationID);
        }
コード例 #12
0
        private static void Hello10000(ILog log, HelloClient helloClient)
        {
            log.DebugFormat("Hello10000, start ...");
            var watch = Stopwatch.StartNew();

            for (var i = 0; i < 10000; i++)
            {
                var request = new ActorMessageEnvelope <Hello10000Request>()
                {
                    Message = new Hello10000Request()
                    {
                        Text = DateTime.Now.ToString(@"yyyy-MM-dd HH:mm:ss.fffffff")
                    },
                };
                helloClient.SayHello10000(request);
            }
            watch.Stop();
            log.DebugFormat("Hello10000, end with cost {0} ms.", watch.ElapsedMilliseconds);
        }
コード例 #13
0
        private static void Hello10000MultiThreading(ILog log, HelloClient helloClient, int totalCalls, int threadCount)
        {
            log.DebugFormat("Hello10000MultiThreading, TotalCalls[{0}], ThreadCount[{1}], start ...", totalCalls, threadCount);

            var taskList = new Task[threadCount];
            var watch    = Stopwatch.StartNew();

            for (int i = 0; i < threadCount; i++)
            {
                var task = Task.Factory.StartNew(() =>
                {
                    for (var j = 0; j < totalCalls / threadCount; j++)
                    {
                        var request = new ActorMessageEnvelope <Hello10000Request>()
                        {
                            Message = new Hello10000Request()
                            {
                                Text = DateTime.Now.ToString(@"yyyy-MM-dd HH:mm:ss.fffffff")
                            },
                        };
                        helloClient.SayHello10000(request);
                    }
                },
                                                 TaskCreationOptions.PreferFairness);
                taskList[i] = task;
            }
            Task.WaitAll(taskList);
            watch.Stop();

            log.DebugFormat("Hello10000MultiThreading, TotalCalls[{0}], ThreadCount[{1}] end with cost [{2}] ms."
                            + "{3}{4}{5}{6}{7}{8}{9}{10}{11}{12}",
                            totalCalls, threadCount, watch.ElapsedMilliseconds,
                            Environment.NewLine, string.Format("   Concurrency level: {0} threads", threadCount),
                            Environment.NewLine, string.Format("   Complete requests: {0}", totalCalls),
                            Environment.NewLine, string.Format("Time taken for tests: {0} seconds", (decimal)watch.ElapsedMilliseconds / 1000m),
                            Environment.NewLine, string.Format("    Time per request: {0:#####0.000} ms (avg)", (decimal)watch.ElapsedMilliseconds / (decimal)totalCalls),
                            Environment.NewLine, string.Format(" Requests per second: {0} [#/sec] (avg)", (int)((decimal)totalCalls / ((decimal)watch.ElapsedMilliseconds / 1000m)))
                            );
        }
コード例 #14
0
        private static void PlaceOrder(ILog log, OrderClient orderClient)
        {
            var request = new ActorMessageEnvelope <PlaceOrderRequest>()
            {
                Message = new PlaceOrderRequest()
                {
                    Contract = new Order()
                    {
                        OrderID  = Guid.NewGuid().ToString(),
                        ItemID   = "Apple",
                        BuyCount = 100,
                    },
                },
            };

            log.DebugFormat("PlaceOrder, send place order request to server with MessageID[{0}].",
                            request.MessageID);

            var response = orderClient.PlaceOrder(request);

            log.DebugFormat("PlaceOrder, receive place order response from server with MessageID[{0}] and CorrelationID[{1}].",
                            response.MessageID, response.CorrelationID);
        }
コード例 #15
0
ファイル: OrderService.cs プロジェクト: wenshizhizi/Redola
 public void NotifyOrderChanged(ActorMessageEnvelope<OrderStatusChangedNotification> notification)
 {
     this.Actor.BeginSend("client", notification);
 }
コード例 #16
0
ファイル: OrderClient.cs プロジェクト: hhq365/Redola
 private void OnOrderStatusChangedNotification(ActorSender sender, ActorMessageEnvelope <OrderStatusChangedNotification> message)
 {
     _log.DebugFormat("OnOrderStatusChangedNotification, order changed, MessageID[{0}], CorrelationID[{1}].",
                      message.MessageID, message.CorrelationID);
 }
コード例 #17
0
 public ActorMessageEnvelope <PlaceOrderResponse> PlaceOrder(ActorMessageEnvelope <PlaceOrderRequest> request)
 {
     return(this.Actor.Send <PlaceOrderRequest, PlaceOrderResponse>("server", request));
 }