| |||||||
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 2008
Beiträge: 44
| One to many - LocalConnection
Hallo zusammen, ich spiele gerade mit der LocalConnection class herum und habe mich gefragt ob man auch mehrere Clients auf eine Verbindung anmelden kann? Die eins zu eins verbindung läuft einwandfrei, aber nur der erste receiver - client verbindet sich korrekt alle anderen werfen einen Error aus... ![]() ![]() ![]() Ich versuche eine brücke zwischen verschiedenen player herzustellen, so dass wenn einer spielt die anderen automatisch auf pause gehen. Vielen Dank schon mal und beste grüße Henne |
| | |
| | #2 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.324
|
das ist leider kein event du musst von und für jeden eine neue verbindung aufbauen :-( definiere ein swf als 'server' der die kommunikation mit allen anderen organisiert.
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de |
| | |
| | #3 (permalink) |
| Neuer User Registriert seit: Jan 2008
Beiträge: 44
|
hmm. Ok das klingt nicht ganz so einfach aber machbar. Ich weiß leider nie genau ob und wenn wie viele swfs gleichzeitig vor ort sind... und ich kann leider auch kein extra swf mitgeben... Also muss der erste swf schauen ob er sich verbinden kann, wenn nicht in den server mode schalten und für alle folgenden dann eine neue Verbindung bereitstellen. Ich hatte adhoc noch eine andere Idee.. vielleicht ist eine kommunikationskette wie eine doublelinked list möglich. also jedes neue verbindet sich nur mit dem letzten, aber das scheint mir fehleranfälliger als einen "server" zu basteln. Hast du vielleicht ein paar links zur hand oder schon mal gesehen wie andere solche funktionen implementiern? -hhmm gute frage macht das schon jemand mit flash?? ![]() Dank dir auf jeden fall schon mal fürs feedback |
| | |
| | #4 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.324
|
was soll das ganze geben? wie entstehen die zusätzlichen swf's? (sind die fest in einer html-seite, oder mehrere html-seiten) welche infos sollen ausgetauscht werden? warum kommunizierst du nicht über einen (richtigen) server? seit geraumer zeit gibts ein problem, das gesetzte localConnection- funktionen, die man nicht mehr entfernen konnte, nur nach einem rechnerneustart los wird ... also ich benütze localConnection aktuell nicht mehr :-(
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de Geändert von hgseib (25-10-2011 um 12:36 Uhr) |
| | |
| | #5 (permalink) |
| Neuer User Registriert seit: Jan 2008
Beiträge: 44
|
oh ****! Das klingt ja nicht gut... und danke für den hinweis ![]() Also wir stellen einfach ein player-widget zur verfügung z.B. als facebook share oder für den privaten bolg/homepage etc. -> daher keine kontrolle wie viele und wo... Der Ansatz ist einfach nur zwischen den einzelnen widgets auszutauschen ob bereits eines Music/ Videos spielt, um dieses im zweifel zu pausieren wenn ein anderer anfängt zu spielen. Das heißt der player muss die funktionalität in sich tragen und automatisch mit den anderen in verbindung treten. - eigenltich auch nicht so schwer mit JS, aber z.B. auf facebook bekomme ich keinerlei script access und muss irgendwie drumherum und suche nun nach einer Lösung die überall mitspielt... |
| | |
| | #6 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.324
|
so könnte man das z.b. machen: im server.swf (so nenne ich das mal) installierst du eine anmelde- function. damit macht sich jedes neue client.swf bekannt. kurze kommunikation um (z.b. eine id=13) zu definieren, dann diesen kanal für das nächste swf frei machen und über neue functionen z.b. 'send13' und 'empfang13' kommunizieren.
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de |
| | |
| | #8 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.324
| immer! ein grossteil der forumbenutzer sind 'nur leser' ;-)
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de |
| | |
| | #9 (permalink) |
| Neuer User Registriert seit: Jan 2008
Beiträge: 44
|
Hey hgseib, war eine super idee mit der Server Client abwicklung! Ich konnte so auf jedenfall alles aufsetzten um meine commands von einem Player an alle anderen weiterzugeben! Und das sogar über verschiedene Browser hinweg!! Ich bin voll begeistert... Das erste objekt das versucht zu kommunizieren, geht direkt in den Server mode und alle anderen registrieren sich dann bei dem... Mainfile: Code: package
{
import client.Client;
import flash.display.Sprite;
import flash.external.ExternalInterface;
import flash.net.LocalConnection;
public class Bidirectional_lc_net extends Sprite
{
public static const SERVER_NAME :String = "server_";
public static const CLIENT_NAME :String = "client_";
private var _lc :LocalConnection;
private var _client :Client;
private var _server :Server;
public static var server_id :int =1;
public function Bidirectional_lc_net()
{
// - just a visual feedback 'swf is loaded'
graphics.beginFill(0xff0000,1);
graphics.drawRect(10,10,100,50);
//
ExternalInterface.call("console.log","Bidir_lc_net:: init");
_lc = new LocalConnection();
/*****************************************/
/** Try to open connection as server **/
/** -else start as client **/
/*****************************************/
try{
_lc.connect(SERVER_NAME);
//Servermode
server_mode();
ExternalInterface.call("console.log","I AM a SERVER");
}
catch(E:Error){
//Clientmode
ExternalInterface.call("console.log","I AM a CLIENT");
client_mode();
}
};
// creates a server or a client for the net
private function server_mode():void{
_server = new Server();
_lc.client = _server;
}
private function client_mode():void{
_client = new Client(_lc);
}
}//class
}//pkg Server class: Code: package
{
import flash.events.TimerEvent;
import flash.external.ExternalInterface;
import flash.net.LocalConnection;
import flash.utils.Timer;
public class Server
{
public static const func_test :String = "test";
public static const func_register :String = "register_client";
private var _client_list :Array = new Array();
private var ping_timer :Timer = new Timer(1000);
public function Server()
{
ping_timer.start();
ping_timer.addEventListener(TimerEvent.TIMER, liveping);
}
//Send a messsage to all objects
private function liveping(E:TimerEvent = null ):void{
ExternalInterface.call("console.log","SERVER:: Ping");
var i:int = 0;
while(i< _client_list.length){
var temp_lc:LocalConnection = new LocalConnection();
var temp_client:String = _client_list[i][1];
temp_lc.send(temp_client,"liveping");
i++;
}
}
// Public Server functions
public function test(msg:String):void{
ExternalInterface.call("console.log","SERVER:: Test :"+msg);
}
// a client registers to server
public function register_client(name:String, id:int):void{
ExternalInterface.call("console.log","SERVER:: Register :"+name+","+id);
var new_client_lc:LocalConnection = new LocalConnection();
var new_client_id:String = Bidirectional_lc_net.CLIENT_NAME+id;
ExternalInterface.call("console.log","SERVER:: sending to :"+new_client_id);
new_client_lc.send( new_client_id ,"copy_registration");
_client_list.push([name,new_client_id]);
}
}
} Code: package client
{
import flash.external.ExternalInterface;
import flash.net.LocalConnection;
public class Client
{
private var _server_lc :LocalConnection;
private var _receive_lc :LocalConnection;
private var _id :int;
private var _name :String ="default name";
private var _server_rec_name :String;
public function Client(lc:LocalConnection)
{
_server_lc = lc;
_server_rec_name = Bidirectional_lc_net.SERVER_NAME ;
_receive_lc = new LocalConnection();
first_connect(0);
}
private function first_connect(n:int):void{
// searching for an open client slot
try{
create_receiver(n);
}
catch(E:Error){
n++;
if(n<100){
first_connect(n);
}
else{
ExternalInterface.call("console.log","CLIENT -no open client slots"+n);
}
}
}
private function create_receiver(n:int):void{
var receiver_name:String =Bidirectional_lc_net.CLIENT_NAME+ String(n);
// connect to client receiver channel
_receive_lc.connect(receiver_name);
_receive_lc.client = this;
_id = n;
ExternalInterface.call("console.log","CLIENT -receiver established ID:"+_id+" ,"+receiver_name);
register();
};
private function register():void{
var temp_lc:LocalConnection =new LocalConnection();
temp_lc.send(_server_rec_name,Server.func_register, _name , _id);
}
// public client functions
public function test(msg:String):void{
ExternalInterface.call("console.log","Client_testFunction:"+msg);
}
// response by server after reg
public function copy_registration():void{
ExternalInterface.call("console.log","CLIENT:: copy_registration");
}
//ping
public function liveping():void{
ExternalInterface.call("console.log","pong");
}
}
} |
| | |
![]() |
| Lesezeichen |
| Stichworte |
| direktverbindung, local connection, localconnection, verbinden |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| LocalConnection | hds26846 | Flash Einsteiger | 2 | 26-02-2007 15:34 |
| LocalConnection oder Multiple LocalConnection ??? | flashgirl | Flash MX 2004 | 8 | 18-05-2006 19:09 |
| LocalConnection ... | Mamu | ActionScript 1 | 9 | 20-08-2003 11:44 |
| LocalConnection | bamsi | ActionScript 1 | 2 | 16-07-2003 18:19 |