„Cocoon P2P” ist eine ActionScript-Bibliothek für Flash, Flex und AIR, deren Schwerpunkt auf der Peer-to-Peer-Kommunikation in lokalen Netzwerken liegt.

The Cocoon P2P library allows you to easily set up device discovery and communication with devices on the local network. It supports messaging, object-replication, video and accelerometer data.

Die Open-Source-Bibliothek vereinfacht somit die Nutzung der P2P-Funktionalitäten, die mit Version 10 Einzug in Adobes Flash Player erhielten. Einsatzmöglichkeiten sind beispielsweise die Kommunikation und der Datenaustausch von Rechnern und/oder mobilen Devices, die sich in einem Netzwerk aufhalten.

Cocoon bietet hierzu eine Klasse LocalNetworkDiscovery, die als Service für den Verbindungsaufbau und die Kommunikation dient. Man gibt z.B. seinem Client einen Namen (clientName) und definiert eine Gruppe (groupName), mit der sich die anderen Clients ebenfalls verbinden.

Über LocalNetworkDiscovery erfährt man, ob Clients der Gruppe bei- oder ausgetreten sind (clientAdded / clientRemoved). Außerdem erhält man z.B. die gesendeten Daten von anderen Clients (dataReceived).

Beispiel

Hier ein Beispielcode aus den Tutorials, der Problem auf Anhieb funktioniert hat. Es handelt sich um eine kleine Chat-Anwendung. Simuliert habe ich die beiden Teilnehmer einfach über zwei parallel geöffnete AIR-Clients.

Actionscript:
  1. xml version="1.0" encoding="utf-8"?>
  2.    xmlns:fx="http://ns.adobe.com/mxml/2009"
  3.    xmlns:s="library://ns.adobe.com/flex/spark"
  4.    xmlns:mx="library://ns.adobe.com/flex/mx"
  5.    xmlns:p2p="com.projectcocoon.p2p.*"
  6.    title="P2P messaging" showStatusBar="false"
  7.    width="525" height="250">
  8.  
  9.    
  10.       "discovery"
  11.          clientAdded="onClientAdded(event)"
  12.          clientRemoved="onClientRemoved(event)"
  13.          dataReceived="onDataReceived(event)"
  14.          groupName="videoFlashGroup"
  15.          clientName="Florian"
  16.          loopback="true" />
  17.    
  18.  
  19.    
  20.    [CDATA[
  21.  
  22.       import com.projectcocoon.p2p.events.ClientEvent;
  23.       import com.projectcocoon.p2p.events.MessageEvent;
  24.  
  25.       private var lastClientSelected:int = -1;
  26.  
  27.       private function sendMessage(evt:Event=null):void {
  28.          if(client_list.selectedIndex != -1) {
  29.             discovery.sendMessageToClient(message_txt.text, client_list.selectedItem.groupID);
  30.          } else {
  31.             discovery.sendMessageToAll(message_txt.text);
  32.          }
  33.          message_txt.text = "";
  34.       }
  35.  
  36.       private function onClientAdded(evt:ClientEvent):void {
  37.             chat_txt.htmlText += "*"+evt.client.clientName+" joined the chatroom*
    ";
  38.       }
  39.  
  40.       private function onClientRemoved(evt:ClientEvent):void {
  41.             chat_txt.htmlText += "*"+evt.client.clientName+" left the chatroom*
    ";
  42.       }
  43.  
  44.       private function onDataReceived(evt:MessageEvent):void {
  45.             if(evt.message.scope == "all") {
  46.                   chat_txt.htmlText += ""+evt.message.client.clientName+":"+evt.message.data+"
    "
    ;
  47.             } else {
  48.                   chat_txt.htmlText += "\"#CC0000\">"+evt.message.client.clientName+
  49.                                        ": "+evt.message.data+"
    ";
  50.             }
  51.       }
  52.  
  53.       private function toggleSelect(evt:MouseEvent):void {
  54.             if(client_list.selectedIndex == lastClientSelected) client_list.selectedIndex = -1;
  55.             lastClientSelected = client_list.selectedIndex;
  56.       }
  57.  
  58.    ]]>
  59.    
  60.  
  61.    "chat_txt" editable="false" x="10" y="10" width="376" height="200" />
  62.  
  63.    List id="client_list" width="120" labelField="clientName"
  64.            dataProvider="{discovery.clients}" x="394" y="10" height="230" click="toggleSelect(event)" />
  65.  
  66.    Button id="send_btn" x="291" y="218" width="95" label="Send"
  67.              click="sendMessage(event)" enabled="{message_txt.text.length> 0}"/>
  68.  
  69.    "message_txt" x="10" y="218" width="273" enter="sendMessage(event)" />
  70.  

Link: Cocoon P2P (Google Code)
Link: Flash Player 10: Mehr Details zu Peer to Peer (P2P)