Skip to content

Instantly share code, notes, and snippets.

@rpgmaker
Created January 14, 2013 19:13
Show Gist options
  • Save rpgmaker/4532489 to your computer and use it in GitHub Desktop.
Save rpgmaker/4532489 to your computer and use it in GitHub Desktop.
Listener sample
[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);
}
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