Ejemplo n.º 1
0
 private void AddRoom(Channel channel)
 {
     _rooms.Add(channel);
     Rooms.Add(channel.Name);
     if (_logRooms.Contains(channel.Name, StringComparer.InvariantCultureIgnoreCase))
     {
         LogRooms.Add(channel.Name);
     }
 }
Ejemplo n.º 2
0
        public override Task Close()
        {
            CancelPreviousLogin();

            Rooms.Clear();
            LogRooms.Clear();
            _xmppConnection.OnRosterItem -= OnClientRosterItem;
            _xmppConnection.OnLogin      -= OnLogin;
            _xmppConnection.OnError      -= OnError;
            _xmppConnection.OnMessage    -= OnMessage;
            _xmppConnection.Close();
            _xmppConnection = null;

            return(Task.FromResult(1));
        }
Ejemplo n.º 3
0
        public override async Task Run()
        {
            if (!_isConfigured)
            {
                throw new AdapterNotConfiguredException();
            }
            Logger.Info(string.Format("Logging into JabbR..."));

            SetupJabbrClient();

            var result = await _client.Connect(_nick, _password);

            _client.StateChanged += OnClientStateChanged;

            Logger.Info(string.Format("Logged on successfully. {0} is currently in the following rooms:", _nick));
            foreach (var room in result.Rooms)
            {
                Logger.Info(string.Format(" - " + room.Name + (room.Private ? " (private)" : string.Empty) + (_logRooms.Contains(room.Name) ? " (logging)" : string.Empty)));
                Rooms.Add(room.Name);
                if (_logRooms.Contains(room.Name))
                {
                    LogRooms.Add(room.Name);
                }
            }

            foreach (var room in _rooms.Union(_logRooms).Distinct().Where(room => !result.Rooms.Select(r => r.Name).Contains(room)))
            {
                try
                {
                    await _client.JoinRoom(room);

                    Rooms.Add(room);
                    Logger.Info(string.Format("Successfully joined room {0}", room));
                }
                catch (Exception e)
                {
                    Logger.Info(string.Format("Could not join room {0}: {1}", room, e.Message));
                }
            }

            foreach (var logRoom in _logRooms)
            {
                if (!LogRooms.Contains(logRoom))
                {
                    LogRooms.Add(logRoom);
                }
            }
        }
Ejemplo n.º 4
0
        private void OnClientLogin(object sender)
        {
            var mucManager = new MucManager(_client);

            foreach (string room in _rooms.Union(_logRooms).Distinct())
            {
                var jid = new Jid(room + "@" + _confhost);
                mucManager.JoinRoom(jid, _roomNick);
                Rooms.Add(room);
                Logger.Info(string.Format("Joined Room '{0}'", room));
            }
            foreach (string logRoom in _logRooms)
            {
                LogRooms.Add(logRoom);
            }
        }
Ejemplo n.º 5
0
        private void OnClientLogin(object sender)
        {
            var mucManager = new MucManager(_client);

            var rooms = _api.GetAllRooms();

            foreach (var room in rooms.Items)
            {
                var roomInfo = _api.GetRoom(room.Id);

                var jid = new Jid(roomInfo.XmppJid);
                mucManager.JoinRoom(jid, _botUser.Name);
                Rooms.Add(room.Name);
                LogRooms.Add(room.Name);
                Logger.Info(string.Format("Joined Room '{0}'", room.Name));
            }
        }
Ejemplo n.º 6
0
        private async Task ConnectSocket()
        {
            for (var i = 0; i < 10 && _socket == null; i++)
            {
                var start = _api.RtmStart();
                if (!start.Ok)
                {
                    Logger.WarnFormat("Unable to start connection with Slack Adapter ({0}). Retrying", start.Error);
                    await Task.Delay(TimeSpan.FromSeconds(1));

                    continue;
                }

                // URL only valid for 30sec
                _socket = new WebSocket(start.Url);

                _botUserId = start.Self.Id;

                _users = start.Users.ToList();
                _rooms = start.Channels.ToList();
                _ims   = start.Ims.ToList();

                Rooms.Clear();
                Rooms.AddAll(start.Channels.Select(c => c.Name));

                LogRooms.Clear();
                LogRooms.AddAll(Rooms.Intersect(_logRooms, StringComparer.InvariantCultureIgnoreCase));
            }

            if (_socket == null)
            {
                Logger.Error("Unable to create socket for Slack Adapter");
                return;
            }

            _socket.Closed          += SocketOnClose;
            _socket.Error           += SocketOnError;
            _socket.MessageReceived += SocketOnMessage;

            _socket.Open();

            Logger.Info("Slack socket connected");
        }
Ejemplo n.º 7
0
        private void OnClientLogin(object sender)
        {
            var mucManager = new MucManager(_client);

            var rooms = _api.GetAllRooms();

            foreach (var room in rooms.Items.Where(r => _roomList.Count == 0 || r.Name != null && _roomList.Contains(r.Name.ToUpper())))
            {
                var roomInfo = _api.GetRoom(room.Id);

                _roomMap.Add(roomInfo.XmppJid, room.Id);

                var jid = new Jid(roomInfo.XmppJid);
                mucManager.JoinRoom(jid, _botUser.Name);
                Rooms.Add(room.Name);
                LogRooms.Add(room.Name);
                Logger.Info(string.Format("Joined Room '{0}'", room.Name));
            }
        }
Ejemplo n.º 8
0
        public override Task Run()
        {
            _loginTcs = new TaskCompletionSource <bool>();
            Task <bool> connect = _loginTcs.Task;

            if (_xmppConnection != null)
            {
                _xmppConnection.Close();
                _xmppConnection = null;
            }
            _xmppConnection = new XmppClientConnection
            {
                Server                   = _host,
                ConnectServer            = _connectHost,
                AutoResolveConnectServer = true,
                Username                 = _username,
                Password                 = _password
            };
            if (_port > 0)
            {
                _xmppConnection.Port = _port;
            }

            _xmppConnection.KeepAlive = true;

            _xmppConnection.OnLogin      += OnLogin;
            _xmppConnection.OnError      += OnError;
            _xmppConnection.OnMessage    += OnMessage;
            _xmppConnection.OnPresence   += XmppConnectionOnOnPresence;
            _xmppConnection.OnRosterItem += OnClientRosterItem;
            _xmppConnection.OnXmppConnectionStateChanged += OnXmppConnectionStateChanged;

            Task.Factory.StartNew(() =>
            {
                _xmppConnection.Open();
                Thread.Sleep(CONNECT_TIMEOUT);
                _loginTcs.TrySetResult(false);
            });

            if (!connect.Result)
            {
                throw new TimeoutException("XMPP adapter timed out while trying to login");
            }
            else
            {
                MucManager muc = new MucManager(_xmppConnection);
                foreach (var room in _rooms)
                {
                    try
                    {
                        muc.JoinRoom(string.Format("{0}@{1}", room, _confServer), _username, _password, true);
                        Logger.Info(string.Format("Successfully joined room {0}", room));
                        Rooms.Add(string.Format("{0}@{1}", room, _confServer));
                    }
                    catch (Exception ex)
                    {
                        Logger.Error("Failed to join room - " + ex.Message);
                    }
                }

                foreach (var logroom in _logRooms)
                {
                    try
                    {
                        muc.JoinRoom(string.Format("{0}@{1}", logroom, _confServer), _username, _password, true);
                        Logger.Info(string.Format("Successfully joined room {0}", logroom));
                        LogRooms.Add(string.Format("{0}@{1}", logroom, _confServer));
                    }
                    catch (Exception ex)
                    {
                        Logger.Error("Failed to join room - " + ex.Message);
                    }
                }
            }

            return(_loginTcs.Task);
        }
Ejemplo n.º 9
0
 private void RemoveRoom(Channel channel)
 {
     _rooms.Remove(channel);
     Rooms.Remove(channel.Name);
     LogRooms.Remove(channel.Name);
 }