private void textBlock_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
 {
     if (client.user.Connected)
     {
         client.SendPacket((new Message()).strMessage(client, null, "Logout", Message.DISCONNECTED_TYPE));
     }
     client.logout();
     this.Close();
 }
Exemplo n.º 2
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) {
         }
     }
 }
Exemplo n.º 3
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;
            }
        }