Esempio n. 1
0
 //Ação quando um usuário desconecta
 public void userDisconnect(UserClient user, string text)
 {
     users.Remove(user);
     UserDisconnected(users);
     writeConsole(user.nickname + " Saiu");
     SendToAll(new Message().strMessage(null, null, JsonConvert.SerializeObject(users.ToArray()), Message.REFRESH_TYPE));
 }
 //METODO CONSTRUTOR
 public string strMessage(UserClient from, UserClient to, string message, int msgType)
 {
     this.from    = from;
     this.to      = to;
     this.message = message;
     this.msgType = msgType;
     return(getSerializedMessage());
 }
 public void disconnect(UserClient user, string reason)
 {
     if (reason != "")
     {
         MessageBox.Show("Desconectando... Razão: " + reason);
     }
     this.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(() => this.Close()));
 }
Esempio n. 4
0
 //Método de Escuta do Servidor.
 public void Listen()
 {
     while (isServerOnline)
     {
         try {
             TcpClient  client     = listener.AcceptTcpClient();
             UserClient userClient = new UserClient(client);
             userClient.MessageReceived += messageRecived;
             userClient.Disconnected    += userDisconnect;
             userClient.SendPacket(new Message().strMessage(null, null, "" + userClient.connection_id, Message.CONNECTED_TYPE));
             writeConsole(string.Format("Cliente Conectado: {0}", userClient.current_ip));
         } catch (Exception e) {
         }
     }
 }
        public void messageRecived(UserClient user, string text)
        {
            try {
                messageAssist += text;
                Message message = Message.getDeserializedMessage(messageAssist);
                switch (message.msgType)
                {
                case 0:

                    user.connection_id = message.message;
                    break;

                case 1:
                    this.serverConsole.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(() => textWithColor(this.serverConsole, message.message, message.from.color)));
                    this.serverConsole.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(() => this.serverConsole.ScrollToEnd()));
                    break;

                case 3:
                    user.kick(message.message);
                    break;

                case 4:
                    users = JsonConvert.DeserializeObject <List <UserClient> >(message.message);
                    this.lvConnectedUsers.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(() => this.lvConnectedUsers.ItemsSource = users));
                    this.lvConnectedUsers.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(() => this.lvConnectedUsers.Items.Refresh()));
                    break;

                case 5:
                    user.current_ping = user.getPong();
                    users.Find(UserClient => UserClient.connection_id == user.connection_id).current_ping = user.current_ping;
                    client.SendPacket((new Message()).strMessage(user, null, JsonConvert.SerializeObject(user), Message.REFRESH_PING_TYPE));
                    this.lvConnectedUsers.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(() => this.lvConnectedUsers.Items.Refresh()));
                    break;

                case 6:
                    UserClient userRefresh = JsonConvert.DeserializeObject <UserClient>(message.message);
                    if (userRefresh.connection_id != user.connection_id)
                    {
                        users.Find(UserClient => UserClient.connection_id == userRefresh.connection_id).current_ping = userRefresh.current_ping;
                        this.lvConnectedUsers.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(() => this.lvConnectedUsers.Items.Refresh()));
                    }
                    break;
                }

                messageAssist = "";
            } catch (Exception e) {
            }
        }
 public void Show(UserClient client, String ip, UserForm userForm)
 {
     this.client = client;
     ipAddress   = ip;
     userForm.Close();
     try
     {
         client.MessageReceived += messageRecived;
         client.Disconnected    += disconnect;
         client.connectToServer(IPAddress.Parse(ipAddress), 56863);
         pingerThread = new Thread(Ping);
         pingerThread.IsBackground = true;
         pingerThread.Start();
         txtMensagem.Focus();
         lvConnectedUsers.ItemsSource = users;
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
         btnEnviar.IsEnabled   = false;
         txtMensagem.IsEnabled = false;
     }
     this.Show();
 }
Esempio n. 7
0
        //Método disparado quando uma mensagem é recebida do usuário.
        public void messageRecived(UserClient user, string text)
        {
            //Instancia um objeto Mensagem, que irá deserializar um texto JSON em um objeto Mensagem
            Message message = Message.getDeserializedMessage(text);

            switch (message.msgType)
            {
            //Caso o Tipo da Mensagem Seja 0 ou seja Tipo Conectado irá atribuir os dados do usuário e verificará se já há um usuário com os dados dele.
            case 0:
                user.nickname = message.from.nickname;
                user.current_connection_datetime = DateTime.Now;
                user.current_ping  = 0;
                user.connection_id = Guid.NewGuid().ToString("N");
                if (users.FindAll(UserClient => UserClient.nickname.Equals(user.nickname) == true).Count > 0 || user.nickname.Equals("SERVER") || user.nickname.Equals(""))
                {
                    user.SendPacket(new Message().strMessage(null, null, "Nome já utilizado ou inválido.", Message.DISCONNECTED_TYPE));
                    user.logout();
                    writeConsole(message.from.nickname + " repetido KICKADO");
                }
                else
                {
                    users.Add(user);
                    UserConnected(users);
                    user.SendPacket(new Message().strMessage(null, null, "" + user.connection_id, Message.CONNECTED_TYPE));
                    writeConsole(message.from.nickname + " entrou");
                }

                break;

            //Caso seja um tipo de Mensagem Simples irá redistribuir a mensagem recebida para todos usuários.
            case 1:
                writeConsole(message.from.nickname + " : " + message.message);
                SendToAll(new Message().strMessage(message.from, null, message.from.nickname + " : " + message.message + "\n", Message.SIMPLE_MESSAGE_TYPE));
                break;

            //Caso seja um tipo Desconectado irá redistribuir que o usuário foi desconectado para todos usuários.
            case 3:
                user.logout();
                writeConsole(message.from.nickname + " Saiu");
                SendToAll(new Message().strMessage(null, null, JsonConvert.SerializeObject(users.ToArray()), Message.REFRESH_TYPE));
                break;

            //Caso a mensagem seja do Tipo Refresh ( Que pede a lista mais recente de usuários)
            case 4:
                SendToAll(new Message().strMessage(null, null, JsonConvert.SerializeObject(users.ToArray()), Message.REFRESH_TYPE));
                break;

            //Caso o server receba uma mensagem do tipo Ping
            case 5:
                user.SendPacket(new Message().strMessage(null, null, "pong", Message.PING_TYPE));
                break;

            //Caso receba uma requisição de PING Refresh (atualizar o ping) dispara a ação para a view
            case 6:
                try { users.Where(UserClient => user.connection_id.Equals(user.connection_id)).First().current_ping = message.from.current_ping; }
                catch  {
                }

                PingRefresh("Refresh");
                break;
            }
        }