Avatar billede jannek_ek Nybegynder
25. marts 2006 - 21:19 Der er 7 kommentarer og
1 løsning

Vector over RMI

jeg er igang med at lave et lille program, en form for multiplayer netspil. Jeg er igang med at lave rmi delen, men er stødt på et problem. Alle spillerne (figur) bliver gemt i et vector (spillere), der ligger på min server. Det virker fint nok med at sende og hente,  men når to logger på samtidigt, er det kun den der kom senest på, der kan se begge spillere. altså comp 1 starter op og kan se sin egen figur. Comp 2 starter op, og kan se sin egen figur + comp 1's figur, men comp 1 kan ikke se comp 2's figur.

Og til koden:


import java.util.*;
import java.awt.*;
import java.rmi.server.UnicastRemoteObject;

public class spilServer extends UnicastRemoteObject implements spilServerInter
{
Vector spillere = new Vector();
figur buffer;
boolean tilføjet;

public spilServer() throws java.rmi.RemoteException
{
}

public synchronized Vector getSpillere(int kortNr)
{  // -------- HER BLIVER VECTORET SENDT
  return (Vector) spillere.clone();
}

public synchronized void tilføj(figur spiller)
{
  for (int x = 0; x < spillere.size(); x++)
  {
  buffer = (figur) spillere.elementAt(x);
  if (spiller.navn.equals(buffer.navn))
  {
    tilføjet = true;
    spillere.removeElementAt(x);
    spillere.insertElementAt(spiller, x);
    break;
  }
  }
  if (!tilføjet)
  {
  spillere.addElement(spiller);
  tilføjet = false;
  }
}
}

------------------------

import java.awt.*;
import java.rmi.Naming;

public class server
{
public static void main(String[] arg) throws Exception
{
  spilServerInter SS = new spilServer();
  Naming.rebind("rmi://localhost/spilServer", SS);
  System.out.println("Serveren er oprettet!");
}
}

------------------

...
  try
  {
  spilServerInter SS = (spilServerInter) Naming.lookup("rmi://80.161.140.131/spilServer");
  SS.tilføj(hovedPerson.getFigur()); // sender ens egen figur til serveren
  objekter = SS.getSpillere(0); // nye objekter kommer ikke med
  } catch (Exception e)
  {
  e.printStackTrace();
  }
...
Avatar billede arne_v Ekspert
25. marts 2006 - 21:39 #1
burde

figur buffer;
boolean tilføjet;

ikke være lokale variable i tilføj metoden initialiseret med null og false ?
Avatar billede jannek_ek Nybegynder
25. marts 2006 - 21:42 #2
jo det kan godt være, men er de ikke foruddefineret som null og false?
Avatar billede arne_v Ekspert
25. marts 2006 - 21:48 #3
jo som globale

men ikke som lokale

og pointen er at de skal ændres til lokale

initialiseringen er så nødvendig
Avatar billede jannek_ek Nybegynder
25. marts 2006 - 21:55 #4
behageligt :D så virker det ordentligt.
Den havde jeg ikke regnet ud, har du nogen forklaring på hvorfor de ikke må være globale?
Men kom med et svar any ways. Og mange tak
Avatar billede arne_v Ekspert
25. marts 2006 - 21:57 #5
som globale bliver de ikke resat mellem kald

og svar
Avatar billede arne_v Ekspert
25. marts 2006 - 21:58 #6
strengt taget kunne du også bare sætet tilføjet til false øverst i tilføj metoden, men
de variable bør være lokale
Avatar billede arne_v Ekspert
25. marts 2006 - 21:58 #7
og et rigtigt svar
Avatar billede jannek_ek Nybegynder
25. marts 2006 - 22:01 #8
og takker igen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester