Created
January 14, 2013 19:13
-
-
Save rpgmaker/4532489 to your computer and use it in GitHub Desktop.
Listener sample
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[ESBProxyService] | |
public interface IStarbuckService { | |
[ESBRequest(typeof(DrinkPrepared), isRequestClass: true)] | |
void SendDrinkPrepared(DrinkPrepared msg); | |
[ESBRequest(typeof(DrinkReady), isRequestClass: true)] | |
void SendDrinkReady(DrinkReady msg); | |
[ESBRequest(typeof(DrinkPayment), isRequestClass: true)] | |
void SendDrinkPayment(DrinkPayment msg); | |
[ESBRequest(typeof(DrinkPaymentMade), isRequestClass: true)] | |
void SendDrinkPaymentMade(DrinkPaymentMade msg); | |
[ESBRequest(typeof(NewDrinkOrder), isRequestClass: true)] | |
void SendNewDrinkOrder(NewDrinkOrder msg); | |
[ESBRequest(typeof(DrinkPaymentProcessed), isRequestClass: true)] | |
void SendDrinkPaymentProcessed(DrinkPaymentProcessed msg); | |
[ESBRequest(typeof(NewDrinkOrderAccepted), isRequestClass: true)] | |
void SendNewDrinkOrderAccepted(NewDrinkOrderAccepted msg); | |
[ESBRequest(typeof(PrepareDrink), isRequestClass: true)] | |
void SendPrepareDrink(PrepareDrink msg); | |
[ESBTransport(typeof(TcpTransport))] | |
[ESBTransportParam("Port", "1111")] | |
[ESBTransportParam("IPAddress", "127.0.0.1")] | |
[ESBListener(typeof(PrepareDrink))] | |
void ReceivePrepareDrink(Action<PrepareDrink> action, Func<Exception, bool> error); | |
[ESBTransport(typeof(TcpTransport))] | |
[ESBTransportParam("Port", "2222")] | |
[ESBTransportParam("IPAddress", "127.0.0.1")] | |
[ESBListener(typeof(NewDrinkOrder))] | |
void ReceiveNewDrinkOrder(Action<NewDrinkOrder> action, Func<Exception, bool> error); | |
[ESBTransport(typeof(TcpTransport))] | |
[ESBTransportParam("Port", "3333")] | |
[ESBTransportParam("IPAddress", "127.0.0.1")] | |
[ESBListener(typeof(DrinkReady))] | |
void ReceiveDrinkReady(Action<DrinkReady> action, Func<Exception, bool> error); | |
[ESBTransport(typeof(TcpTransport))] | |
[ESBTransportParam("Port", "4444")] | |
[ESBTransportParam("IPAddress", "127.0.0.1")] | |
[ESBListener(typeof(DrinkPayment))] | |
void ReceiveDrinkPayment(Action<DrinkPayment> action, Func<Exception, bool> error); | |
[ESBTransport(typeof(TcpTransport))] | |
[ESBTransportParam("Port", "5555")] | |
[ESBTransportParam("IPAddress", "127.0.0.1")] | |
[ESBListener(typeof(DrinkPaymentMade))] | |
void ReceiveDrinkPaymentMade(Action<DrinkPaymentMade> action, Func<Exception, bool> error); | |
[ESBTransport(typeof(TcpTransport))] | |
[ESBTransportParam("Port", "6666")] | |
[ESBTransportParam("IPAddress", "127.0.0.1")] | |
[ESBListener(typeof(NewDrinkOrderAccepted))] | |
void ReceiveNewDrinkOrderAccepted(Action<NewDrinkOrderAccepted> action, Func<Exception, bool> error); | |
[ESBTransport(typeof(TcpTransport))] | |
[ESBTransportParam("Port", "7777")] | |
[ESBTransportParam("IPAddress", "127.0.0.1")] | |
[ESBListener(typeof(DrinkPaymentProcessed))] | |
void ReceiveDrinkPaymentProcessed(Action<DrinkPaymentProcessed> action, Func<Exception, bool> error); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Program { | |
static Random _random = new Random(); | |
static void Main(string[] args) { | |
ProxyService.Start(); | |
var service = ProxyService.Create<IStarbuckService>(); | |
service.ReceiveDrinkPaymentProcessed(msg => { | |
service.SendDrinkReady(new DrinkReady() { CustomerName = msg.CustomerName }); | |
Console.WriteLine("Barista: {0} is served :)", msg.CustomerName); | |
}, ex => true); | |
service.ReceiveDrinkPaymentMade(msg => { | |
Console.WriteLine("Cashier: Received Payment for {0}'s Drink Order", msg.CustomerName); | |
service.SendDrinkPaymentProcessed(new DrinkPaymentProcessed() { CustomerName = msg.CustomerName }); | |
}, ex => true); | |
service.ReceiveNewDrinkOrder(msg => { | |
var customerName = msg.CustomerName; | |
var amount = (int)msg.Type * (decimal)1.0m * _random.Next(10) + 5; | |
Console.WriteLine("Cashier: Received Drink Order for {0}", msg.CustomerName); | |
service.SendPrepareDrink(new PrepareDrink() { | |
CustomerName = customerName, | |
DrinkName = msg.Name, Type = msg.Type | |
}); | |
service.SendDrinkPayment(new DrinkPayment() { | |
Amount = amount, | |
CustomerName = customerName | |
}); | |
Console.WriteLine("Cashier: Requesting Payment.."); | |
service.SendNewDrinkOrderAccepted(new NewDrinkOrderAccepted() { CustomerName = customerName }); | |
}, ex => true); | |
service.ReceivePrepareDrink(msg => { | |
Console.WriteLine("Barista: Preparing {0} drink for {1}", msg.DrinkName, msg.CustomerName); | |
service.SendDrinkPrepared(new DrinkPrepared() { | |
CustomerName = msg.CustomerName, | |
DrinkName = msg.DrinkName, | |
Type = msg.Type | |
}); | |
}, ex => true); | |
Console.WriteLine("Waiting for drink request.... Press enter to exit"); | |
Console.ReadLine(); | |
ProxyService.Shutdown(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment