Advertisement
Guest User

Untitled

a guest
Jul 9th, 2017
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.33 KB | None | 0 0
  1.  public interface IMessage {
  2.         string UserName { get; set; }
  3.         string Message { get; set; }
  4.     }
  5.     class Program {
  6.         static string _userName = string.Empty;
  7.         static CIS.ServiceBus.RabbitMQ.MessageHandler<IMessage> _handler = null;
  8.         static void Main(string[] args) {
  9.             ESB.ConfigWithWCFAddress("net.tcp://localhost:8084/SubscriptionService");
  10.             RegisterTopic();
  11.             Console.WriteLine("Please enter your username: ");
  12.             _userName = Console.ReadLine().Replace(" ", "_").Replace("\r\n", "").Replace("\n", "");
  13.             RegisterUser();
  14.             Console.WriteLine("Type exit to end chat. You can start typing your message");
  15.             while (true) {
  16.                 var text = Console.ReadLine();
  17.                 if (text.ToLower() == "exit") {
  18.                     Shutdown();
  19.                     break;
  20.                 }
  21.                 else {
  22.                     SendMessage(text);
  23.                     Console.WriteLine("You: {0}\n", text);
  24.                 }
  25.             }
  26.         }
  27.         static void Shutdown() {
  28.             SendMessage("remove-user");
  29.             UnRegisterUser();
  30.             if (_handler != null) _handler.Stop();
  31.             TransportHandlers.ShutDown();
  32.         }
  33.         static void RegisterTopic() {
  34.             Event.Register<ChatTopic>();
  35.         }
  36.  
  37.         static void UnRegisterUser() {
  38.             Subscriber.Select(_userName).Delete();
  39.         }
  40.  
  41.         static void RegisterUser() {
  42.             var path = String.Format("localhost:5672;userID=guest;password=guest;queue={0}chatQueue", _userName);
  43.  
  44.             var subscriber = Subscriber.New(_userName).Durable(false)
  45.                 .SubscribeTo(Event.Select<ChatTopic>().NotEqual("UserName", _userName))
  46.                  .AddTransport("Rabbit", Transport.New<RabbitMQTransport>(
  47.                     transport => { transport.Format = TransportFormat.Json; transport.Path = path; }), "ChatTopic")
  48.                 ;
  49.             subscriber.Save();
  50.  
  51.             subscriber.OnMessageReceived<IMessage>("Rabbit", msg => HandleMessage(msg),
  52.             errorAction: h => {
  53.                 h.Continue = true;
  54.                 Console.WriteLine(h.Error.ToString());
  55.             });
  56.  
  57.             SendMessage("add-user");
  58.         }
  59.  
  60.         static void HandleMessage(IMessage msg) {
  61.             if (msg.Message == null) return;
  62.             if (msg.Message == "add-user") {
  63.                 Console.WriteLine("{0} has joined the chat room\n", msg.UserName);
  64.             }
  65.             else if (msg.Message == "remove-user") {
  66.                 Console.WriteLine("{0} has left the chat room\n", msg.UserName);
  67.             }
  68.             else if (msg.Message.Contains("start-chat|")) {
  69.                 //TODO nothing for now
  70.             }
  71.             else Console.WriteLine("{0}: {1}\n", msg.UserName, msg.Message);
  72.         }
  73.  
  74.         static void SendMessage(string message) {
  75.             Event.PublishMessage(ChatTopic.New(_userName, message));
  76.         }
  77.        
  78.         public class ChatTopic {
  79.             public string UserName { get; set; }
  80.             public string Message { get; set; }
  81.             public static ChatTopic New(string username, string message) {
  82.                 return new ChatTopic { UserName = username, Message = message };
  83.             }
  84.         }
  85.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement