コード例 #1
0
ファイル: JabbrSend.cs プロジェクト: thomasvm/github-jabbr
        private Task<LogOnInfo> Connect(JabbRClient client, JabbrCommand command)
        {
            if (string.IsNullOrWhiteSpace(command.UserId))
                return client.Connect(command.Username, command.Password);

            return client.Connect(command.UserId);
        }
コード例 #2
0
ファイル: JabbrSend.cs プロジェクト: thomasvm/github-jabbr
        private void BroadCastToRooms(JabbrCommand command, Task<User> u, JabbRClient client)
        {
            var user = u.Result;

            foreach (string room in command.Rooms)
                SendMessagesToRoom(command, client, user, room);
        }
コード例 #3
0
ファイル: Bot2.cs プロジェクト: bdacode/TwitterBot
        public Bot2(string name, string password, string url)
        {
            Name = name;
            _url = url;
            _password = password;

            client = new JabbRClient(_url);
        }
コード例 #4
0
ファイル: JabbrListenerWorker.cs プロジェクト: anurse/NuBot
 public JabbrListenerWorker(LogOnInfo logOnInfo, JabbRClient client, string[] rooms, IRobot robo, string userName)
 {
     _robo = robo;
     _rooms = rooms;
     _client = client;
     _logOnInfo = logOnInfo;
     _userName = userName;
 }
コード例 #5
0
ファイル: Bot.cs プロジェクト: bdacode/TwitterBot
        private void InitializeClient()
        {
            _client = new JabbRClient(_url);

            _client.MessageReceived += (message, room) =>
            {
                ProcessMessage(message, room);
            };
        }
コード例 #6
0
 public AuthenticationService(
     JabbRClient jabbrClient,
     UserService userService,
     RoomService roomService)
 {
     _client = jabbrClient;
     _userService = userService;
     _roomService = roomService;
 }
コード例 #7
0
ファイル: JabbrSend.cs プロジェクト: thomasvm/github-jabbr
        public void Send(JabbrCommand command)
        {
            var client = new JabbRClient(command.Host);

            var connect = Connect(client, command);
            connect.ContinueWith(c =>
                                     {
                                         client.GetUserInfo()
                                             .ContinueWith(u => BroadCastToRooms(command, u, client));
                                     });
        }
コード例 #8
0
ファイル: UserService.cs プロジェクト: modulexcite/JabbR.WPF
        public UserService(ServiceLocator serviceLocator, JabbRClient client)
        {
            _serviceLocator = serviceLocator;
            _client = client;
            _users = new ConcurrentDictionary<string, UserViewModel>();

            _client.UserActivityChanged += OnUserActivityChanged;
            _client.NoteChanged += UserNoteChanged;
            _client.UsersInactive += OnUsersInactive;
            _client.GravatarChanged += OnGravatarChanged;
            _client.UsernameChanged += OnUsernameChanged;
        }
コード例 #9
0
        public MessageService(
            ServiceLocator serviceLocator,
            UserService userService,
            JabbRClient client,
            RoomService roomService)
        {
            _serviceLocator = serviceLocator;
            _userService = userService;
            _roomService = roomService;
            _client = client;

            _client.MessageReceived += OnMessageReceived;
        }
コード例 #10
0
ファイル: Bot-OLD.cs プロジェクト: bdacode/TwitterBot
        private void InitializeClient()
        {
            client = new JabbRClient(_url, new LongPollingTransport());
            client.MessageReceived += (message, room) =>
            {
                ProcessMessage(message, room);
            };

            client.UserJoined += (user, message) =>
            {

            };

        }
コード例 #11
0
ファイル: RoomService.cs プロジェクト: modulexcite/JabbR.WPF
        public RoomService(JabbRClient client, ServiceLocator serviceLocator, UserService userService)
        {
            _client = client;
            _serviceLocator = serviceLocator;
            _userService = userService;

            _client.Kicked += OnKicked;
            _client.OwnerAdded += OnOwnerAdded;
            _client.OwnerRemoved += OnOwnerRemoved;
            _client.RoomCountChanged += OnRoomCountChanged;
            _client.TopicChanged += OnTopicChanged;
            _client.UserJoined += OnUserJoined;
            _client.UserLeft += OnUserLeft;
            _client.UserTyping += OnUserTyping;
        }
コード例 #12
0
ファイル: JabbrAdapter.cs プロジェクト: DanRigby/ChatRelay
        public JabbrAdapter(ChatServer chatServerConfig)
        {
            serverConfig = chatServerConfig;
            client = new JabbRClient(serverConfig.ServerAddress)
            {
                AutoReconnect = true
            };

            Messages = Observable.FromEvent<Action<Message, string>, ChatMessage>(handler =>
            {
                Action<Message, string> converter = (jabbrMessage, room) =>
                {
                    try
                    {
                        if (client == null)
                        {
                            return;
                        }

                        // Don't relay our own messages
                        if (jabbrMessage.User.Name.Equals(serverConfig.UserName, StringComparison.OrdinalIgnoreCase))
                        {
                            return;
                        }

                        var chatMessage = new ChatMessage
                        {
                            ServerId = serverConfig.ServerId,
                            Room = room,
                            User = jabbrMessage.User.Name,
                            Text = jabbrMessage.Content,
                            TimeStamp = jabbrMessage.When
                        };

                        handler(chatMessage);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine($"{serverConfig.ServerId}|EXCEPTION: {ex}");
                    }
                };

                return converter;
            },
                converter => client.MessageReceived += converter,
                converter => client.MessageReceived -= converter
            );
        }
コード例 #13
0
ファイル: JabbrSend.cs プロジェクト: thomasvm/github-jabbr
        private void Send(JabbRClient client, string room, IList<string> messages, Action callback = null)
        {
            if (!messages.Any())
            {
                if (callback == null)
                    return;

                callback();
                return;
            }

            string message = messages[0];
            messages.RemoveAt(0);

            client.Send(message, room)
                .ContinueWith(t => Send(client, room, messages, callback));
        }
コード例 #14
0
ファイル: JabbrSend.cs プロジェクト: thomasvm/github-jabbr
        private void SendMessagesToRoom(JabbrCommand command, JabbRClient client, User user, string roomName)
        {
            client.GetRoomInfo(roomName).
                ContinueWith(r =>
                                 {
                                     Room info = r.Result;
                                     bool userInRoom = info.Users.Any(usr => usr.Name == user.Name);

                                     if (userInRoom)
                                     {
                                         Send(client,roomName, command.GetMessages());
                                         return;
                                     }

                                     Action leave = () => client.LeaveRoom(roomName);

                                     client.JoinRoom(roomName)
                                         .ContinueWith(j => Send(client, roomName, command.GetMessages(), leave));
                                 });
        }
コード例 #15
0
ファイル: JabbrListener.cs プロジェクト: anurse/NuBot
 public override async void Attach(IRobot robo, CancellationToken token)
 {
     // Connect JabbR Client
     var client = new JabbRClient(Host.AbsoluteUri);
     try
     {
         robo.Log.Trace("Connecting to JabbR");
         var logOnInfo = await client.Connect(UserName, Password);
         robo.Log.Trace("Connection Established");
         robo.Log.Info("Jabbin in JabbR");
         await new JabbrListenerWorker(logOnInfo, client, Rooms, robo, UserName).Run(token);
     }
     catch (SecurityException)
     {
         robo.Log.Error("Invalid User Name or Password");
     }
     catch (Exception ex)
     {
         robo.Log.Error(ex.Message);
     }
 }
コード例 #16
0
ファイル: JabbRServer.cs プロジェクト: neiz/JabbR.Eto
		public override void Connect ()
		{
			OnConnecting (EventArgs.Empty);

			if (string.IsNullOrEmpty (Address)) {
				OnConnectError (new ConnectionErrorEventArgs (this, new Exception ("Address is empty")));
				return;
			}
			if (UseSocialLogin) {
				if (string.IsNullOrEmpty (UserId)) {
					OnConnectError (new ConnectionErrorEventArgs (this, new NotAuthenticatedException ("Not authenticated to this server")));
					return;
				}
			} else if (string.IsNullOrEmpty (UserName) || string.IsNullOrEmpty (Password)) {
				OnConnectError (new ConnectionErrorEventArgs (this, new NotAuthenticatedException ("Username or password are not specified")));
				return;
			}

			ServicePointManager.FindServicePoint(new Uri(Address)).ConnectionLimit = 100;
			
			Client = new jab.JabbRClient (Address);//, new ServerSentEventsTransport());//new LongPollingTransport ());
			HookupEvents ();
			 
			if (UseSocialLogin) {
				connect = Client.Connect (UserId);
			} else {
				connect = Client.Connect (UserName, Password);
			}
				
			connect.ContinueWith (connectTask => {
				if (connectTask.IsFaulted) {
					Debug.WriteLine ("Error: {0}", connectTask.Exception);
					OnConnectError (new ConnectionErrorEventArgs(this, connectTask.Exception));
					return;
				}
				var logOnInfo = connectTask.Result;
				
				Client.GetUserInfo ().ContinueWith (userTask => {
					if (userTask.Exception != null) {
						OnConnectError (new ConnectionErrorEventArgs(this, connectTask.Exception));
						Client.Disconnect ();
						return;
					}
					this.CurrentUser = new JabbRUser (userTask.Result);
					
					InitializeChannels (logOnInfo.Rooms.Select (r => new JabbRRoom (this, r)));
					connect = null;
					OnConnected (EventArgs.Empty);
					
				});
			});
		}
コード例 #17
0
        public override async Task Connect()
        {
            OnConnecting(EventArgs.Empty);

            if (string.IsNullOrEmpty(Address))
            {
                OnConnectError(new ConnectionErrorEventArgs(this, new Exception("Address is empty")));
                return;
            }
            if (UseSocialLogin)
            {
                if (string.IsNullOrEmpty(UserId))
                {
                    OnConnectError(new ConnectionErrorEventArgs(this, new NotAuthenticatedException("Not authenticated to this server")));
                    return;
                }
            }
            else if (string.IsNullOrEmpty(UserName) || string.IsNullOrEmpty(Password))
            {
                OnConnectError(new ConnectionErrorEventArgs(this, new NotAuthenticatedException("Username or password are not specified")));
                return;
            }

            //ServicePointManager.FindServicePoint (new Uri (Address)).ConnectionLimit = 100;

            // force long polling on mono, until SSE works reliably
            Func <IClientTransport> transport;

            /*if (EtoEnvironment.Platform.IsMono)
             *  transport = () => new LongPollingTransport();
             * else*/
            transport = () => new AutoTransport(new DefaultHttpClient());

            Client = new jab.JabbRClient(Address, transport);
#if DEBUG
            var settings = Path.Combine(EtoEnvironment.GetFolderPath(EtoSpecialFolder.ApplicationSettings), "jabbr.log");
            Client.TraceWriter = new TextWriterTraceListener(settings).Writer;
            Client.TraceLevel  = TraceLevels.All;
#endif

            if (UseSocialLogin)
            {
                throw new NotSupportedException();
            }

            bool connected = false;
            try
            {
                var logOnInfo = await Client.Connect(UserName, Password);

                highlighRegex = null;
                connected     = true;
                HookupEvents();

                OnGlobalMessageReceived(new NotificationEventArgs(new NotificationMessage(string.Format("Using {0} transport", Client.Connection.Transport.Name))));
                var userInfo = await Client.GetUserInfo();

                CurrentUser  = new JabbRUser(this, userInfo);
                loadingRooms = logOnInfo.Rooms.Select(r => new JabbRRoom(this, r)).ToList();
                InitializeChannels(loadingRooms);

                if (EtoEnvironment.Platform.IsMono)
                {
                    var keepAliveTime = TimeSpan.FromMinutes(5);
                    if (timer != null)
                    {
                        timer.Dispose();
                    }
                    timer = new Timer(state => Client.Send(new jm.ClientMessage
                    {
                        Id      = Guid.NewGuid().ToString(),
                        Content = string.Format("/where {0}", CurrentUser.Name)
                    }), null, keepAliveTime, keepAliveTime);
                }

                OnConnected(EventArgs.Empty);
            }
            catch (Exception ex)
            {
                Debug.Print(string.Format("Error: {0}", ex.GetBaseException().Message));
                OnConnectError(new ConnectionErrorEventArgs(this, ex));
                if (connected)
                {
                    Client.Disconnect();
                }
            }

            // load all room initial channel info/history
            while (true)
            {
                JabbRRoom room;
                lock (loadingRooms)
                {
                    if (loadingRooms.Count > 0)
                    {
                        room = loadingRooms[0];
                        loadingRooms.Remove(room);
                    }
                    else
                    {
                        break;
                    }
                }
                //Debug.WriteLine(string.Format("Loading messages for room {0}", room.Name));
                await room.LoadRoomInfo();
            }
        }
コード例 #18
0
ファイル: Bot.cs プロジェクト: cptbob42/Jabbot
        private void InitializeClient()
        {
            _client = new JabbRClient(_url, new LongPollingTransport());

            _client.MessageReceived += (message, room) =>
            {
                ProcessMessage(message, room);
            };
        }
コード例 #19
0
ファイル: JabbRServer.cs プロジェクト: jschell/JabbR.Eto
        public override async Task Connect()
        {
            OnConnecting(EventArgs.Empty);

            if (string.IsNullOrEmpty(Address))
            {
                OnConnectError(new ConnectionErrorEventArgs(this, new Exception("Address is empty")));
                return;
            }
            if (UseSocialLogin)
            {
                if (string.IsNullOrEmpty(UserId))
                {
                    OnConnectError(new ConnectionErrorEventArgs(this, new NotAuthenticatedException("Not authenticated to this server")));
                    return;
                }
            }
            else if (string.IsNullOrEmpty(UserName) || string.IsNullOrEmpty(Password))
            {
                OnConnectError(new ConnectionErrorEventArgs(this, new NotAuthenticatedException("Username or password are not specified")));
                return;
            }

            //ServicePointManager.FindServicePoint (new Uri (Address)).ConnectionLimit = 100;

            // force long polling on mono, until SSE works reliably
            IClientTransport transport;
            if (EtoEnvironment.Platform.IsMono)
                transport = new LongPollingTransport();
            else
                transport = new AutoTransport(new DefaultHttpClient());

            Client = new jab.JabbRClient(Address, null, transport);

            if (UseSocialLogin)
            {
                throw new NotSupportedException();
            }

            bool connected = false;
            try
            {
                var logOnInfo = await Client.Connect(UserName, Password);
#if DEBUG
                var settings = Path.Combine(EtoEnvironment.GetFolderPath(EtoSpecialFolder.ApplicationSettings), "jabbreto.log");
                Client.Connection.TraceWriter = new TextWriterTraceListener(settings).Writer;
                Client.Connection.TraceLevel = TraceLevels.All;
#endif
                highlighRegex = null;
                connected = true;
                HookupEvents();

                this.OnGlobalMessageReceived (new NotificationEventArgs(new NotificationMessage (string.Format ("Using {0} transport", Client.Connection.Transport.Name))));
                var userInfo = await Client.GetUserInfo();
                this.CurrentUser = new JabbRUser(this, userInfo);
                loadingRooms = logOnInfo.Rooms.Select(r => new JabbRRoom(this, r)).ToList();
                InitializeChannels(loadingRooms);
                OnConnected(EventArgs.Empty);
            }
            catch (Exception ex)
            {
                Debug.Print(string.Format("Error: {0}", ex.GetBaseException().Message));
                OnConnectError(new ConnectionErrorEventArgs(this, ex));
                if (connected)
                    Client.Disconnect();
            }

            // load all room initial channel info/history
            while (true)
            {
                JabbRRoom room;
                lock (loadingRooms)
                {
                    if (loadingRooms.Count > 0)
                    {
                        room = loadingRooms[0];
                        loadingRooms.Remove(room);
                    }
                    else
                        break;
                }
                //Debug.WriteLine(string.Format("Loading messages for room {0}", room.Name));
                await room.LoadRoomInfo();
            }
        }
コード例 #20
0
        public override void Connect(FrontendManager fm, ServerModel server)
        {
            Trace.Call(fm, server);

            Server = server;
            Username = server.Username;
            var chatName = String.Format("{0} {1}", Protocol, NetworkID);
            ProtocolChat = new ProtocolChatModel(NetworkID, chatName, this);
            ProtocolChat.InitMessageBuffer(MessageBufferPersistencyType.Volatile);
            Session.AddChat(Chat);
            Session.SyncChat(Chat);

            try {
                string url;
                if (server.Hostname.StartsWith("http://") ||
                    server.Hostname.StartsWith("https://")) {
                    url = server.Hostname;
                } else {
                    if (server.UseEncryption && server.Port == 443) {
                        url = String.Format("https://{0}", server.Hostname);
                    } else if (server.UseEncryption) {
                        url = String.Format("https://{0}:{1}",
                                            server.Hostname, server.Port);
                    } else if (!server.UseEncryption && server.Port == 80) {
                        url = String.Format("http://{0}", server.Hostname);
                    } else {
                        url = String.Format("http://{0}:{1}",
                                            server.Hostname, server.Port);
                    }
                }
                // HACK: SignalR's ServerSentEventsTransport times out on Mono
                // for some reason and then fallbacks to LongPollingTransport
                // this takes 10 seconds though, so let's go LP directly
                Func<IClientTransport> transport = null;
                if (Type.GetType("Mono.Runtime") == null) {
                    transport = () => new AutoTransport(new DefaultHttpClient());
                } else {
                    transport = () => new LongPollingTransport();
                }
                var authProvider = new DefaultAuthenticationProvider(url);
                Client = new JabbRClient(url, authProvider, transport);
                Client.AutoReconnect = true;
                Client.MessageReceived += OnMessageReceived;
                Client.MeMessageReceived += OnMeMessageReceived;
                Client.UserLeft += OnUserLeft;
                Client.UserJoined += OnUserJoined;
                Client.JoinedRoom += OnJoinedRoom;
                Client.PrivateMessage += OnPrivateMessage;

                Me = CreatePerson(Username);
                Me.IdentityNameColored.ForegroundColor = new TextColor(0, 0, 255);
                Me.IdentityNameColored.BackgroundColor = TextColor.None;
                Me.IdentityNameColored.Bold = true;

                Connect();
            } catch (Exception ex) {
            #if LOG4NET
                Logger.Error(ex);
            #endif
                var msg = CreateMessageBuilder().
                    AppendEventPrefix().
                    AppendErrorText(_("Connection failed! Reason: {0}"),
                                    ex.Message).
                    ToMessage();
                Session.AddMessageToChat(ProtocolChat, msg);
            }
        }
コード例 #21
0
ファイル: JabbrService.cs プロジェクト: slodge/JabbRIsMobile
		async void Connect()
		{
			_client = new JabbRClient (this.Account.Url);
			_client.AddMessageContent += HandleAddMessageContent;
			//client.Disconnected += HandleDisconnected;
			_client.FlagChanged += HandleFlagChanged;
			_client.JoinedRoom += HandleJoinedRoom;
			_client.Kicked += HandleKicked;
			_client.LoggedOut += HandleLoggedOut;
			_client.MeMessageReceived += HandleMeMessageReceived; 
			_client.MessageReceived += HandleMessageReceived;
			_client.NoteChanged += HandleNoteChanged;
			_client.OwnerAdded += HandleOwnerAdded;
			_client.OwnerRemoved += HandleOwnerRemoved;
			_client.PrivateMessage += HandlePrivateMessage;
			_client.RoomCountChanged += HandleRoomCountChanged;
			//client.StateChanged += HandleStateChanged;
			_client.TopicChanged += HandleTopicChanged;
			_client.UserActivityChanged += HandleUserActivityChanged;
			_client.UserJoined += HandleUserJoined;
			_client.UserLeft += HandleUserLeft;
			_client.UsernameChanged += HandleUsernameChanged;
			_client.UsersInactive += HandleUsersInactive;
			_client.UserTyping += HandleUserTyping;

			LogOnInfo logonInfo = null;

			try
			{
				logonInfo = await _client.Connect (Account.Username, Account.Password);
			}
			catch (Exception ex)
			{
				Log ("Connect Exception: " + ex);
			}

			if (logonInfo != null)
			{
				this.UserId = logonInfo.UserId;

				//Add us into the result's Rooms
				foreach (var r in logonInfo.Rooms)
				{
                    Mvx.Trace("Rooms In: " + r.Name);
					RoomsIn.Add (r);
				}

				Log ("Connected> " + this.UserId ?? "" + " -> Rooms: " + RoomsIn.Count);
				_messenger.Publish (new JabbrConnectedMessage (this, this, this.UserId, RoomsIn));
			}
		}