Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 25-10-2011, 09:43   #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
henne2009 ist offline   Mit Zitat antworten
Alt 25-10-2011, 09:48   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
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
hgseib ist offline   Mit Zitat antworten
Alt 25-10-2011, 10:13   #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
henne2009 ist offline   Mit Zitat antworten
Alt 25-10-2011, 11:40   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
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)
hgseib ist offline   Mit Zitat antworten
Alt 25-10-2011, 12:31   #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...
henne2009 ist offline   Mit Zitat antworten
Alt 25-10-2011, 12:34   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
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
hgseib ist offline   Mit Zitat antworten
Alt 25-10-2011, 12:42   #7 (permalink)
Neuer User
 
Registriert seit: Jan 2008
Beiträge: 44
ja klingt gut so ungefähr hatte ich mir das auch vorgestellt. Interesse am ausgang? dann würde ich nochmal meine Implementaiton posten?

Und vielen Dank für Deinen superschnellen und guten support !!
henne2009 ist offline   Mit Zitat antworten
Alt 25-10-2011, 13:27   #8 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
Zitat:
Zitat von henne2009 Beitrag anzeigen
Interesse am ausgang? dann würde ich nochmal meine Implementaiton posten?
immer! ein grossteil der forumbenutzer sind 'nur leser' ;-)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 26-10-2011, 23:23   #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]);
		}
	}
}
Client class:
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");
		}
		
	}
}
henne2009 ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
direktverbindung, local connection, localconnection, verbinden

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ä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


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:07 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele