패키지 | flash.net |
클래스 | public class NetGroup |
상속 | NetGroup EventDispatcher Object |
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10.1, AIR 2 |
-
서비스 품질 모니터링.
info
속성에는 NetGroupInfo 객체가 포함되어 있으며, 이 객체의 속성이 그룹의 QoS 통계를 제공합니다. -
게시.
post()
를 호출하여 ActionScript 메시지를 그룹의 모든 멤버로 브로드캐스트합니다. -
직접 라우팅.
sendToNearest()
,sendToNeighbor()
및sendToAllNeighbors()
를 호출하여 피어 투 피어 그룹의 특정 멤버로 짧은 데이터 메시지를 전송합니다. 소스와 대상은 직접 연결하지 않아도 됩니다. -
객체 복제.
addHaveObjects()
,removeHaveObjects()
,addWantObjects()
,removeWantObjects()
,writeRequestedObject()
및denyRequestedObject()
를 호출하여 대용량 데이터를 작은 조각으로 분할한 다음 피어 투 피어 그룹의 모든 노드에 복제합니다.
클라이언트측 NetGroup 클래스에서 NetConnection는 다음 이벤트를 전달합니다.
- NetGroup.Connect.Success
- NetGroup.Connect.Failed
- NetGroup.Connect.Rejected
해당 이벤트 객체의 info.group
속성은 이벤트 소스(NetGroup)에 대한 참조를 포함합니다. NetGroup은 다른 모든 이벤트를 전달합니다. 서버측 NetGroup 클래스에서 NetGroup은 모든 이벤트를 전달합니다.
피어 지원 네트워킹을 통한 그룹 사용에 대한 자세한 내용은 Tom Krcha의 Flash Media 및 RTMFP의 사회적 미디어 기능을 참조하십시오.
피어 지원 네트워킹의 기반이 되는 기술 세부 사항은 Adobe 컴퓨터 과학 전문가 Matthew Kaufman의 RTMFP의 Flash Platform에서의 P2P를 참조하십시오.
관련 API 요소
flash.net.NetStream
"NetGroup"으로 시작하는 flash.events.NetStatusEvent info.code 값
속성 | 정의 주체 | ||
---|---|---|---|
constructor : Object
지정된 객체 인스턴스의 클래스 객체 또는 생성자 함수에 대한 참조입니다. | Object | ||
estimatedMemberCount : Number [읽기 전용]
로컬 인접도를 기반으로 그룹 주소의 고른 분포를 고려하여 그룹의 예상 멤버 수를 지정합니다. | NetGroup | ||
info : NetGroupInfo [읽기 전용]
NetGroupInfo 객체를 반환하며, 이 객체의 속성이 NetGroup의 RTMFP 피어 투 피어 데이터 전송에 관한 서비스 품질 통계를 제공합니다. | NetGroup | ||
localCoverageFrom : String [읽기 전용]
이 노드에서 "가장 가까운" 담당 그룹 주소의 시작 범위를 지정합니다. | NetGroup | ||
localCoverageTo : String [읽기 전용]
이 노드에서 "가장 가까운" 담당 그룹 주소의 끝 범위를 지정합니다. | NetGroup | ||
neighborCount : Number [읽기 전용]
이 노드가 직접 연결되어 있는 그룹 멤버 수를 지정합니다. | NetGroup | ||
receiveMode : String
이 노드의 라우팅 수신 모드를 NetGroupReceiveMode 열거형 클래스의 값 중 하나로 지정합니다. | NetGroup | ||
replicationStrategy : String
객체 복제 가져오기 방법을 지정합니다. | NetGroup |
메서드 | 정의 주체 | ||
---|---|---|---|
지정된 NetConnection 객체에 NetGroup을 구성하고 이를 groupspec으로 지정된 그룹에 연결합니다. | NetGroup | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
리스너에서 이벤트 알림을 받을 수 있도록 EventDispatcher 객체에 이벤트 리스너 객체를 등록합니다. | EventDispatcher | ||
이 노드에서 요청을 수행하는 객체로 인접 요소에 보급하는 객체 집합에 startIndex에서 endIndex까지의 객체를 추가합니다. | NetGroup | ||
peerID가 그룹의 멤버임을 지정하는 레코드를 수동으로 추가합니다. | NetGroup | ||
이 그룹에 있어야 하는 지정된 peerID로 즉시 직접 연결하여 인접 요소를 수동으로 추가합니다. | NetGroup | ||
검색할 객체 집합에 startIndex에서 endIndex까지의 객체를 추가합니다. | NetGroup | ||
그룹과의 연결을 끊고 이 NetGroup을 닫습니다. | NetGroup | ||
sendToNearest() 메서드와 함께 사용하기에 적합한 그룹 주소로 peerID를 변환합니다. | NetGroup | ||
이전에 addHaveObjects()로 보급된 객체의 NetGroup.Replication.Request에서 수신된 요청을 거부합니다. | NetGroup | ||
이벤트를 이벤트 흐름으로 전달합니다. | EventDispatcher | ||
EventDispatcher 객체에 특정 유형의 이벤트에 대한 리스너가 등록되어 있는지 여부를 확인합니다. | EventDispatcher | ||
지정된 속성이 객체에 정의되어 있는지 여부를 나타냅니다. | Object | ||
Object 클래스의 인스턴스가 매개 변수로 지정된 객체의 프로토타입 체인에 있는지 여부를 나타냅니다. | Object | ||
그룹의 모든 멤버에게 메시지를 전송합니다. | NetGroup | ||
지정된 속성이 존재하고 열거 가능한지 여부를 나타냅니다. | Object | ||
EventDispatcher 객체에서 리스너를 제거합니다. | EventDispatcher | ||
이 노드에서 요청을 수행하는 객체로 인접 요소에 보급하는 객체 집합에서 startIndex부터 endIndex까지의 객체를 제거합니다. | NetGroup | ||
검색할 객체 집합에서 startIndex에서 endIndex까지의 객체를 제거합니다. | NetGroup | ||
모든 인접 요소에 메시지를 전송합니다. | NetGroup | ||
지정된 그룹 주소에 가장 가까운 인접 요소(또는 로컬 노드)에 메시지를 전송합니다. | NetGroup | ||
sendMode 매개 변수에서 지정한 인접 요소에 메시지를 전송합니다. | NetGroup | ||
루프 작업에서 동적 속성을 사용할 수 있는지 여부를 설정합니다. | Object | ||
로캘별 규칙에 따라 서식이 지정된 이 객체의 문자열 표현을 반환합니다. | Object | ||
지정된 객체의 문자열 표현을 반환합니다. | Object | ||
지정된 객체의 프리미티브 값을 반환합니다. | Object | ||
이 EventDispatcher 객체 또는 조상 객체에 지정한 이벤트 유형에 대한 이벤트 리스너가 등록되어 있는지 여부를 확인합니다. | EventDispatcher | ||
이전에 addHaveObjects() 메서드로 보급된 객체의 NetStatusEvent NetGroup.Replication.Request에서 수신한 것으로 요청이 충족됩니다. | NetGroup |
이벤트 | 요약 | 정의 주체 | ||
---|---|---|---|---|
[브로드캐스트 이벤트] Flash Player 또는 AIR 응용 프로그램이 운영 체제 포커스를 얻어 활성화될 때 전달됩니다. | EventDispatcher | |||
[브로드캐스트 이벤트] Flash Player 또는 AIR 응용 프로그램이 운영 체제 포커스를 잃고 비활성화될 때 전달됩니다. | EventDispatcher | |||
NetGroup 객체가 상태 또는 오류 상황을 보고할 때 전달됩니다. | NetGroup |
estimatedMemberCount | 속성 |
info | 속성 |
info:NetGroupInfo
[읽기 전용] 언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10.1, AIR 2 |
NetGroupInfo 객체를 반환하며, 이 객체의 속성이 NetGroup의 RTMFP 피어 투 피어 데이터 전송에 관한 서비스 품질 통계를 제공합니다.
구현
public function get info():NetGroupInfo
관련 API 요소
localCoverageFrom | 속성 |
localCoverageTo | 속성 |
neighborCount | 속성 |
receiveMode | 속성 |
replicationStrategy | 속성 |
NetGroup | () | 생성자 |
public function NetGroup(connection:NetConnection, groupspec:String)
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10.1, AIR 2 |
지정된 NetConnection 객체에 NetGroup을 구성하고 이를 groupspec
으로 지정된 그룹에 연결합니다.
대부분의 경우 groupspec
은 로컬 시스템의 네트워크 업링크를 사용할 가능성이 있습니다. NetStream 또는 NetGroup 객체를 groupspec으로 구성할 경우 Flash Player에서 개인 정보 대화 상자가 표시됩니다. 이 대화 상자는 사용자의 동료들과 데이터를 공유할 수 있도록 Flash Player에서 연결을 사용할 것인지 묻습니다. 사용자가 "이 도메인 허용"을 클릭하면 다음에 해당 응용 프로그램을 연결할 때는 이 대화 상자가 표시되지 않습니다. 사용자가 피어 지원 네트워킹을 허용하지 않을 경우 그룹 내의 모든 피어 기능(게시, 직접 라우팅, 객체 복제, 멀티캐스트)을 사용할 수 없게 됩니다. 권한이 허용되는 경우 info
객체의 code
속성이 NetGroup.Connect.Success
로 설정된 상태로 NetConnection의 이벤트 리스너에 NetStatusEvent가 전송됩니다. 권한이 거부되는 경우 code
속성은 NetGroup.Connect.Rejected
입니다. NetGroup 객체의 메서드를 호출하려고 시도하면 NetGroup.Connect.Success
이벤트가 수신될 때까지 예외가 발생합니다.
참고: 클라이언트가 기본 IP 멀티캐스트 스트림에 등록되면 보안 대화 상자가 표시되지 않습니다.
매개 변수connection:NetConnection — NetConnection 객체입니다.
| |
groupspec:String — 이름, 기능, 제한 및 이 멤버의 인증을 포함하여 RTMFP 피어 투 피어 그룹을 연결하도록 지정하는 문자열입니다.
new NetGroup(myConnection, myGroupSpecifier.groupspecWithAuthorizations()); |
오류
ArgumentError — NetConnection 인스턴스가 연결되지 않았습니다.
| |
Error — groupspec이 잘못되었습니다.
|
관련 API 요소
addHaveObjects | () | 메서드 |
public function addHaveObjects(startIndex:Number, endIndex:Number):void
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10.1, AIR 2 |
이 노드에서 요청을 수행하는 객체로 인접 요소에 보급하는 객체 집합에 startIndex
에서 endIndex
까지의 객체를 추가합니다. 기본적으로 Have 집합은 비어 있습니다. 인덱스는 0부터 9007199254740992까지의 정수여야 합니다.
객체 복제에 대한 자세한 내용은 Flash Media Server Developer’s Guide에서 "Replicate an object within a group"을 참조하십시오.
이 메서드는 info
객체의 code
속성을 NetGroup.Replication.Request
로 설정하여 NetGroup의 이벤트 리스너에 NetStatusEvent를 전송합니다.
참고: 이 메서드를 호출하기 전에 NetGroup.Neighbor.Connect
이벤트를 테스트하십시오.
매개 변수
startIndex:Number — Have 집합에 추가할 객체 인덱스의 시작 범위입니다.
| |
endIndex:Number — Have 집합에 추가할 객체 인덱스의 끝 범위입니다.
|
오류
RangeError — 이 메서드에 전달된 숫자가 0 미만이거나 9007199254740992보다 큽니다.
|
관련 API 요소
addMemberHint | () | 메서드 |
addNeighbor | () | 메서드 |
addWantObjects | () | 메서드 |
public function addWantObjects(startIndex:Number, endIndex:Number):void
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10.1, AIR 2 |
검색할 객체 집합에 startIndex
에서 endIndex
까지의 객체를 추가합니다. 인덱스는 0부터 9007199254740992까지의 정수여야 합니다. 기본적으로 Want 집합은 비어 있습니다.
객체 복제에 대한 자세한 내용은 Flash Media Server Developer’s Guide에서 "Replicate an object within a group"을 참조하십시오.
이 메서드는 info.code
속성의 NetGroup.Replication.Fetch.SendNotify
를 사용하여 NetStatusEvent를 NetGroup의 이벤트 리스너로 전송합니다. 이 이벤트 다음에는 NetGroup.Replication.Fetch.Failed
또는 NetGroup.Replication.Fetch.Result
이벤트가 이어집니다.
참고: 이 메서드를 호출하기 전에 NetGroup.Neighbor.Connect
이벤트를 테스트하십시오.
매개 변수
startIndex:Number — Want 집합에 추가할 객체 인덱스의 시작 범위입니다.
| |
endIndex:Number — Want 집합에 추가할 객체 인덱스의 끝 범위입니다.
|
오류
RangeError — 이 메서드에 전달된 숫자가 0 미만이거나 9007199254740992보다 큽니다.
|
관련 API 요소
close | () | 메서드 |
public function close():void
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10.1, AIR 2 |
그룹과의 연결을 끊고 이 NetGroup을 닫습니다. 이 NetGroup은 이 메서드를 호출한 뒤에는 사용할 수 없습니다.
convertPeerIDToGroupAddress | () | 메서드 |
denyRequestedObject | () | 메서드 |
public function denyRequestedObject(requestID:int):void
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10.1, AIR 2 |
이전에 addHaveObjects()
로 보급된 객체의 NetGroup.Replication.Request
에서 수신된 요청을 거부합니다. 요청자는 Have 집합에서 해지될 때까지 이 객체를 다시 요청할 수 있습니다.
객체 복제에 대한 자세한 내용은 Flash Media Server Developer’s Guide에서 "Replicate an object within a group"을 참조하십시오.
참고: 이 메서드를 호출하기 전에 NetGroup.Neighbor.Connect
이벤트를 테스트하십시오.
매개 변수
requestID:int — NetGroup.Replication.Request 이벤트에서 지정된 요청 식별자입니다.
|
관련 API 요소
post | () | 메서드 |
public function post(message:Object):String
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10.1, AIR 2 |
그룹의 모든 멤버에게 메시지를 전송합니다. 이 메서드를 호출하려면 NetGroup 생성자로 전달된 groupspec에서 GroupSpecifier.postingEnabled
속성을 true
로 설정해야 합니다. 자세한 내용은 Flash Media Server Developer’s Guide에서 "Post messages to a group"을 참조하십시오.
모든 메시지는 고유해야 합니다. 이전에 포스팅된 메시지와 동일한 메시지는 전파되지 않을 수 있습니다. 각 메시지를 고유하게 만들려면 시퀀스 번호를 사용합니다.
메시지 전달 순서는 조정되지 않습니다. 메시 전달은 보장되지 않습니다.
메시지는 AMF로 직렬화됩니다. 메시지 유형은 Object, int, Number, String 중 하나입니다. MovieClip은 메시지가 될 수 없습니다.
이 메서드는 info.code
속성의 "NetGroup.Posting.Notify"
를 사용하여 NetStatusEvent를 NetGroup의 이벤트 리스너로 전송합니다. "NetGroup.Posting.Notify"
이벤트는 클라이언트와 서버 모두에서 NetGroup으로 전달됩니다.
참고: 이 메서드를 호출하기 전에 NetGroup.Neighbor.Connect
이벤트를 테스트하십시오.
매개 변수
message:Object — 그룹의 모든 다른 멤버에게 전송할 메시지입니다.
|
String — 포스팅된 경우 메시지의 messageID이거나, 오류가 발생한 경우 null 입니다. messageID는 메시지 직렬화의 16진수로 된 SHA256의 원시 바이트입니다.
|
관련 API 요소
예제 ( 예제 사용 방법 )
응용 프로그램을 실행하면 텍스트 입력 필드에 그룹 이름을 입력할 수 있습니다. GroupSpecifier 클래스는 이 이름을 사용자가 설정한 모든 GroupSpecifier 속성과 함께 사용하여 영구적으로 고유한 그룹의 이름이 되는 문자열을 만듭니다. 그룹에 연결하려는 다른 클라이언트는 동일한 그룹 이름을 사용해야 합니다. 예를 들어 클라이언트 A가 "firstmesh"라는 그룹 이름을 사용하는 경우 클라이언트 A와 통신하려는 모든 클라이언트도 "firstmesh"를 그룹 이름으로 사용해야 합니다. 클라이언트 B가 "kite"라는 그룹 이름을 사용하는 경우 연결은 성공하지만 새 그룹이 만들어지고 클라이언트 A나 "firstmesh" 그룹의 다른 어떤 클라이언트와도 통신할 수 없습니다.
이 예를 실행하려면 Flash Pro의 라이브러리에 Button, Label, TextInput 및 TextArea 구성 요소를 추가합니다.
package { import flash.display.Sprite; import flash.events.TextEvent; import flash.events.MouseEvent; import flash.events.NetStatusEvent; import fl.events.ComponentEvent; import fl.controls.Label; import fl.controls.Button; import fl.controls.TextInput; import fl.controls.TextArea; import flash.text.TextFieldAutoSize; import flash.net.*; public class NetGroupPostExample extends Sprite{ private var connectButton:Button; private var disconnectButton:Button; private var groupNameText:TextInput; private var userNameText:TextInput; private var chatText:TextInput; private var statusLog:TextArea; private var groupLabel:Label; private var userLabel:Label; private var netConnection:NetConnection = null; private var netGroup:NetGroup = null; private var sequenceNumber:uint = 0; private var connected:Boolean = false; private var joinedGroup:Boolean = false; private const SERVER:String = "rtmfp://fms.example.com/someapp"; public function NetGroupPostExample() { DoUI(); } // Writes messages to the TextArea. private function StatusMessage(msg:Object):void{ statusLog.text += msg; statusLog.verticalScrollPosition = statusLog.textHeight; statusLog.validateNow(); } // Handles all NetStatusEvents for the NetConnection and the NetGroup. // This code includes cases it doesn't handle so you can see the cases // and their info objects for learning purposes. private function NetStatusHandler(e:NetStatusEvent):void{ StatusMessage(e.info.code + "\n"); switch(e.info.code){ case "NetConnection.Connect.Success": connectButton.enabled = false; disconnectButton.enabled = true; OnConnect(); break; case "NetConnection.Connect.Closed": OnDisconnect(); break; case "NetGroup.Connect.Success": // e.info.group OnNetGroupConnect(); break; case "NetGroup.Connect.Rejected": // e.info.group case "NetGroup.Connect.Failed": // e.info.group break; case "NetGroup.Posting.Notify": // e.info.message, e.info.messageID OnPosting(e.info.message); break; case "NetStream.MulticastStream.Reset": case "NetStream.Buffer.Full": break; case "NetGroup.SendTo.Notify": // e.info.message, e.info.from, e.info.fromLocal case "NetGroup.LocalCoverage.Notify": // case "NetGroup.Neighbor.Connect": // e.info.neighbor case "NetGroup.Neighbor.Disconnect": // e.info.neighbor case "NetGroup.MulticastStream.PublishNotify": // e.info.name case "NetGroup.MulticastStream.UnpublishNotify": // e.info.name case "NetGroup.Replication.Fetch.SendNotify": // e.info.index case "NetGroup.Replication.Fetch.Failed": // e.info.index case "NetGroup.Replication.Fetch.Result": // e.info.index, e.info.object case "NetGroup.Replication.Request": // e.info.index, e.info.requestID default: break; } } // Creates a NetConnection to Flash Media Server if the app isn't already connected // and if there's a group name in the TextInput field. private function DoConnect(e:MouseEvent):void{ if(!connected && (groupNameText.length > 0)){ StatusMessage("Connecting to \"" + SERVER + "\" ...\n"); netConnection = new NetConnection(); netConnection.addEventListener(NetStatusEvent.NET_STATUS, NetStatusHandler); // To connect to Flash Media Server, pass the server name. netConnection.connect(SERVER); } else { StatusMessage("Enter a group name"); } } // Called in the "NetConnection.Connect.Success" case in the NetStatusEvent handler. private function OnConnect():void{ StatusMessage("Connected\n"); connected = true; // Create a GroupSpecifier object to pass to the NetGroup constructor. // The GroupSpecifier determines the properties of the group var groupSpecifier:GroupSpecifier; groupSpecifier = new GroupSpecifier("aslrexample/" + groupNameText.text); groupSpecifier.postingEnabled = true; groupSpecifier.serverChannelEnabled = true; netGroup = new NetGroup(netConnection, groupSpecifier.groupspecWithAuthorizations()); netGroup.addEventListener(NetStatusEvent.NET_STATUS, NetStatusHandler); StatusMessage("Join \"" + groupSpecifier.groupspecWithAuthorizations() + "\"\n"); } private function OnNetGroupConnect():void{ joinedGroup = true; } private function DoDisconnect(e:MouseEvent):void{ if(netConnection){ netConnection.close(); } } private function OnDisconnect():void{ StatusMessage("Disconnected\n"); netConnection = null; netGroup = null; connected = false; joinedGroup = false; connectButton.enabled = true; disconnectButton.enabled = false; } private function ClearChatText():void{ chatText.text = ""; } // Called when you the chatText field has focus and you press Enter. private function DoPost(e:ComponentEvent):void{ if(joinedGroup){ var message:Object = new Object; message.user = userNameText.text; message.text = chatText.text; message.sequence = sequenceNumber++; message.sender = netConnection.nearID; netGroup.post(message); StatusMessage("==> " + chatText.text + "\n"); } else { StatusMessage("Click Connect before sending a chat message"); } ClearChatText(); } private function OnPosting(message:Object):void{ StatusMessage("<" + message.user + "> " + message.text + "\n"); } private function DoUI():void { groupLabel = new Label(); groupLabel.move(20, 10); groupLabel.autoSize = TextFieldAutoSize.LEFT groupLabel.text = "Group name:" addChild(groupLabel); groupNameText = new TextInput(); groupNameText.move(90, 10); groupNameText.text = "channel" + (int(Math.random() * 899) + 101); addChild(groupNameText); connectButton = new Button(); connectButton.addEventListener(MouseEvent.CLICK, DoConnect); connectButton.move(205, 10); connectButton.label = "Connect"; addChild(connectButton); disconnectButton = new Button(); disconnectButton.addEventListener(MouseEvent.CLICK, DoDisconnect); disconnectButton.move(310, 10); disconnectButton.label = "Disconnect"; disconnectButton.enabled = false; addChild(disconnectButton); statusLog = new TextArea(); statusLog.move(30, 38); statusLog.width = 360; statusLog.height = 215; statusLog.editable = false; addChild(statusLog); userLabel = new Label(); userLabel.move(20, 270); userLabel.autoSize = TextFieldAutoSize.LEFT userLabel.text = "User name:" addChild(userLabel); userNameText = new TextInput(); userNameText.move(80, 270); userNameText.text = "user " + int(Math.random() * 65536); addChild(userNameText); chatText = new TextInput(); chatText.addEventListener(ComponentEvent.ENTER, DoPost); chatText.move(185, 270); chatText.maxChars = 255; chatText.width = 215; addChild(chatText); } public function onPlayStatus(info:Object):void {} public function onMetaData(info:Object):void {} public function onCuePoint(info:Object):void {} public function onTextData(info:Object):void {} } }
removeHaveObjects | () | 메서드 |
public function removeHaveObjects(startIndex:Number, endIndex:Number):void
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10.1, AIR 2 |
이 노드에서 요청을 수행하는 객체로 인접 요소에 보급하는 객체 집합에서 startIndex
에서 endIndex
까지의 객체를 제거합니다. 인덱스는 0부터 9007199254740992까지의 정수여야 합니다.
객체 복제에 대한 자세한 내용은 Flash Media Server Developer’s Guide에서 "Replicate an object within a group"을 참조하십시오.
참고: 이 메서드를 호출하기 전에 NetGroup.Neighbor.Connect
이벤트를 테스트하십시오.
매개 변수
startIndex:Number — Have 집합에서 제거할 객체 인덱스의 시작 범위입니다.
| |
endIndex:Number — Have 집합에서 제거할 객체 인덱스의 끝 범위입니다.
|
오류
RangeError — 이 메서드에 전달된 숫자가 0 미만이거나 9007199254740992보다 큽니다.
|
관련 API 요소
removeWantObjects | () | 메서드 |
public function removeWantObjects(startIndex:Number, endIndex:Number):void
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10.1, AIR 2 |
검색할 객체 집합에서 startIndex
에서 endIndex
까지의 객체를 제거합니다. 인덱스는 0부터 9007199254740992까지의 정수여야 합니다.
객체 복제에 대한 자세한 내용은 Flash Media Server Developer’s Guide에서 "Replicate an object within a group"을 참조하십시오.
참고: 이 메서드를 호출하기 전에 NetGroup.Neighbor.Connect
이벤트를 테스트하십시오.
매개 변수
startIndex:Number — Want 집합에서 제거할 객체 인덱스의 시작 범위입니다.
| |
endIndex:Number — Want 집합에서 제거할 객체 인덱스의 끝 범위입니다.
|
오류
RangeError — 이 메서드에 전달된 숫자가 0 미만이거나 9007199254740992보다 큽니다.
|
관련 API 요소
sendToAllNeighbors | () | 메서드 |
public function sendToAllNeighbors(message:Object):String
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10.1, AIR 2 |
모든 인접 요소에 메시지를 전송합니다. 최소 하나의 인접 요소가 선택된 경우 NetGroupSendResult.SENT
가 반환됩니다.
메시지 라우팅에 대한 자세한 내용은 Flash Media Server Developer’s Guide에서 "Route messages directly to a peer"를 참조하십시오.
노드에서 메시지를 수신할 때 info
객체의 code
속성을 NetGroup.SendTo.Notify
로 설정하여 NetGroup의 이벤트 리스너에 NetStatusEvent를 전송합니다.
참고: 이 메서드를 호출하기 전에 NetGroup.Neighbor.Connect
이벤트를 테스트하십시오.
매개 변수
message:Object — 전송할 메시지입니다.
|
String — 전송의 성공 또는 실패 여부를 나타내는 NetGroupSendResult 열거형 클래스의 속성입니다.
|
관련 API 요소
sendToNearest | () | 메서드 |
public function sendToNearest(message:Object, groupAddress:String):String
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10.1, AIR 2 |
지정된 그룹 주소에 가장 가까운 인접 요소(또는 로컬 노드)에 메시지를 전송합니다. 전체 링에서 인접 요소를 고려합니다. 메시지가 대상에 성공적으로 전송되는 경우 NetGroupSendResult.SENT
가 반환됩니다.
메시지 라우팅에 대한 자세한 내용은 Flash Media Server Developer’s Guide에서 "Route messages directly to a peer"를 참조하십시오.
노드에서 메시지를 수신할 때 info
객체의 code
속성을 NetGroup.SendTo.Notify
로 설정하여 NetGroup의 이벤트 리스너에 NetStatusEvent를 전송합니다.
참고: 이 메서드를 호출하기 전에 NetGroup.Neighbor.Connect
이벤트를 테스트하십시오.
매개 변수
message:Object — 전송할 메시지입니다.
| |
groupAddress:String — 메시지를 라우팅할 그룹 주소입니다.
|
String — 전송의 성공 또는 실패 여부를 나타내는 NetGroupSendResult 열거형 클래스의 속성입니다.
|
관련 API 요소
sendToNeighbor | () | 메서드 |
public function sendToNeighbor(message:Object, sendMode:String):String
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10.1, AIR 2 |
sendMode
매개 변수에서 지정한 인접 요소에 메시지를 전송합니다. 메시지가 요청된 대상에 성공적으로 전송된 경우 NetGroupSendResult.SENT
가 반환됩니다.
메시지 라우팅에 대한 자세한 내용은 Flash Media Server Developer’s Guide에서 "Route messages directly to a peer"를 참조하십시오.
노드에서 메시지를 수신할 때 info
객체의 code
속성을 NetGroup.SendTo.Notify
로 설정하여 NetGroup의 이벤트 리스너에 NetStatusEvent를 전송합니다.
참고: 이 메서드를 호출하기 전에 NetGroup.Neighbor.Connect
이벤트를 테스트하십시오.
매개 변수
message:Object — 전송할 메시지입니다.
| |
sendMode:String — 메시지를 전송할 인접 요소를 지정하는 NetGroupSendMode 열거형 클래스의 속성입니다.
|
String — 전송의 성공 또는 실패 여부를 나타내는 NetGroupSendResult 열거형 클래스의 속성입니다.
|
관련 API 요소
writeRequestedObject | () | 메서드 |
public function writeRequestedObject(requestID:int, object:Object):void
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 10.1, AIR 2 |
이전에 addHaveObjects()
메서드로 보급된 객체의 NetStatusEvent NetGroup.Replication.Request
에서 수신한 것으로 요청이 충족됩니다. object
유형은 Object, int, Number, String 중 하나입니다. MovieClip은 object
가 될 수 없습니다.
객체 복제에 대한 자세한 내용은 Flash Media Server Developer’s Guide에서 "Replicate an object within a group"을 참조하십시오.
참고: 이 메서드를 호출하기 전에 NetGroup.Neighbor.Connect
이벤트를 테스트하십시오.
매개 변수
requestID:int — NetGroup.Replication.Request 이벤트에서 지정된 요청 식별자입니다.
| |
object:Object — NetGroup.Replication.Request 이벤트에 지정한 인덱스에 해당하는 객체입니다.
|
관련 API 요소
netStatus | 이벤트 |
flash.events.NetStatusEvent
속성 NetStatusEvent.type =
flash.events.NetStatusEvent.NET_STATUS
언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 1.0, Flash Player 10.1 |
NetGroup 객체가 상태 또는 오류 상황을 보고할 때 전달됩니다. netStatus
이벤트에는 info
속성이 포함되어 있습니다. info
속성은 연결 시도의 성공 여부 등과 같은 이벤트 관련 정보를 담고 있는 객체입니다.
netStatus
이벤트 객체의 type
속성 값을 정의합니다.
이 이벤트에는 다음과 같은 속성이 있습니다.
속성 | 값 |
---|---|
bubbles | false |
cancelable | false . 취소할 기본 비헤이비어가 없습니다. |
currentTarget | 이벤트 리스너를 통해 Event 객체를 처리하고 있는 객체입니다. |
info | 객체의 상태 또는 오류 상황을 설명하는 속성이 있는 객체입니다. |
target | 상태를 보고하는 NetConnection 또는 NetStream 객체입니다. |
관련 API 요소
응용 프로그램을 실행하면 텍스트 입력 필드에 그룹 이름을 입력할 수 있습니다. GroupSpecifier 클래스는 이 이름을 사용자가 설정한 모든 GroupSpecifier 속성과 함께 사용하여 영구적으로 고유한 그룹의 이름이 되는 문자열을 만듭니다. 그룹에 연결하려는 다른 클라이언트는 동일한 그룹 이름을 사용해야 합니다. 예를 들어 클라이언트 A가 "firstmesh"라는 그룹 이름을 사용하는 경우 클라이언트 A와 통신하려는 모든 클라이언트도 "firstmesh"를 그룹 이름으로 사용해야 합니다. 클라이언트 B가 "kite"라는 그룹 이름을 사용하는 경우 연결은 성공하지만 새 그룹이 만들어지고 클라이언트 A나 "firstmesh" 그룹의 다른 어떤 클라이언트와도 통신할 수 없습니다.
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="100%" height="100%" applicationComplete="OnApplicationComplete()"> <mx:Script> <![CDATA[ private var netConnection:NetConnection = null; private var netStream:NetStream = null; private var netGroup:NetGroup = null; private var video:Video = null; private var sequenceNumber:uint = 0; private var resizeTimer:Timer = null; private const SERVER:String = "rtmfp://fms.example.com/someapp"; [Bindable] private var connected:Boolean = false; [Bindable] private var joinedGroup:Boolean = false; private function OnApplicationComplete():void { userName.text = "user " + int(Math.random() * 65536); groupName.text = "channel" + (int(Math.random() * 899) + 101); resizeTimer = new Timer(2000.0); resizeTimer.addEventListener(TimerEvent.TIMER, DoResizeVideo); resizeTimer.start(); } private function StatusMessage(msg:Object):void { statusLog.text += msg; statusLog.verticalScrollPosition = statusLog.textHeight; statusLog.validateNow(); } private function NetStatusHandler(e:NetStatusEvent):void { StatusMessage(e.info.code); switch(e.info.code) { case "NetConnection.Connect.Success": OnConnect(); break; case "NetConnection.Connect.Closed": case "NetConnection.Connect.Failed": case "NetConnection.Connect.Rejected": case "NetConnection.Connect.AppShutdown": case "NetConnection.Connect.InvalidApp": OnDisconnect(); break; case "NetStream.Connect.Success": // e.info.stream OnNetStreamConnect(); break; case "NetStream.Connect.Rejected": // e.info.stream case "NetStream.Connect.Failed": // e.info.stream DoDisconnect(); break; case "NetGroup.Connect.Success": // e.info.group OnNetGroupConnect(); break; case "NetGroup.Connect.Rejected": // e.info.group case "NetGroup.Connect.Failed": // e.info.group DoDisconnect(); break; case "NetGroup.Posting.Notify": // e.info.message, e.info.messageID OnPosting(e.info.message); break; case "NetStream.MulticastStream.Reset": case "NetStream.Buffer.Full": DoResizeVideo(); break; case "NetGroup.SendTo.Notify": // e.info.message, e.info.from, e.info.fromLocal case "NetGroup.LocalCoverage.Notify": // case "NetGroup.Neighbor.Connect": // e.info.neighbor case "NetGroup.Neighbor.Disconnect": // e.info.neighbor case "NetGroup.MulticastStream.PublishNotify": // e.info.name case "NetGroup.MulticastStream.UnpublishNotify": // e.info.name case "NetGroup.Replication.Fetch.SendNotify": // e.info.index case "NetGroup.Replication.Fetch.Failed": // e.info.index case "NetGroup.Replication.Fetch.Result": // e.info.index, e.info.object case "NetGroup.Replication.Request": // e.info.index, e.info.requestID default: break; } } private function DoConnect():void { StatusMessage("Connecting to \"" + SERVER + "\" ...\n"); netConnection = new NetConnection(); netConnection.addEventListener(NetStatusEvent.NET_STATUS, NetStatusHandler); netConnection.connect(SERVER); } private function OnConnect():void { var groupSpecifier:GroupSpecifier; StatusMessage("Connected\n"); connected = true; groupSpecifier = new GroupSpecifier("max2009lab/" + groupName.text); groupSpecifier.multicastEnabled = true; groupSpecifier.postingEnabled = true; groupSpecifier.serverChannelEnabled = true; netStream = new NetStream(netConnection, groupSpecifier.groupspecWithAuthorizations()); netStream.addEventListener(NetStatusEvent.NET_STATUS, NetStatusHandler); netGroup = new NetGroup(netConnection, groupSpecifier.groupspecWithAuthorizations()); netGroup.addEventListener(NetStatusEvent.NET_STATUS, NetStatusHandler); StatusMessage("Join \"" + groupSpecifier.groupspecWithAuthorizations() + "\"\n"); } private function OnNetStreamConnect():void { netStream.client = this; var mic:Microphone = Microphone.getMicrophone(); if(mic) { mic.codec = SoundCodec.SPEEX; mic.setSilenceLevel(0); netStream.attachAudio(mic); StatusMessage("got microphone\n"); } var camera:Camera = Camera.getCamera(); if(camera) { camera.setMode(320, 240, 10); camera.setQuality(30000, 0); camera.setKeyFrameInterval(15); videoDisplay.attachCamera(camera); videoDisplay.maintainAspectRatio = true; netStream.attachCamera(camera); StatusMessage("got camera\n"); } netStream.publish("stream"); } private function OnNetGroupConnect():void { joinedGroup = true; } private function DoDisconnect():void { if(netConnection) netConnection.close(); videoDisplay.attachCamera(null); } private function OnDisconnect():void { StatusMessage("Disconnected\n"); netConnection = null; netStream = null; netGroup = null; connected = false; joinedGroup = false; } private function ClearChatText():void { chatText.text = ""; } private function DoPost():void { var message:Object = new Object; message.user = userName.text; message.text = chatText.text; message.sequence = sequenceNumber++; message.sender = netConnection.nearID; netGroup.post(message); StatusMessage("==> " + chatText.text + "\n"); chatText.callLater(ClearChatText); } private function OnPosting(message:Object):void { StatusMessage("<" + message.user + "> " + message.text + "\n"); } private function DoResizeVideo(ignored:* = null):void { if(video) { if( (0 == video.videoHeight) || (0 == video.videoWidth) ) { video.height = videoDisplay.height; video.width = videoDisplay.width; video.x = 0; video.y = 0; } else { var videoAspect:Number = Number(video.videoWidth) / Number(video.videoHeight); var displayAspect:Number = Number(videoDisplay.width) / Number(videoDisplay.height); var adjustFactor:Number; if(videoAspect >= displayAspect) // video is wider than display { adjustFactor = Number(video.videoWidth) / Number(videoDisplay.width); video.width = videoDisplay.width; video.height = int(Number(video.videoHeight) / adjustFactor); video.x = 0; video.y = int((videoDisplay.height - video.height) / 2); } else { adjustFactor = Number(video.videoHeight) / Number(videoDisplay.height); video.height = videoDisplay.height; video.width = int(Number(video.videoWidth) / adjustFactor); video.x = int((videoDisplay.width - video.width) / 2); video.y = 0; } } } } public function onPlayStatus(info:Object):void {} public function onMetaData(info:Object):void {} public function onCuePoint(info:Object):void {} public function onTextData(info:Object):void {} public function ValidateConnectAllowed(isConnected:Boolean, groupNameText:String):Boolean { return (!isConnected) && (groupNameText.length > 0); } ]]> </mx:Script> <mx:VBox top="10" right="10" left="10" bottom="10" verticalGap="6"> <mx:HBox width="100%"> <mx:Text text="Group:"/> <mx:TextInput id="groupName" width="100%" text="default" enabled="{!connected}"/> <mx:Button label="Connect" click="DoConnect()" enabled="{ValidateConnectAllowed(connected, groupName.text)}" /> <mx:Button label="Disconnect" click="DoDisconnect()" enabled="{connected}" /> </mx:HBox> <mx:VideoDisplay id="videoDisplay" width="320" height="240" resize="DoResizeVideo()"/> <mx:TextArea id="statusLog" width="100%" height="100%"/> <mx:HBox width="100%"> <mx:TextInput id="userName" width="160" /> <mx:TextInput id="chatText" width="100%" enabled="{joinedGroup}" enter="DoPost()"/> </mx:HBox> </mx:VBox> </mx:Application>
Tue Jun 12 2018, 03:17 PM Z