private void atenderClienteDesconectado(TgcSocketClientInfo clientInfo)
        {
            //Enviar info de desconexion a todos los clientes
            var msg = new TgcSocketSendMsg();

            msg.write(MyServerProtocol.OtroClienteDesconectado);
            msg.write(clientInfo.PlayerId);
            networkingMod.Server.sendToClient(clientInfo.PlayerId, msg);

            //Extender para permitir que se conecten nuevos ususarios
        }
        /// <summary>
        ///     Avisar a todos los demás clientes sobre la nueva posicion de este cliente
        /// </summary>
        private void serverAtenderPosicionActualizada(TgcSocketClientRecvMesg clientMsg)
        {
            //Nueva posicion del cliente
            var newPos = (Matrix)clientMsg.Msg.readNext();

            //Enviar a todos menos al cliente que nos acaba de informar
            var sendMsg = new TgcSocketSendMsg();

            sendMsg.write(MyServerProtocol.ActualizarUbicaciones);
            sendMsg.write(clientMsg.PlayerId);
            sendMsg.write(newPos);
            networkingMod.Server.sendToAllExceptOne(clientMsg.PlayerId, sendMsg);
        }
示例#3
0
        /// <summary>
        /// Actualizar lógicad el cliente
        /// </summary>
        private void updateClient()
        {
            //Analizar los mensajes recibidos
            for (int i = 0; i < networkingMod.Client.ReceivedMessagesCount; i++)
            {
                //El primer mensaje es el header de nuestro protocolo del ejemplo
                TgcSocketRecvMsg msg     = networkingMod.Client.nextReceivedMessage();
                MyServerProtocol msgType = (MyServerProtocol)msg.readNext();

                //Ver que tipo de mensaje es
                switch (msgType)
                {
                case MyServerProtocol.InformacionInicial:
                    clienteAtenderInformacionInicial(msg);
                    break;

                case MyServerProtocol.OtroClienteConectado:
                    clienteAtenderOtroClienteConectado(msg);
                    break;

                case MyServerProtocol.ActualizarUbicaciones:
                    clienteAtenderActualizarUbicaciones(msg);
                    break;

                case MyServerProtocol.OtroClienteDesconectado:
                    clienteAtenderOtroClienteDesconectado(msg);
                    break;
                }
            }


            if (meshPrincipal != null)
            {
                //Renderizar todo
                renderClient();

                //Enviar al server mensaje con posicion actualizada, 10 paquetes por segundo
                acumulatedTime += GuiController.Instance.ElapsedTime;
                if (acumulatedTime > 0.1)
                {
                    acumulatedTime = 0;

                    //Enviar posicion al server
                    TgcSocketSendMsg msg = new TgcSocketSendMsg();
                    msg.write(MyClientProtocol.PosicionActualizada);
                    msg.write(meshPrincipal.Transform);
                    networkingMod.Client.send(msg);
                }
            }
        }
示例#4
0
        public override void render(float elapsedTime)
        {
            Device d3dDevice = GuiController.Instance.D3dDevice;

            //Actualizar siempre primero todos los valores de red.
            //Esto hace que el cliente y el servidor reciban todos los mensajes y actualicen su es
            networkingMod.updateNetwork();

            //Si el server está online, analizar sus mensajes
            if (networkingMod.Server.Online)
            {
                //Analizar los mensajes recibidos
                for (int i = 0; i < networkingMod.Server.ReceivedMessagesCount; i++)
                {
                    //Leer el siguiente mensaje, cada vez que llamamos a nextReceivedMessage() consumimos un mensaje pendiente.
                    TgcSocketClientRecvMesg msg = networkingMod.Server.nextReceivedMessage();

                    //Obtenter el primer elemento del mensaje, un string en este caso
                    string strMsg = (string)msg.Msg.readNext();

                    //Mostrar mensaje recibido en consola
                    GuiController.Instance.Logger.log(strMsg, Color.Green);
                }
            }

            //Si el cliente está online, analizar sus mensajes
            if (networkingMod.Client.Online)
            {
                //Mandamos un mensaje al server cada 1 segundo
                acumulatedTime += elapsedTime;
                if (acumulatedTime > 1)
                {
                    acumulatedTime = 0;

                    //Crear nuevo mensaje a enviar
                    TgcSocketSendMsg msg = new TgcSocketSendMsg();

                    //Agregar un dato al mensaje, un string en este caso
                    msg.write("Hello world - ElapsedTime: " + elapsedTime);

                    //Enviar mensaje al server
                    networkingMod.Client.send(msg);
                }
            }
        }
        public override void Update()
        {
            //Actualizar siempre primero todos los valores de red.
            //Esto hace que el cliente y el servidor reciban todos los mensajes y actualicen su es
            updateNetwork();

            //Si el server está online, analizar sus mensajes
            if (Server.Online)
            {
                //Analizar los mensajes recibidos
                for (var i = 0; i < Server.ReceivedMessagesCount; i++)
                {
                    //Leer el siguiente mensaje, cada vez que llamamos a nextReceivedMessage() consumimos un mensaje pendiente.
                    var msg = Server.nextReceivedMessage();

                    //Obtenter el primer elemento del mensaje, un string en este caso
                    text.Text += msg.Msg.readNext().ToString();
                }
            }

            //Si el cliente está online, analizar sus mensajes
            if (Client.Online)
            {
                //Mandamos un mensaje al server cada 1 segundo
                acumulatedTime += ElapsedTime;
                if (acumulatedTime > 1)
                {
                    acumulatedTime = 0;

                    //Crear nuevo mensaje a enviar
                    var msg = new TgcSocketSendMsg();

                    //Agregar un dato al mensaje, un string en este caso
                    msg.write("Hello world - ElapsedTime: " + ElapsedTime);

                    //Enviar mensaje al server
                    Client.send(msg);
                }
            }
        }
        /// <summary>
        ///     Aceptar cliente y mandarle informacion inicial
        /// </summary>
        private void atenderNuevoCliente(TgcSocketClientInfo clientInfo)
        {
            //Si el cupo está lleno, desconectar cliente
            if (networkingMod.Server.Clients.Count > vehiculosData.Length)
            {
                networkingMod.Server.disconnectClient(clientInfo.PlayerId);
            }
            //Darla la información inicial al cliente
            else
            {
                var currentClientIndex = networkingMod.Server.Clients.Count - 1;
                var data = vehiculosData[currentClientIndex];
                data.playerID = clientInfo.PlayerId;

                //Enviar información al cliente
                //Primero indicamos que mensaje del protocolo es
                var msg = new TgcSocketSendMsg();
                msg.write(MyServerProtocol.InformacionInicial);
                msg.write(data);
                //También le enviamos la información de los demás clientes hasta el momento
                //Cantidad de clientes que hay
                msg.write(networkingMod.Server.Clients.Count - 1);
                //Data de todos los clientes anteriores, salvo el ultimo que es el nuevo agregado recien
                for (var i = 0; i < networkingMod.Server.Clients.Count - 1; i++)
                {
                    msg.write(vehiculosData[i]);
                }

                networkingMod.Server.sendToClient(clientInfo.PlayerId, msg);

                //Avisar a todos los demás clientes conectados (excepto este) que hay uno nuevo
                var msg2 = new TgcSocketSendMsg();
                msg2.write(MyServerProtocol.OtroClienteConectado);
                msg2.write(data);
                networkingMod.Server.sendToAllExceptOne(clientInfo.PlayerId, msg2);
            }
        }