| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Jan 2011
Beiträge: 6
| BlazeDS und Spaß mit Remoteobject
Nachfolgenden Text hab ich bereits in einem kleinen privaten Forum geschrieben, ist immernoch aktuell, leider ![]() Kurz beschrieben: Wir brauchen für ein Multiplayerspiel eine Lobby, in der Spieler sich auswählen können und verbinden. Genutzt werden Socketverbindungen. Bedingung: Server Java, Client Flash, als Server-framework BlazeDS Hoffe ihr könnt mir helfen. ps.: Falls ich im falschen Forum bin, bitte umschieben...die Unterforennamen waren für mich nicht ganz eindeutig. ------------------------------------------------------------------- Tach Leute, wir verzweifeln gerade seit nun guten 3 Wochen an dem gleichen Problem und haben keine Ansätze mehr, was man ausprobieren könnte. Idee: Wir wollen ein Multiplayerspiel machen mit Socketverbindung. Bevor 2 zusammen Spielen, müssen sie sich über eine Liste, die im Startbildschirm angezeigt werden soll, auswählen und verbinden. Stand: Unser Java-server wartet auf Verbindungen und wenn ein Client gestartet wird, speichert er die Verbindungen mit einer ID in eine Liste. Der Flash-client (mxml) führt die Methode z.B. listeSchicken aus und bekommt eine Liste mit Objekten zurück, worin wiederum die ID steht, die wird dann ins Datagrid geschrieben. Problem: Die Liste wird nur dann ins Datagrid geschrieben, wenn wir manuell liste.add(Object(900)); schreiben. Sobald wir die Liste aber per liste.add(Object(getId(variable); füllen, also aus der Verbindungenliste auslesen, dann überträgt der Server scheinbar nichts an das Datagrid. Die Liste bleibt einfach leer. Vielleicht ist jeman von euch ja da firm...bzw hat sowas ähnliches bei einem Projekt gemacht? Dieses Userliste-problem dürfte eigentlich nicht so schwer sein... Hier mal der code: Code: package flex.samples.verbindungen;
import java.util.ArrayList;
import java.util.List;
import flex.samples.product.Product;
//import TaggedConnection;
public class ListeSchicken {
//private ArrayList<TaggedConnection> connections;
// public ListeSchicken(ArrayList<TaggedConnection> conList) {
// connections = conList;
// }
public List<String> listeSchicken() {
List verbindungen = new ArrayList();
for(TaggedConnection con:EntranceServer.conList){
verbindungen.add(new RaumPilot(con.getId()));
}
return verbindungen;
}
} Code: package flex.samples.verbindungen;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
*
*
*
* Eingangserver wartet auf Socketverbdinungen und speichert sie in
* einer Connection-Liste(conList) als TaggedConnection-Typ ab.
*
*/
public class EntranceServer {
static ArrayList<TaggedConnection> conList = new ArrayList();
static ServerSocket server;
static int id = 1000;
List geschwader = new ArrayList();
// ListeSchicken liste=new ListeSchicken(conList);
public static void main(String[] args) {
// ServerSocket server;
System.out.println("Main");
listenSocket();
}
/**
* listenSocket() wartet auf Socketverbindungen über den Port 2001 und
* speichert sie gegebenenfalls ab. Das TaggedConnection Objekt bekommt 2
* Eigenschaften: die Socketverbindung und eine ID. Zum Test wird nach 2
* bestehenden Verbindungen in der Liste, ein GameThread gestartet.
*/
public static void listenSocket() {
System.out.println("listenSocket");
try {
server = new ServerSocket(2001);
System.out.println("Server waits for connections.");
} catch (IOException e) {
System.out.println("Could not listen on port 2001");
System.exit(-1);
}
while (true) {
TaggedConnection t;
// if (conList.size() == 2) {
// GameThread testChat = new GameThread((TaggedConnection) conList
// .get(0), (TaggedConnection) conList.get(1));
// testChat.start();
// System.out.println("Verbindung hergestellt!");
// }
try {
// server.accept returns a client connection
t = new TaggedConnection(server.accept(), id);
System.out.println("new Connection established. id: " + id);
VerbindungenHandler handler=new VerbindungenHandler(t);
handler.start();
conList.add(t);
System.out.println("Nummer in Liste: " +conList.get(conList.size()-1).getId());
printHello(t);
id = getNewId();
System.out.println("Anzahl der Connections:" + conList.size());
} catch (IOException e) {
System.out.println("Accept failed: 4444");
System.exit(-1);
}
}
}
private static int getNewId() {
Random r = new Random();
int ir = r.nextInt(1000);
int newId = ir + 1000;
return newId;
}
public List getList() {
// System.out.println("Ich bin in getList");
// conList.add(new TaggedConnection(null, 909));
// conList.add(new TaggedConnection(null, 908));
// conList.add(new TaggedConnection(null, 907));
// conList.add(new TaggedConnection(null, 906));
List rekruten=new ArrayList();
// for (int i=0;i<conList.size();i++){
// rekruten.add(new RaumPilot(conList.get(i).getId()));
// }
return rekruten;
}
} Code: package flex.samples.verbindungen;
import java.io.Serializable;
public class RaumPilot implements Serializable {
private int rekrudNr;
public RaumPilot(int id) {
this.rekrudNr = id;
}
public int getRekrudNr() {
return rekrudNr;
}
public void setRekrudNr(int rekrudNr) {
this.rekrudNr = rekrudNr;
}
} Danke für die Aufmerksamkeit Geändert von Milchsuppe (03-01-2011 um 10:19 Uhr) |
| | |
| | #2 (permalink) |
| Perverted Hermit Registriert seit: Mar 2004 Ort: Delmenhorst
Beiträge: 12.142
|
Wieso nutzt du schreibst du einen eigenen SocketServer, wenn du Blaze nutzen willst?
__________________ http://icodeapps.net | Meet me at the Flex user group Hamburg talking about CoffeeScript |
| | |
| | #3 (permalink) | |
| Neuer User Registriert seit: Jan 2011
Beiträge: 6
| Zitat:
Dass wir Blaze benutzen, liegt auch nur am Prof. Es gibt bei Blaze also direkt einen Socketserver der Socketverbindungen verwaltet? Hast du vielleicht einen Link zu Material dafür? Und wenn ja, hilft mir das bei dem Lobby-problem? Ich hab nämlich nicht den Eindruck, dass unser Socketserver das Problem ist/war. | |
| | |
| | #4 (permalink) |
| Perverted Hermit Registriert seit: Mar 2004 Ort: Delmenhorst
Beiträge: 12.142
|
Viel mir gerade auf: in while (true) instanziiert ihr definitiv zu oft einen GameThread. Und es ist wirklich nur eine Bitte, aber denkt daran, dass andere euren Code auch lesen sollen - offensichtlich. Da macht es Sinn den Code etwas zu pflegen. Sonst macht das durchlesen keinen Spass.
__________________ http://icodeapps.net | Meet me at the Flex user group Hamburg talking about CoffeeScript |
| | |
| | #5 (permalink) | |||||
| Neuer User Registriert seit: Jan 2011
Beiträge: 6
|
Hi und danke erstmal, dass du dich versuchst durch unseren - zugegeben - schlecht dokumentierten code zu wühlen. Nochmal zur Verdeutlichung unseres Problems: Wir wollen ein Spiel für 2 Spieler machen. Bevor man zusammen spielt, trift man sich in einer Lobby. Was nichts anderes ist, als eine Liste von möglichen Mitspielern (Raumpiloten). Die sollte man auswählen können und auf "Verbinden" drücken können, damit die beiden Socketverbindungen (welche schon bestehen, ab dem Zeitpunkt, wo sie den Client starten) zusammen geworfen werden und ein GameThread für sie gestartet wird. Zitat:
Deutsche Bezeichner einfach aus dem Grund, weil wir da viel rumprobiert haben, und die Namen dann einfach aus Faulheit fix gewählt wurden...nicht toll, zugegeben :[ Generics: Das ist eins der Probleme die uns beschäftigen. Wir hatten da schon alle möglichen Versionen. Sprich wir haben auch mal alle Typen direkt vorgegeben, es hat aber nichts geändert, bzw. gab andere Probleme. Wir schätzen, dass das Hauptproblem ist, dass die Liste static sein muss (static ArrayList<TaggedConnection> conList = new ArrayList(); ) Zitat:
Zitat:
Zitat:
Zitat:
![]() Nochmal abschließend vielleicht eine Frage: Gibt es dazu vielleicht schon Tutorials/Beispiele? Ich denke jedes Multiplayerspiel brauch diese Funktion und deswegen war ich eigentlich guter Dinge etwas zu finden...allerdings ist es schwierig gerade für die Kombination (java, flash) etwas passendes per Google zu finden...vielleicht kennst du/ihr ja eine gute Seite die sowas schon in der Art hat, an dem wir uns orientieren können? Danke auf jedenfall für deine Mühe. | |||||
| | |
| | #6 (permalink) | ||
| Perverted Hermit Registriert seit: Mar 2004 Ort: Delmenhorst
Beiträge: 12.142
| Zitat:
Zitat:
__________________ http://icodeapps.net | Meet me at the Flex user group Hamburg talking about CoffeeScript | ||
| | |
| | #7 (permalink) |
| Neuer User Registriert seit: Jan 2011
Beiträge: 6
|
Also ich hab jetzt nochmal 2 andere Tutorials zu RPC und AMF gemacht. Aufgefallen ist mir (ein wohl ziemlich dilletantischer) Fehler: Wir haben bei uns kein Gegenstück auf Flash-seite von dem Value-object gemacht. Ich verfolge jetzt erstmal diese Idee und melde mich, falls ich dann wieder nicht weiterkomme...trozdem danke nochmal für die Hilfe |
| | |
| | #8 (permalink) |
| Neuer User Registriert seit: Jan 2011
Beiträge: 6
|
Hallo, ich nochmal ![]() Ich wollte die Frage jetzt nochmal allgemeiner stellen, da wir irgendwie nicht weiterkommen. Ihr habt da vielleicht Ideen, die uns weiterhelfen...vielleicht auch einfach gute Links? (google hat uns bis jetzt nicht wesentlich geholfen). Wie würdet ihr denn ein Multiplayerspiel aufbauen, wo 2 Leute zusammen zocken können und vorher sich in einer Lobby auswählen? Bedingungen sind flash-client, java-server und blazeDS. Unsere Idee bis jetzt war, dass man auf eine seite geht, wo der Flash-client eingebunden ist. Der Flash-client öffnet direkt auch eine SOcketverbindung zum Java-server. In einer Lobby, bestehend aus Liste der Nutzer + Buttons zum verbinden/refresh, können sich die Spieler dann finden und der Server sollte dann die Socketverbindungen zusammenlegen...dann können die beiden spielen. Ist das total doof? Gibts ne viel einfachere Möglichkeit? Hilfe wäre echt großartig |
| | |
| | #9 (permalink) |
| Perverted Hermit Registriert seit: Mar 2004 Ort: Delmenhorst
Beiträge: 12.142
|
Naja, die Frage die sich mir stellt ist, was ihr mit dem Server macht. Ja, immer noch ![]() Blaze unterstützt verschiedene Protokolle und Methoden um Daten zu transfereieren, der Servlett Container wird Session handling bieten... Ein für mich natürlicherer Weg wäre ein P2P Application zu bauen via Cirrus. Das Backend würde dann entsprechend schlank ausfallen können... evtl ganz wegfallen.
__________________ http://icodeapps.net | Meet me at the Flex user group Hamburg talking about CoffeeScript |
| | |
| | #10 (permalink) |
| Neuer User Registriert seit: Jan 2011
Beiträge: 6
|
Mhm der Server sollte eigentlich schon ein paar Berechnungen machen (sind noch nicht implementiert) Z.B. ob die Kugeln treffen und das Resultat (Lebenspunkte etc.) an beide Clienten schicken. So haben wir uns das erstmal gedacht... Hab mir Cirrus kurz überflogen: Socket-verbindung ist also garnicht nötig für echtzeit? Aber was ist der Vorteil? Dann müsste ja einer der Clienten quasi den "host" mimen und die oben genannten Sachen berechnen? |
| | |
| | #11 (permalink) |
| Neuer User Registriert seit: Oct 2008
Beiträge: 148
|
hi, schau dir mal den smartfoxserver an. der bietet schon sowas wie "räume" wo man sich anmelden kann.... |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| AMF Netconnection vs. RemoteObject | niggeulimann | ActionScript 3 | 0 | 15-10-2010 15:29 |
| [object AsyncToken] wie mit RemoteObject? | lubbi | Flex programmieren | 10 | 22-05-2010 22:36 |
| Validator mit RemoteObject | Jarell | Flex programmieren | 3 | 03-03-2010 07:04 |
| Flex 3 AMF / RemoteObject Verständnisfrage | fred am rechner | Flex programmieren | 4 | 22-09-2008 12:26 |
| Flex 3 aund Pfad zu RemoteObject | Slashwalker | Flex allgemein | 1 | 03-05-2008 19:40 |