/// <summary>
        ///     Quitar otro cliente que desconecto
        /// </summary>
        private void clienteAtenderOtroClienteDesconectado(TgcSocketRecvMsg msg)
        {
            var playerId = (int)msg.readNext();

            otrosMeshes[playerId].dispose();
            otrosMeshes.Remove(playerId);
        }
        /// <summary>
        ///     Crear Mesh para el nuevo cliente conectado
        /// </summary>
        private void clienteAtenderOtroClienteConectado(TgcSocketRecvMsg msg)
        {
            //Recibir data
            var vehiculoData = (VehiculoData)msg.readNext();

            crearMeshOtroCliente(vehiculoData);
        }
        /// <summary>
        ///     Atender mensaje InformacionInicial
        /// </summary>
        private void clienteAtenderInformacionInicial(TgcSocketRecvMsg msg)
        {
            //Recibir data
            var vehiculoData = (VehiculoData)msg.readNext();

            //Cargar mesh
            var loader = new TgcSceneLoader();
            var scene  = loader.loadSceneFromFile(vehiculoData.meshPath);

            meshPrincipal = scene.Meshes[0];

            //Ubicarlo en escenario
            meshPrincipal.Position = vehiculoData.initialPos;

            //Camara
            this.camara.resetValues();
            this.camara.setCamera(meshPrincipal.Position, 100, 400);

            //Ver si ya habia mas clientes para cuando nosotros nos conectamos
            var otrosVehiculosCant = (int)msg.readNext();

            for (var i = 0; i < otrosVehiculosCant; i++)
            {
                var vData = (VehiculoData)msg.readNext();
                crearMeshOtroCliente(vData);
            }
        }
Exemple #4
0
        /// <summary>
        /// Actualizar lógica del server
        /// </summary>
        private void updateServer()
        {
            //Iterar sobre todos los nuevos clientes que se conectaron
            for (int i = 0; i < networkingMod.NewClientsCount; i++)
            {
                //Al llamar a nextNewClient() consumimos el aviso de conexion de un nuevo cliente
                TgcSocketClientInfo clientInfo = networkingMod.nextNewClient();
                atenderNuevoCliente(clientInfo);
            }

            //Iterar sobre todos los nuevos clientes que se desconectaron
            for (int i = 0; i < networkingMod.DisconnectedClientsCount; i++)
            {
                //Al llamar a nextNewClient() consumimos el aviso de desconexión de un nuevo cliente
                TgcSocketClientInfo clientInfo = networkingMod.nextDisconnectedClient();
                atenderClienteDesconectado(clientInfo);
            }

            //Atender mensajes recibidos
            for (int i = 0; i < networkingMod.Server.ReceivedMessagesCount; i++)
            {
                //El primer mensaje es el header de nuestro protocolo del ejemplo
                TgcSocketClientRecvMesg clientMsg = networkingMod.Server.nextReceivedMessage();
                TgcSocketRecvMsg        msg       = clientMsg.Msg;
                MyClientProtocol        msgType   = (MyClientProtocol)msg.readNext();

                switch (msgType)
                {
                case MyClientProtocol.PosicionActualizada:
                    serverAtenderPosicionActualizada(clientMsg);
                    break;
                }
            }
        }
        /// <summary>
        ///     Actualizar posicion de otro cliente
        /// </summary>
        private void clienteAtenderActualizarUbicaciones(TgcSocketRecvMsg msg)
        {
            var playerId = (int)msg.readNext();
            var nextPos  = (Matrix)msg.readNext();

            if (otrosMeshes.ContainsKey(playerId))
            {
                otrosMeshes[playerId].Transform = nextPos;
            }
        }
Exemple #6
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);
                }
            }
        }