Beispiel #1
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>
        ///     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);
        }
Beispiel #3
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);
                }
            }
        }