static void Main(string[] args)
        {
            Console.WriteLine("Connectando com servidor");
            TCPListener servertcp = new TCPListener("127.0.0.1", 7171, 1024, Server_OnReceiveHandler);

            servertcp.Connect();

            UDPListener server = new UDPListener("192.168.0.100", 7172, 1024, Server_OnReceiveHandler);

            for (int i = 0; i < 10; i++)
            {
                using (ConWriter writer = new ConWriter(0))
                {
                    writer.Send("Teste envia UDP" + i);

                    server.Send(writer);
                }
            }

            string texto = "";

            while (texto != "fim")
            {
                texto = Console.ReadLine();
                ConWriter writer1 = new ConWriter(1);
                writer1.Send(texto);
                Console.WriteLine("Tamanho do buffer: " + writer1._buffer.Length);
                server.Send(writer1);
            }
        }
Exemple #2
0
        private static void Server_OnAcceptHandler(IClient client)
        {
            Player player = new Player();

            player.Id   = idPlayer;
            player.Name = "Carlos " + idPlayer;

            Console.WriteLine(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + "> " + client._socket.LocalEndPoint + " conectou");

            clientsTCP.Add(client, player);

            //Mando para o player todos os usuarios
            foreach (var p in clientsTCP)
            {
                using (ConWriter writer = new ConWriter(1))
                {
                    Console.WriteLine(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + ">  1 - Enviando " + p.Value.Id + " para " + player.Id);
                    writer.Send(p.Value.Id);
                    writer.Send(p.Value.Name);
                    writer.Send(0F);
                    writer.Send(0F);
                    writer.Send(0F);

                    writer.Send(p.Key == client);

                    client.Send(writer);
                }
            }


            //Manda todos os players  o novo player
            foreach (var p in clientsTCP)
            {
                if (p.Key != client)
                {
                    using (ConWriter writer = new ConWriter(1))
                    {
                        Console.WriteLine(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + "> 2 - Enviando " + player.Id + " para " + p.Value.Id);

                        writer.Send(player.Id);
                        writer.Send(player.Name);
                        writer.Send(player.Position.X);
                        writer.Send(player.Position.Y);
                        writer.Send(player.Position.Z);
                        writer.Send(false);

                        SendToAll(writer._buffer, new List <IClient>()
                        {
                            client
                        });
                        Console.WriteLine("Enviado ");
                    }
                }
            }

            idPlayer = idPlayer + 1;
        }
Exemple #3
0
        public void Send(ConWriter writer)
        {
            try
            {
                Console.WriteLine(writer._buffer.Length + 4);
                byte[] bufferAux = BitConverter.GetBytes(writer._buffer.Length + 4);
                Array.Resize(ref bufferAux, writer._buffer.Length + 4);
                Array.Copy(writer._buffer, 0, bufferAux, 4, writer._buffer.Length);

                _server.Send(bufferAux);
            }
            catch (Exception e)
            {
                Console.WriteLine("Fechando conexao " + e.Message);
                _server.Close();
            }
        }
        public void Send(ConWriter writer)
        {
            try
            {
                Console.WriteLine(writer._buffer.Length + 4);
                byte[] bufferAux = BitConverter.GetBytes(writer._buffer.Length + 4);
                Array.Resize(ref bufferAux, writer._buffer.Length + 4);
                Array.Copy(writer._buffer, 0, bufferAux, 4, writer._buffer.Length);

                EndPoint p = new IPEndPoint(_ipAddress, _port);
                _server.SendTo(bufferAux, SocketFlags.None, p);
            }
            catch (Exception e)
            {
                throw e;
            }
        }
Exemple #5
0
        private static void SendToAll(byte[] buffer, List <IClient> exceptions = null)
        {
            if (exceptions is null)
            {
                exceptions = new List <IClient>();
            }


            foreach (var client in clientsTCP)
            {
                if (!exceptions.Contains(client.Key))
                {
                    using (ConWriter conWriter = new ConWriter())
                    {
                        conWriter.SetBuffer(buffer);
                        client.Key.Send(conWriter);
                    }
                }
            }
        }
Exemple #6
0
        private static void Server_OnReceiveHandler(IClient client, ConReader reader)
        {
            using (ConReader t = reader)
            {
                int tag = t.GetTag();

                if (client is UDPClient && !clientsUDP.ContainsKey(client))
                {
                    Console.WriteLine("Adicionando no UDP");
                    clientsUDP.Add(client, new Player());
                }

                if (client is TCPClient)
                {
                    switch (tag)
                    {
                    case 1:

                        int    id      = t.ReadInt();
                        string nome    = t.ReadString();
                        float  x       = t.ReadFloat();
                        float  y       = t.ReadFloat();
                        float  z       = t.ReadFloat();
                        bool   isLocal = t.ReadBool();

                        foreach (var p in clientsTCP)
                        {
                            using (ConWriter conWriter = new ConWriter(1))
                            {
                                conWriter.Send(id);
                                conWriter.Send(nome);
                                conWriter.Send(x);
                                conWriter.Send(y);
                                conWriter.Send(z);
                                conWriter.Send(isLocal);
                                p.Key.Send(conWriter);
                            }
                        }

                        break;

                    case 2:
                        using (ConWriter writer = new ConWriter(2))
                        {
                            int playerId = t.ReadInt();
                            KeyValuePair <IClient, Player> player = clientsTCP.First(x1 => { Console.WriteLine(x1.Value.Id + " " + playerId); return(x1.Value.Id == playerId); });
                            player.Value.Position.X = t.ReadFloat();
                            player.Value.Position.Y = t.ReadFloat();
                            player.Value.Position.Z = t.ReadFloat();

                            writer.Send(player.Value.Id);
                            writer.Send(player.Value.Position.X);
                            writer.Send(player.Value.Position.Y);
                            writer.Send(player.Value.Position.Z);

                            Console.WriteLine("Enviando para todos mensagem de " + player.Value.Id);
                            SendToAll(writer.GetBuffer(), new List <IClient>()
                            {
                                player.Key
                            });
                        }
                        break;

                    default:
                        break;
                    }
                }
                else
                {
                    int playerId = reader.ReadInt();
                    switch (tag)
                    {
                    case 1:
                        Console.WriteLine(reader.ReadString());
                        break;
                    }
                }
            }
        }