internal async void Execute(IJabbRClient client, Room room) { Guard.NullParameter(client, () => client); Guard.NullParameter(room, () => room); if (!IsHandled) { return; } foreach (var response in Responses) { switch (response.ResponseType) { case MessageHandlerResultResponseType.DefaultMessage: await client.Send(response.ResponseText, room.Name); break; case MessageHandlerResultResponseType.ActionMessage: await client.Send("/me " + response.ResponseText, room.Name); break; case MessageHandlerResultResponseType.Kick: await client.Kick(response.ResponseText, room.Name); break; } } }
public void ProcessMessage(Message message, IPluginContext context, IJabbRClient client) { Guard.NullParameter(message, () => message); Guard.NullParameter(context, () => context); Guard.NullParameter(client, () => client); foreach (var messageHandler in _messageHandlers) { Log.Trace("Applying handler: {0}", messageHandler.Name); try { var result = messageHandler.Execute(message, context); result.Execute(client, context.Room); var continueProcessing = !result.IsHandled || messageHandler.ContinueProcessing; if (!continueProcessing) { Log.Trace("Terminating message processing after: {0}.", messageHandler.Name); break; } } catch (Exception ex) { Log.ErrorException("Error applying handler: " + messageHandler.Name, ex); } } }
public async Task Start() { Log.Info("Starting BawBag"); Log.Info("Connecting to '{0}' as '{1}'.", _configuration.JabbrUrl, _configuration.JabbrNick); _store.Initialize(); IndexCreation.CreateIndexes(Assembly.GetExecutingAssembly(), _store); _pluginManager = new PluginManager(); _pluginManager.Initialize(_configuration.PluginsDirectory, _store); ServicePointManager.DefaultConnectionLimit = 10; _client = new JabbRClient(_configuration.JabbrUrl) { AutoReconnect = true }; _client.MessageReceived += MessageReceived; _client.MeMessageReceived += MeMessageReceived; _client.UserJoined += UserJoined; _client.UserLeft += UserLeft; Log.Info("Starting BawBag: Connecting"); JabbR.Client.Models.LogOnInfo logOnInfo; try { logOnInfo = await _client.Connect(_configuration.JabbrNick, _configuration.JabbrPassword); } catch (Exception ex) { Log.Fatal("Failed to connect", ex); throw; } Log.Info("Starting BawBag: Connected"); foreach (var roomName in logOnInfo.Rooms.Select(r => r.Name)) { var jabbrRoom = await _client.GetRoomInfo(roomName); var room = Room.Create(jabbrRoom); _rooms[room.Name] = room; } Log.Info("Started BawBag"); foreach (var roomName in _configuration.Rooms) { if (_rooms.ContainsKey(roomName)) { continue; } await _client.JoinRoom(roomName); var jabbrRoom = await _client.GetRoomInfo(roomName); var room = Room.Create(jabbrRoom); _rooms[room.Name] = room; } }
/// <summary> /// Initializes a new instance of the <see cref="JabbRContext"/> class. /// </summary> /// <param name="jabbrClient">The jabbr client.</param> /// <param name="eventAggregator">The event aggregator.</param> /// <exception cref="System.ArgumentNullException"> /// jabbrClient /// or /// eventAggregator /// </exception> public JabbRContext(IJabbRClient jabbrClient, IEventAggregator eventAggregator, IDependencyResolver dependencyResolver) { if (jabbrClient == null) { throw new ArgumentNullException("jabbrClient"); } if (eventAggregator == null) { throw new ArgumentNullException("eventAggregator"); } if (dependencyResolver == null) { throw new ArgumentNullException("dependencyResolver"); } this.jabbrClient = jabbrClient; this.eventAggregator = eventAggregator; this.dependencyResolver = dependencyResolver; }
private static async void RunClientAsync(string server, string roomName, string userName, string password, IJabbRClient client, ManualResetEventSlim wh) { LogOnInfo info = null; try { await EnsureAccount(server, userName, password); // Connect to chat info = await client.Connect(userName, password); Console.WriteLine("Logged on successfully. You are currently in the following rooms:"); foreach (var room in info.Rooms) { Console.WriteLine(room.Name); Console.WriteLine(room.Private); } Console.WriteLine("User id is {0}. Don't share this!", info.UserId); Console.WriteLine(); // Get my user info User myInfo = await client.GetUserInfo(); Console.WriteLine(myInfo.Name); Console.WriteLine(myInfo.LastActivity); Console.WriteLine(myInfo.Status); Console.WriteLine(myInfo.Country); // Join a room called test await client.JoinRoom(roomName); // Send a client side message var message = new ClientMessage { Id = Guid.NewGuid().ToString(), Content = "Hey", Room = roomName }; // Send the message to the server and wait for the ack await client.Send(message, TimeSpan.FromSeconds(2)); // Get info about the test room Room roomInfo = await client.GetRoomInfo(roomName); Console.WriteLine("Users"); foreach (var u in roomInfo.Users) { Console.WriteLine(u.Name); } Console.WriteLine(); foreach (var u in roomInfo.Users) { if (u.Name != userName) { await client.SendPrivateMessage(u.Name, "hey there, this is private right?"); } } // Set the flag await client.SetFlag("bb"); // Set the user note await client.SetNote("This is testing a note"); // Mark the client as typing await client.SetTyping(roomName); // Clear the note await client.SetNote(null); // Say hello to the room await client.Send("Hello world", roomName); if (roomInfo.Owners.Contains(userName)) { // Post a notification (You must be room owner) //await client.PostNotification(new ClientNotification //{ // Source = "Github", // Content = "This is a fake github notification from the client", // ImageUrl = "data:image/png;base64,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", // Room = "test" //}); } Console.WriteLine("Press any key to leave the room and disconnect"); Console.Read(); await client.LeaveRoom(roomName); client.Disconnect(); } catch (Exception ex) { Console.WriteLine("Error: " + ex.GetBaseException().Message); } finally { wh.Set(); } }
public void SetupClient(Uri host) { if (_isSetup) { Console.Error.WriteLine("Client is already setup."); return; } _isSetup = true; _client = new JabbRClient(host); _client.MessageReceived += ClientOnMessageReceived; _client.PrivateMessage += ClientOnPrivateMessage; _client.UserJoined += ClientOnUserJoined; _client.UserLeft += ClientOnUserLeft; _eventBus.Pull<JabbrMessage>() .Subscribe(DoSendMessage); _adapterManager.SetupAdapters(this); }
private static async void RunClientAsync(string server, string roomName, string userName, string password, IJabbRClient client, ManualResetEventSlim wh) { LogOnInfo info = null; try { await EnsureAccount(server, userName, password); // Connect to chat info = await client.Connect(userName, password); Console.WriteLine("Logged on successfully. You are currently in the following rooms:"); foreach (var room in info.Rooms) { Console.WriteLine(room.Name); Console.WriteLine(room.Private); } Console.WriteLine("User id is {0}. Don't share this!", info.UserId); Console.WriteLine(); // Get my user info User myInfo = await client.GetUserInfo(); Console.WriteLine(myInfo.Name); Console.WriteLine(myInfo.LastActivity); Console.WriteLine(myInfo.Status); Console.WriteLine(myInfo.Country); // Join a room called test await client.JoinRoom(roomName); // Send a client side message var message = new ClientMessage { Id = Guid.NewGuid().ToString(), Content = "Hey", Room = roomName }; // Send the message to the server and wait for the ack await client.Send(message, TimeSpan.FromSeconds(2)); // Get info about the test room Room roomInfo = await client.GetRoomInfo(roomName); Console.WriteLine("Users"); foreach (var u in roomInfo.Users) { Console.WriteLine(u.Name); } Console.WriteLine(); foreach (var u in roomInfo.Users) { if (u.Name != userName) { await client.SendPrivateMessage(u.Name, "hey there, this is private right?"); } } // Set the flag await client.SetFlag("bb"); // Set the user note await client.SetNote("This is testing a note"); // Mark the client as typing await client.SetTyping(roomName); // Clear the note await client.SetNote(null); // Say hello to the room await client.Send("Hello world", roomName); if (roomInfo.Owners.Contains(userName)) { // Post a notification (You must be room owner) //await client.PostNotification(new ClientNotification //{ // Source = "Github", // Content = "This is a fake github notification from the client", // ImageUrl = "data:image/png;base64,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", // Room = "test" //}); } Console.WriteLine("Press any key to leave the room and disconnect"); Console.Read(); await client.LeaveRoom(roomName); client.Disconnect(); } catch (Exception ex) { Console.WriteLine("Error: " + ex.GetBaseException().Message); } finally { wh.Set(); } }