bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


libgdx_comunicacions

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
libgdx_comunicacions [2025/03/18 19:58]
enric_mieza_sanchez [Exercicis]
libgdx_comunicacions [2026/04/12 10:22] (actual)
enric_mieza_sanchez [Ús en app libGDX]
Línia 131: Línia 131:
 \\ \\
  
-==== Ús en app libGDX ==== +==== Ús en app libGDX (client) ==== 
-  * Per connectar-nos al servidor des de l'app libGDX ho fem al constructor o funció de inicialització ''create()''+  * Per connectar-nos al servidor des de l'app libGDX cal: 
-  * Podem enviar des de qualsevol part del codi inclús des del ''render'' tot i que convé no abusar. +    * **Inicialitzar** biblioteca de codi als ''AndroidLauncher'', ''iOSLauncher'' i ''Lwjgl3Launcher'':<code> 
-  * Per rebre dades del servidor ho fem mitjançant l'objecte ''WebSocketListener''.+CommonWebSockets.initiate();</code> 
 +    * **Crear ''socket'' i ''listener''** al constructor del joc a la funció de inicialització ''create()''
 +  * Podem **enviar dades amb el ''socket''** des de qualsevol part del codi inclús des del ''render'' tot i que convé no abusar (en l'exemple veureu que s'envien dades cada segon i no per cada frame)
 +  * Per **rebre dades amb el ''listener''** del servidor (objecte ''WebSocketListener'').
  
 <WRAP important> <WRAP important>
Línia 146: Línia 149:
  
 </WRAP> </WRAP>
 +
 +
 +=== Inicialització (launchers) ===
 +Primer de tot, cal inicialitzar els ''WebSockets'' als arxius ''AndroidLauncher'', ''iOSLauncher'' i ''Lwjgl3Launcher'':
 +
 +<file java Lwjgl3Launcher.java>
 +public class Lwjgl3Launcher {
 +    public static void main(String[] args) {
 +        if (StartupHelper.startNewJvmIfRequired()) return; // This handles macOS support and helps on Windows.
 +        CommonWebSockets.initiate();
 +        createApplication();
 +    }
 +    
 +    //...
 +}
 +</file>
 +
 +<file java AndroidLauncher.java>
 +public class AndroidLauncher extends AndroidApplication {
 +    @Override
 +    protected void onCreate(Bundle savedInstanceState) {
 +        super.onCreate(savedInstanceState);
 +        CommonWebSockets.initiate();
 +        AndroidApplicationConfiguration configuration = new AndroidApplicationConfiguration();
 +        configuration.useImmersiveMode = true; // Recommended, but not required.
 +        initialize(new Joc(), configuration);
 +    }
 +}
 +</file>
 +
 +\\
 +
 +=== App libgdx (core) ===
  
 <file java GameScreen.java> <file java GameScreen.java>
Línia 198: Línia 234:
         @Override         @Override
         public boolean onMessage(WebSocket webSocket, String packet) {         public boolean onMessage(WebSocket webSocket, String packet) {
-            System.out.println("Message:");+            System.out.println("Message:"+packet);
             return false;             return false;
         }         }
Línia 204: Línia 240:
         @Override         @Override
         public boolean onMessage(WebSocket webSocket, byte[] packet) {         public boolean onMessage(WebSocket webSocket, byte[] packet) {
-            System.out.println("Message:");+            System.out.println("Message:"+packet);
             return false;             return false;
         }         }
Línia 349: Línia 385:
 ==== Exercicis ==== ==== Exercicis ====
 <WRAP todo> <WRAP todo>
-Implementa el servidor NodeJS indicat.+**Servidor i app de prova en local**
  
-Afegeix la llibreria de WebSockets al teu joc libGDX i fes que envii la posició del nostre personatge 1 cop per segon.+Implementa el servidor NodeJS de l'exemple.
  
-Assegura't que funciona comprovant que el servidor mostra el missatge de posicionament del personatge a la seva consola.+Fes una aplicació libGDX que connecti amb el servidor i envii la posició on fas un //touch// en la pantalla. Per no saturar de missatges repetitius (i innecessaris), no enviïs la posició si aquesta no ha canviat respecte del ''render'' previ.
 </WRAP> </WRAP>
  
 <WRAP todo> <WRAP todo>
 +**Servidor WebSockets en producció**
 +
 Implementa el servidor NodeJS al teu servidor públic (Proxmox). Implementa el servidor NodeJS al teu servidor públic (Proxmox).
  
 Ajusta l'aplicació perquè es pugui connectar al servidor públic. Observa la línia de connexió on s'explica com canviar de protocol ''ws:'' (Web Socket estàndard) al ''wss:'' (Web Socket Secure, sobre SSL, el seu equivalent del HTTPS). Ajusta l'aplicació perquè es pugui connectar al servidor públic. Observa la línia de connexió on s'explica com canviar de protocol ''ws:'' (Web Socket estàndard) al ''wss:'' (Web Socket Secure, sobre SSL, el seu equivalent del HTTPS).
 +
 +Pots mirar de posar en producciò el servidor NodeJS amb el [[https://www.npmjs.com/package/pm2|gestor de processos PM2 per a NodeJS]]. Tingues en compte que per posar en producció als ports públics com 80 o 443 et caldrà realitzar les operacions com a usuari ''root''.
 +</WRAP>
 +
 +<WRAP todo>
 +**Incorporant websockets a un joc**
 +
 +Afegeix la llibreria de WebSockets al teu joc libGDX i fes que envii la posició del personatge 1 cop per segon.
 +
 +Assegura't que funciona comprovant que el servidor mostra el missatge de posicionament del personatge a la seva consola.
 </WRAP> </WRAP>
  
libgdx_comunicacions.1742327920.txt.gz · Darrera modificació: 2025/03/18 19:58 per enric_mieza_sanchez