Beispiel #1
0
        public ActionResult <ChatConnection> getMyConnectionId()
        {
            int?userId = ClaimHelper.GetIdFromClaimIdentity((ClaimsIdentity)this.ControllerContext.HttpContext.User.Identity);

            if (userId == null)
            {
                return(Unauthorized(new ErrorMessageModel("Utilizador não tem autorização ou não existe!")));
            }

            try
            {
                ChatDAO        chatDao = new ChatDAO(_connection);
                ChatConnection connect = chatDao.GetChatConnectionFromUserId((int)userId);

                if (connect != null)
                {
                    return(Ok(connect));
                }

                return(BadRequest(new ErrorMessageModel("Não existe connection ID!")));
            }
            catch (Exception e)
            {
                return(BadRequest(new ErrorMessageModel(e.Message)));
            }
        }
Beispiel #2
0
 public void RemoveConnection(ChatConnection chatConn)
 {
     if (ChatConnections.Contains(chatConn))
     {
         lock (_lock) ChatConnections.Remove(chatConn);
     }
 }
Beispiel #3
0
 public void AddConnection(ChatConnection conn)
 {
     if (!ChatConnections.Contains(conn))
     {
         lock (_lock) ChatConnections.Add(conn);
     }
 }
Beispiel #4
0
        public override async Task OnConnected()
        {
            var userName    = Context.User.Identity.Name;
            var connecionId = Context.ConnectionId;

            var chatConnection = new ChatConnection
            {
                UserId       = Context.User.Identity.GetUserId(),
                UserName     = userName,
                ConnectionId = connecionId,
                Connected    = true,
                ConnectedOn  = DateTime.Now,
                UserAgent    = Context.Request.Headers["User-Agent"]
            };

            var dbContext = ApplicationDbContext.Create();

            dbContext.ChatConnection.Add(chatConnection);
            await dbContext.SaveChangesAsync();


            Clients.AllExcept(connecionId).userConnected(userName, connecionId);
            //Clients.All.userConnected(userName, connecionId);
            await base.OnConnected();
        }
Beispiel #5
0
        /// <summary>
        /// Método para obter os dados da conexão,
        /// usando o id do utilizador como parametro
        /// </summary>
        /// <param name="userId">Id de utilizador</param>
        /// <returns>Retorna um objeto ChatConnection</returns>
        public ChatConnection GetChatConnectionFromUserId(int userId)
        {
            try
            {
                ChatConnection connect = null;

                using (SqlCommand cmd = _connection.Fetch().CreateCommand())
                {
                    cmd.CommandType = CommandType.Text;
                    cmd.CommandText = "SELECT * FROM dbo.[ChatConnections] " +
                                      "WHERE UserId=@id";

                    cmd.Parameters.Add("@id", SqlDbType.Int).Value = userId;

                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        if (reader.HasRows)
                        {
                            connect = new ChatConnection();
                            reader.Read();
                            connect.UserId     = reader.GetInt32(0);
                            connect.Connection = reader.GetString(1);
                        }
                    }
                }

                return(connect);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
Beispiel #6
0
        public IHttpActionResult InviteToChat(int chatId, int userId)
        {
            if (!HasValidCookie)
            {
                return(Unauthorized());
            }
            var chatConnections    = DBContext.GetChatConnectionsByUserId(CurrentUserId);
            var currentConnections = DBContext.GetChatConnectionsByUserId(userId);

            if (!chatConnections.Any(i => i.ChatId == chatId))
            {
                return(BadRequest());
            }
            if (currentConnections.Any(i => i.ChatId == chatId))
            {
                return(BadRequest());
            }

            ChatConnection chatConnection = new ChatConnection {
                ChatId = chatId, Status = ConnectionStatus.Invited, UserId = userId
            };

            chatConnection.UpdatedAt = System.DateTime.UtcNow;
            chatConnection.UpdatedBy = CurrentUserId;
            chatConnection.CreatedAt = System.DateTime.UtcNow;
            chatConnection.CreatedBy = CurrentUserId;

            return(Ok(ToJsonString(DBContext.CreateChatRequest(chatConnection))));
        }
Beispiel #7
0
        public async Task AddToGroup(string groupName)
        {
            var user = _dbcontext.UserProfile.FirstOrDefault(u => u.Email == groupName);
            var conn = _dbcontext.ChatConnection.FirstOrDefault(c => c.ConnectionOwnerId == user.Id);

            if (conn == null)
            {
                var nConn = new ChatConnection()
                {
                    ConnectionOwnerId = user.Id,
                    IsConnected       = true,
                    LastEnter         = DateTime.Now,
                    LastLeave         = null,
                    GroupId           = user.GroupId
                };
                _dbcontext.ChatConnection.Add(nConn);
            }
            else
            {
                conn.IsConnected = true;
                conn.LastEnter   = DateTime.Now;
                _dbcontext.ChatConnection.Update(conn);
            }
            _dbcontext.SaveChanges();

            await Groups.AddToGroupAsync(Context.ConnectionId, groupName);
        }
Beispiel #8
0
        private void PrivateMessageCommand(IDictionary <string, object> command)
        {
            var sender = command.Get(Constants.Arguments.Character);

            if (!CharacterManager.IsOnList(sender, ListKind.Ignored))
            {
                if (ChatModel.CurrentPms.FirstByIdOrNull(sender) == null)
                {
                    channels.AddChannel(ChannelType.PrivateMessage, sender);
                }

                channels.AddMessage(command.Get(Constants.Arguments.Message), sender, sender);

                var temp = ChatModel.CurrentPms.FirstByIdOrNull(sender);
                if (temp == null)
                {
                    return;
                }

                temp.TypingStatus = TypingStatus.Clear; // webclient assumption
            }
            else
            {
                ChatConnection.SendMessage(
                    new Dictionary <string, object>
                {
                    { Constants.Arguments.Action, Constants.Arguments.ActionNotify },
                    { Constants.Arguments.Character, sender },
                    { Constants.Arguments.Type, Constants.ClientCommands.UserIgnore }
                });
            }
        }
Beispiel #9
0
        public override IChatClient CreateConnection()
        {
            ChatConnection connection = ChatConnection.InstanceContext;

            connection.SetConnection(this);
            return((IChatClient) new ChatClientManager(connection));
        }
Beispiel #10
0
        /// <summary>
        /// Método que adciona uma mensagem a um chat com um ID específico
        /// </summary>
        /// <param name="targetConnectionId">Connection Id do utilizador destinatario do chat</param>
        /// <param name="senderConnectionId">Connection Id do utilizador remetente do chat</param>
        /// <param name="messageText">Mensagem</param>
        /// <param name="time">Data e hora da mensagem</param>
        /// <param name="targetId">Id do destinatário do chat</param>
        /// <returns> true caso seja adicionada a mensagem a DB falso caso contrario</returns>
        public bool AddMessage(string targetConnectionId, string senderConnectionId,
                               string messageText, DateTime time, int targetId)
        {
            try
            {
                ChatConnection senderConnection = GetChatConnectionFromConnectionId(senderConnectionId);

                ChatConnection targetConnection;
                int?           chatId;
                if (targetConnectionId == null)
                {
                    chatId = getChatIdWithTargetUser(senderConnection.UserId, targetId);
                }
                else
                {
                    targetConnection = GetChatConnectionFromConnectionId(targetConnectionId);
                    chatId           = getChatIdWithTargetUser(senderConnection.UserId, targetConnection.UserId);
                }

                if (chatId == null)
                {
                    throw new Exception("Nao existe chat para as duas connections dadas!");
                }

                Message message = new Message();
                message.ChatId      = (int)chatId;
                message.MessageSend = messageText;
                message.SenderId    = senderConnection.UserId;
                message.Time        = time;

                bool returnValue = false;

                if (message.MessageSend != null)
                {
                    using (SqlCommand cmd = _connection.Fetch().CreateCommand())
                    {
                        cmd.CommandType = CommandType.Text;
                        {
                            cmd.CommandText = "INSERT INTO dbo.Message(ChatId, Message, SenderId, Time) " +
                                              "VALUES(@chatId, @msg, @senderId, @time); SELECT @@Identity";

                            cmd.Parameters.Add("@chatId", SqlDbType.Int).Value    = message.ChatId;
                            cmd.Parameters.Add("@msg", SqlDbType.NVarChar).Value  = message.MessageSend;
                            cmd.Parameters.Add("@senderId", SqlDbType.Int).Value  = message.SenderId;
                            cmd.Parameters.Add("@time", SqlDbType.DateTime).Value = message.Time;
                            cmd.ExecuteScalar();
                            returnValue = true;
                        }
                    }
                }

                return(returnValue);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
Beispiel #11
0
        private void LoginCommand(IDictionary <string, object> command)
        {
            ChatModel.ClientUptime = DateTimeOffset.Now;
            ChatConnection.SendMessage(Constants.ClientCommands.SystemUptime);

            Dispatcher.Invoke(() => ChatModel.IsAuthenticated = true);

            const string nojoinName = "nojoin";

            if ((!File.Exists(nojoinName) || ApplicationSettings.SavedChannels.Count == 0) &&
                ApplicationSettings.SlimCatChannelId != null)
            {
                ApplicationSettings.SavedChannels.Add(ApplicationSettings.SlimCatChannelId);
                SettingsService.SaveApplicationSettingsToXml(ChatModel.CurrentCharacter.Name);
                File.Create(nojoinName);
            }

            // auto join
            var waitTimer  = new Timer(200);
            var channelsId =
                rejoinChannelList.Count == 0 ? ApplicationSettings.SavedChannels : rejoinChannelList;

            var channels = channelsId
                           .Where(x => !string.IsNullOrWhiteSpace(x))
                           .Distinct()
                           .Select(x => new { channel = x });

            var walk = channels.GetEnumerator();

            if (walk.MoveNext())
            {
                waitTimer.Elapsed += (s, e) =>
                {
                    Log("Auto joining " + walk.Current);
                    autoJoinedChannels.Add(walk.Current.channel);
                    ChatConnection.SendMessage(walk.Current, Constants.ClientCommands.ChannelJoin);
                    if (walk.MoveNext())
                    {
                        return;
                    }

                    waitTimer.Stop();
                    waitTimer.Dispose();
                };
            }

            var currentCharacter = ChatModel.CurrentCharacter;

            if (currentCharacter.Status != StatusType.Online ||
                !string.IsNullOrWhiteSpace(currentCharacter.StatusMessage))
            {
                Events.SendUserCommand("status",
                                       new[] { currentCharacter.Status.ToString(), currentCharacter.StatusMessage });
            }

            waitTimer.Start();
        }
Beispiel #12
0
        public ChatConnectionResponse CreateChatRequest(ChatConnection chatConnection)
        {
            using (var db = new DatabaseContext())
            {
                db.ChatConnections.Add(chatConnection);
                db.SaveChanges();
            }

            return(GetChatConnectionsResponse(chatConnection));
        }
Beispiel #13
0
        public MeChat()
        {
            Filer       = new Filer();
            MediaCenter = new MediaCenter();
            Connection  = new ChatConnection();

            this.Config       = new Config();
            FriendProfileHost = new FriendProfileHost(this);
            UserProfileHost   = new UserProfileHost(this, FriendProfileHost.FriendProfiles);
            TalkDataHost      = new TalkDataHost(this);
        }
 private void UpdateConnection(ChatConnection conn)
 {
     if (this.Dispatcher.CheckAccess())
     {
         _conn = conn;
     }
     else
     {
         this.Dispatcher.Invoke(new Action <ChatConnection>(UpdateConnection), conn);
     }
 }
Beispiel #15
0
 public void BroadcastMessage(ChatConnection cc, Message msg)
 {
     if (msg != null && String.IsNullOrEmpty(msg.Content))
     {
         foreach (ChatConnection chatConn in chatConnectionManager.ChatConnections)
         {
             if (chatConn.MemberInfo != null && chatConn != cc)
             {
                 SendMessage(msg, chatConn.Socket.Client);
             }
         }
     }
 }
Beispiel #16
0
 public ChatHub(
     IUserService userService,
     IViewRenderService renderService,
     ChatConnection chatConnection,
     IChatService chatService,
     IUnitOfWork unitOfWork
     )
 {
     _userService    = userService;
     _renderService  = renderService;
     _chatConnection = chatConnection;
     _chatService    = chatService;
     _unitOfWork     = unitOfWork;
 }
Beispiel #17
0
 private static ChatConnectionResponse GetChatConnectionsResponse(ChatConnection chatConnection)
 {
     return(new ChatConnectionResponse
     {
         ChatId = chatConnection.ChatId,
         Id = chatConnection.Id,
         UserId = chatConnection.UserId,
         Status = chatConnection.Status,
         CreatedBy = chatConnection.CreatedBy,
         CreatedAt = chatConnection.CreatedAt,
         UpdatedAt = chatConnection.UpdatedAt,
         UpdatedBy = chatConnection.UpdatedBy
     });
 }
        public void CanUpdateChatHubConnectionTest()
        {
            IEmployerDAO <Employer> EmployerDAO = new EmployerDAO(_connection);
            Employer testEmployer = new Employer();

            testEmployer.FirstName   = "Marcelo";
            testEmployer.LastName    = "Carvalho";
            testEmployer.UserName    = "******";
            testEmployer.Password    = "******";
            testEmployer.Email       = "*****@*****.**";
            testEmployer.Description = "Lorem Ipsum is simply dummy text of the printing and typesetting industry.";
            testEmployer.Address     = "Lixa";

            Employer returned = EmployerDAO.Create(testEmployer);

            IMateDAO <Mate> MateDAO  = new MateDAO(_connection);
            Mate            testMate = new Mate();

            testMate.FirstName   = "Miguel";
            testMate.LastName    = "Dev";
            testMate.UserName    = "******";
            testMate.Password    = "******";
            testMate.Email       = "*****@*****.**";
            testMate.Description = "Lorem Ipsum is simply dummy text of the printing and typesetting industry.";
            testMate.Address     = "Figueiró";
            testMate.Categories  = new[] { Categories.CLEANING, Categories.PLUMBING };
            testMate.Rank        = Ranks.SUPER_MATE;
            testMate.Range       = 20;

            Mate returnedMate = MateDAO.Create(testMate);

            ChatDAO chatDao = new ChatDAO(_connection);

            chatDao.AddChatHubConnection(returned.Id, "connection1");
            chatDao.AddChatHubConnection(returnedMate.Id, "connection2");

            chatDao.UpdateChatHubConnection(returned.Id, "connection1Replaced");
            chatDao.UpdateChatHubConnection(returnedMate.Id, "connection2Replaced");

            ChatConnection connection1 = chatDao.GetChatConnectionFromUserId(returned.Id);
            ChatConnection connection2 = chatDao.GetChatConnectionFromUserId(returnedMate.Id);

            Assert.Equal("connection1Replaced", connection1.Connection);
            Assert.Equal(returned.Id, connection1.UserId);
            Assert.Equal("connection2Replaced", connection2.Connection);
            Assert.Equal(returnedMate.Id, connection2.UserId);

            _fixture.Dispose();
        }
Beispiel #19
0
        public async void Load()
        {
            ChatConnection connection = ChatConnection.Instance;

            if (!connection.IsConnected())
            {
                await connection.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1402));
            }
            Ping4Send ping = new Ping4Send();

            ping.Version = "1.0.0";
            if (connection.Session != null)
            {
                connection.Session.Send(ping);
            }
        }
Beispiel #20
0
        static void Main(string[] args)
        {
            var user = new User(1, "Player 1");
            var chat = new Chat(user);

            Console.WriteLine(" Type quit to quit chat.");
            Console.WriteLine(" Enter text to send.");

            chat.SetMessage(Console.ReadLine());

            while (!chat.Exit)
            {
                ChatConnection.Publish(chat);
                chat.SetMessage(Console.ReadLine());
            }
        }
Beispiel #21
0
        static void Main(string[] args)
        {
            Console.WriteLine("SuperFunkChat (c) 2014 James Forshaw");
            Console.WriteLine("WARNING: Don't use this for a real chat system!!!");

            if (ParseArgs(args))
            {
                try
                {
                    ProtocolPacket packet;

                    _conn = new ChatConnection();

                    if (_socksproxy == null)
                    {
                        packet = _conn.Connect(_endpoint.Host, _endpoint.Port, _ssl, _username, _xor);
                    }
                    else
                    {
                        packet = _conn.Connect(_endpoint.Host, _endpoint.Port, _ssl,
                                               _socksproxy.Host, _socksproxy.Port, _username, _xor);
                    }

                    try
                    {
                        HandlePacket(packet);

                        Thread thread = new Thread(CommandLineThread);
                        thread.IsBackground = true;
                        thread.Start(_conn);

                        while ((packet = _conn.ReadPacket()) != null)
                        {
                            HandlePacket(packet);
                        }
                    }
                    catch
                    {
                        HandlePacket(new GoodbyeProtocolPacket("Connection Close :("));
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
Beispiel #22
0
        public ChatConnection CreateChatConnection(string remote, string port)
        {
            ChatConnection conn = new ChatConnection();

            try
            {
                conn.Connect(remote, port);
                this.chatConnections.Add(conn);
            }
            catch (SocketException ex)
            {
                Log.WriteLog(LogFile.Error, ex.ToString());
                conn = null;
            }

            return(conn);
        }
Beispiel #23
0
        static private void ProcessCommand(ChatConnection conn, string line)
        {
            string[] cmdargs = line.Split(' ');

            if (cmdargs.Length > 0)
            {
                switch (cmdargs[0].ToLower())
                {
                case "/quit":
                    Environment.Exit(0);
                    break;

                case "/list":
                    conn.WritePacket(new GetUserListProtocolPacket());
                    break;
                }
            }
        }
Beispiel #24
0
        /// <summary>
        /// Process an incoming <see cref="DataPacket"/>
        /// </summary>
        /// <param name="dp">A <see cref="DataPacket"/> received by the server</param>
        public void ProcessIncomingPacket(DataPacket dp)
        {
            if (dp.SNAC.FamilyServiceID == SNAC_CHATNAV_FAMILY)
            {
                switch (dp.SNAC.FamilySubtypeID)
                {
                case ERROR:
                    ProcessChatRoomCreationError(dp);
                    break;

                case CHATNAV_PARAMETER_REPLY:
                    ProcessChatRoomInformation(dp);
                    break;
                }
            }
            else if (dp.SNAC.FamilyServiceID == SNAC_CHATROOM_FAMILY)
            {
                ChatConnection conn = dp.ParentConnection as ChatConnection;
                if (conn != null)
                {
                    switch (dp.SNAC.FamilySubtypeID)
                    {
                    case CHATROOM_INFO_UPDATE:
                        conn.ChatRoom.ProcessRoomUpdate(dp);
                        break;

                    case CHATROOM_USER_JOINED:
                        conn.ChatRoom.ProcessUsersJoined(dp);
                        break;

                    case CHATROOM_USER_LEFT:
                        conn.ChatRoom.ProcessUsersLeft(dp);
                        break;

                    case CHATROOM_MESSAGE_RECEIVED:
                        conn.ChatRoom.ProcessIncomingMessage(dp);
                        break;
                    }
                }
            }
        }
Beispiel #25
0
        static private void CommandLineThread(object o)
        {
            ChatConnection conn = (ChatConnection)o;
            string         line;

            while ((line = Console.ReadLine()) != null)
            {
                line = line.Trim();
                if (line.Length > 0)
                {
                    if (line[0] == '/')
                    {
                        ProcessCommand(conn, line);
                    }
                    else
                    {
                        conn.SendMessage(_username, line);
                    }
                }
            }
        }
        private void ReadThread(object o)
        {
            ChatConnection conn = (ChatConnection)o;

            while (true)
            {
                if (conn != null)
                {
                    try
                    {
                        while (true)
                        {
                            HandlePacket(conn.ReadPacket());
                        }
                    }
                    catch
                    {
                        conn = null;
                        UpdateConnection(null);
                        HandlePacket(new GoodbyeProtocolPacket("Connection Closed :("));
                    }
                }


                Thread.Sleep(1000);
                try
                {
                    conn = DoConnect(_config);
                    UpdateConnection(conn);
                }
                catch (ThreadAbortException)
                {
                    throw;
                }
                catch
                {
                }
            }
        }
        /// <summary>
        /// Add connection result to session
        /// </summary>
        /// <param name="session">Session</param>
        /// <param name="chatConnectionResultEnum">Result</param>
        /// <param name="externalId">ChatRoulette id</param>
        /// <returns>Chat connection object</returns>
        /// <exception cref="EntityFrameworkException"></exception>
        public async Task <ChatConnection> AddResultAsync(ChatSession session,
                                                          ChatConnectionResultEnum chatConnectionResultEnum, string externalId)
        {
            try
            {
                var result = new ChatConnection
                {
                    DateCreated = DateTime.Now,
                    Result      = chatConnectionResultEnum,
                    Session     = session,
                    ExternalId  = externalId
                };
                session.ChatConnections.Add(result);
                await this.SaveChangesAsync();

                return(result);
            }
            catch (Exception ex)
            {
                throw new EntityFrameworkException(ex);
            }
        }
        private void SendSearchEvent(object obj)
        {
            var toSend = new Dictionary <string, IList <string> > {
                ["kinks"] = new List <string>()
            };

            selectedSearchTerms.Each(term =>
            {
                if (!toSend.ContainsKey(term.Category))
                {
                    toSend[term.Category] = new List <string>();
                }

                toSend[term.Category].Add(term.UnderlyingValue ?? term.DisplayName);
            });

            ChatConnection.SendMessage(toSend, "FKS");

            isInSearchCoolDown = true;
            chatSearchCooldownTimer.Start();
            OnPropertyChanged("CanStartSearch");
        }
        private ChatConnection DoConnect(ClientConfiguration config)
        {
            ChatConnection conn = null;

            _userName = config.Username;

            try
            {
                ProtocolPacket firstPacket;
                conn = new ChatConnection();

                if (config.SocksEnabled)
                {
                    firstPacket = conn.Connect(config.Host, config.Port,
                                               config.EnableSsl, config.SocksHost,
                                               config.SocksPort, _userName, config.SupportsSecurityUpgrade);
                }
                else
                {
                    firstPacket = conn.Connect(config.Host, config.Port,
                                               config.EnableSsl, _userName, config.SupportsSecurityUpgrade);
                }

                HandlePacket(firstPacket);
            }
            catch (Exception ex)
            {
                MessageBox.Show(this, ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                if (conn != null)
                {
                    conn.Dispose();
                    conn = null;
                }
            }

            return(conn);
        }
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            string[] args = Environment.GetCommandLineArgs();

            if (args.Length > 1)
            {
                _config = LoadConfigurationFromFile(args[1]);
                if (_config != null)
                {
                    _conn = DoConnect(_config);
                }
            }
            else
            {
                while (_conn == null)
                {
                    _config = LoadConfigurationFromSettings();
                    if (_config == null)
                    {
                        break;
                    }

                    _conn = DoConnect(_config);
                }
            }

            if (_conn != null)
            {
                Thread th = new Thread(ReadThread);
                th.IsBackground = true;
                th.Start(_conn);
            }
            else
            {
                Close();
            }
        }