public byte[] EncodeMessageEnvelope <T>(T messageData) { var message = new ActorMessageEnvelope() { MessageType = typeof(T).Name, MessageData = EncodeMessage(messageData), }; return(_encoder.EncodeMessage(message)); }
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); }
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); }
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)); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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))) ); }
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); }
public void NotifyOrderChanged(ActorMessageEnvelope<OrderStatusChangedNotification> notification) { this.Actor.BeginSend("client", notification); }
private void OnOrderStatusChangedNotification(ActorSender sender, ActorMessageEnvelope <OrderStatusChangedNotification> message) { _log.DebugFormat("OnOrderStatusChangedNotification, order changed, MessageID[{0}], CorrelationID[{1}].", message.MessageID, message.CorrelationID); }
public ActorMessageEnvelope <PlaceOrderResponse> PlaceOrder(ActorMessageEnvelope <PlaceOrderRequest> request) { return(this.Actor.Send <PlaceOrderRequest, PlaceOrderResponse>("server", request)); }