Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public interface IMessage {
- string UserName { get; set; }
- string Message { get; set; }
- }
- class Program {
- static string _userName = string.Empty;
- static CIS.ServiceBus.RabbitMQ.MessageHandler<IMessage> _handler = null;
- static void Main(string[] args) {
- ESB.ConfigWithWCFAddress("net.tcp://localhost:8084/SubscriptionService");
- RegisterTopic();
- Console.WriteLine("Please enter your username: ");
- _userName = Console.ReadLine().Replace(" ", "_").Replace("\r\n", "").Replace("\n", "");
- RegisterUser();
- Console.WriteLine("Type exit to end chat. You can start typing your message");
- while (true) {
- var text = Console.ReadLine();
- if (text.ToLower() == "exit") {
- Shutdown();
- break;
- }
- else {
- SendMessage(text);
- Console.WriteLine("You: {0}\n", text);
- }
- }
- }
- static void Shutdown() {
- SendMessage("remove-user");
- UnRegisterUser();
- if (_handler != null) _handler.Stop();
- TransportHandlers.ShutDown();
- }
- static void RegisterTopic() {
- Event.Register<ChatTopic>();
- }
- static void UnRegisterUser() {
- Subscriber.Select(_userName).Delete();
- }
- static void RegisterUser() {
- var path = String.Format("localhost:5672;userID=guest;password=guest;queue={0}chatQueue", _userName);
- var subscriber = Subscriber.New(_userName).Durable(false)
- .SubscribeTo(Event.Select<ChatTopic>().NotEqual("UserName", _userName))
- .AddTransport("Rabbit", Transport.New<RabbitMQTransport>(
- transport => { transport.Format = TransportFormat.Json; transport.Path = path; }), "ChatTopic")
- ;
- subscriber.Save();
- subscriber.OnMessageReceived<IMessage>("Rabbit", msg => HandleMessage(msg),
- errorAction: h => {
- h.Continue = true;
- Console.WriteLine(h.Error.ToString());
- });
- SendMessage("add-user");
- }
- static void HandleMessage(IMessage msg) {
- if (msg.Message == null) return;
- if (msg.Message == "add-user") {
- Console.WriteLine("{0} has joined the chat room\n", msg.UserName);
- }
- else if (msg.Message == "remove-user") {
- Console.WriteLine("{0} has left the chat room\n", msg.UserName);
- }
- else if (msg.Message.Contains("start-chat|")) {
- //TODO nothing for now
- }
- else Console.WriteLine("{0}: {1}\n", msg.UserName, msg.Message);
- }
- static void SendMessage(string message) {
- Event.PublishMessage(ChatTopic.New(_userName, message));
- }
- public class ChatTopic {
- public string UserName { get; set; }
- public string Message { get; set; }
- public static ChatTopic New(string username, string message) {
- return new ChatTopic { UserName = username, Message = message };
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement