|
From: <tre...@us...> - 2008-02-27 01:46:08
|
Revision: 775
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=775&view=rev
Author: trevorolio
Date: 2008-02-26 17:44:25 -0800 (Tue, 26 Feb 2008)
Log Message:
-----------
A rough but working wowza module which supports a separate audio space per ogoglio space.
Modified Paths:
--------------
maven/trunk/ogoglio-avserver/server/build.xml
maven/trunk/ogoglio-avserver/server/src/com/ogoglio/wowza/ChatSpacesModule.java
Added Paths:
-----------
maven/trunk/ogoglio-avserver/server/conf/
maven/trunk/ogoglio-avserver/server/conf/Application.xml
Modified: maven/trunk/ogoglio-avserver/server/build.xml
===================================================================
--- maven/trunk/ogoglio-avserver/server/build.xml 2008-02-26 19:46:01 UTC (rev 774)
+++ maven/trunk/ogoglio-avserver/server/build.xml 2008-02-27 01:44:25 UTC (rev 775)
@@ -1,10 +1,21 @@
<?xml version="1.0"?>
-<project name="OgoglioChatSpaces" default="jar" basedir=".">
+<project name="OgoglioChatSpaces" default="install" basedir=".">
- <property name="wowza.lib.dir" value="/Library/WowzaMediaServerPro/lib"/>
+ <property name="wowza.dir" value="/Library/WowzaMediaServerPro" />
+ <property name="wowza.lib.dir" value="${wowza.dir}/lib"/>
+ <property name="wowza.conf.dir" value="${wowza.dir}/conf"/>
+ <property name="wowza.applications.dir" value="${wowza.dir}/applications"/>
+ <property name="ogoglio.conf.dir" value="${wowza.conf.dir}/ogoglio"/>
+ <property name="ogoglio.applications.dir" value="${wowza.applications.dir}/ogoglio"/>
<property name="jar.filename" value="OgoglioChatSpaces.jar"/>
<property name="core.build.dir" value="bin"/>
+ <target name="install" depends="jar">
+ <mkdir dir="${ogoglio.applications.dir}"/>
+ <mkdir dir="${ogoglio.conf.dir}"/>
+ <copy file="conf/Application.xml" todir="${ogoglio.conf.dir}" />
+ </target>
+
<target name="jar">
<jar jarfile="${wowza.lib.dir}/${jar.filename}">
<fileset dir="${core.build.dir}"/>
Added: maven/trunk/ogoglio-avserver/server/conf/Application.xml
===================================================================
--- maven/trunk/ogoglio-avserver/server/conf/Application.xml (rev 0)
+++ maven/trunk/ogoglio-avserver/server/conf/Application.xml 2008-02-27 01:44:25 UTC (rev 775)
@@ -0,0 +1,69 @@
+<Root>
+ <Application>
+ <!-- Uncomment to set application level timeout values
+ <ApplicationTimeout>60000</ApplicationTimeout>
+ <PingTimeout>12000</PingTimeout>
+ <ValidationFrequency>8000</ValidationFrequency>
+ -->
+ <Connections>
+ <AutoAccept>true</AutoAccept>
+ <AllowDomains></AllowDomains>
+ </Connections>
+ <!--
+ StorageDir path variables
+
+ ${com.wowza.wms.AppHome} - Application home directory
+ ${com.wowza.wms.ConfigHome} - Configuration home directory
+ ${com.wowza.wms.context.VHost} - Virtual host name
+ ${com.wowza.wms.context.Application} - Application name
+ ${com.wowza.wms.context.ApplicationInstance} - Application instance name
+
+ -->
+ <Streams>
+ <StreamType>live-lowlatency</StreamType>
+ <StorageDir></StorageDir>
+ </Streams>
+ <SharedObjects>
+ <StorageDir></StorageDir>
+ </SharedObjects>
+ <Client>
+ <IdleFrequency>-1</IdleFrequency>
+ </Client>
+ <!--
+ <Repeater>
+ <OriginURL></OriginURL>
+ </Repeater>
+ -->
+ <Modules>
+ <Module>
+ <Name>base</Name>
+ <Description>Base</Description>
+ <Class>com.ogoglio.wowza.ChatSpacesModule</Class>
+ </Module>
+ <Module>
+ <Name>properties</Name>
+ <Description>Properties</Description>
+ <Class>com.wowza.wms.module.ModuleProperties</Class>
+ </Module>
+ <Module>
+ <Name>logging</Name>
+ <Description>Client Logging</Description>
+ <Class>com.wowza.wms.module.ModuleClientLogging</Class>
+ </Module>
+ <Module>
+ <Name>flvplayback</Name>
+ <Description>FLVPlayback</Description>
+ <Class>com.wowza.wms.module.ModuleFLVPlayback</Class>
+ </Module>
+ </Modules>
+ <Properties>
+ <!-- Properties defined here will be added to the IApplication.getProperties() and IApplicationInstance.getProperties() collections -->
+ <!--
+ <Property>
+ <Name></Name>
+ <Value></Value>
+ </Property>
+ -->
+ </Properties>
+ </Application>
+</Root>
Property changes on: maven/trunk/ogoglio-avserver/server/conf/Application.xml
___________________________________________________________________
Name: svn:executable
+ *
Modified: maven/trunk/ogoglio-avserver/server/src/com/ogoglio/wowza/ChatSpacesModule.java
===================================================================
--- maven/trunk/ogoglio-avserver/server/src/com/ogoglio/wowza/ChatSpacesModule.java 2008-02-26 19:46:01 UTC (rev 774)
+++ maven/trunk/ogoglio-avserver/server/src/com/ogoglio/wowza/ChatSpacesModule.java 2008-02-27 01:44:25 UTC (rev 775)
@@ -1,55 +1,158 @@
package com.ogoglio.wowza;
-import com.wowza.wms.application.*;
-import com.wowza.wms.amf.*;
-import com.wowza.wms.client.*;
-import com.wowza.wms.module.*;
-import com.wowza.wms.request.*;
-import com.wowza.wms.stream.*;
+import java.util.HashMap;
+import java.util.StringTokenizer;
-public class ChatSpacesModule extends ModuleFastPlay {
+import com.wowza.wms.amf.AMFDataList;
+import com.wowza.wms.application.IApplicationInstance;
+import com.wowza.wms.client.IClient;
+import com.wowza.wms.module.IModuleCallResult;
+import com.wowza.wms.module.ModuleCore;
+import com.wowza.wms.request.RequestFunction;
+import com.wowza.wms.stream.IMediaStream;
- public void doSomething(IClient client, RequestFunction function, AMFDataList params) {
- getLogger().info("doSomething");
- sendResult(client, params, "Hello Wowza");
+public class ChatSpacesModule extends ModuleCore {
+
+ private IApplicationInstance appInstance = null;
+
+ public HashMap clientDataSet = new HashMap();
+
+ public void getStreamList(IClient client, RequestFunction function, AMFDataList params) {
+ getLogger().info("PARAM1: " + params.get(PARAM1));
+
+ String thisStreamName = (String) params.get(PARAM1).getValue();
+ ClientData data = new ClientData(client, thisStreamName);
+
+ ClientData[] clientData = getClientDataSets();
+ StringBuffer results = new StringBuffer();
+ for (int i = 0; i < clientData.length; i++) {
+ if(!clientData[i].getSpaceId().equals(data.getSpaceId())){
+ continue;
+ }
+ results.append(clientData[i].name);
+ if (i != clientData.length - 1) {
+ results.append(",");
+ }
+ }
+
+ sendResult(client, params, results.toString());
+
+ if (addClientData(data)) {
+ getLogger().info("Notifying remote clients");
+ notifyClientsOfStreamChange(data.getSpaceId(), client.getClientId());
+ }
}
-/*
- public void aonAppStart(IApplicationInstance appInstance) {
- String fullname = appInstance.getApplication().getName() + "/" + appInstance.getName();
- getLogger().info("onAppStart: " + fullname);
+
+ class MyResult implements IModuleCallResult {
+ public void onResult(IClient client, RequestFunction function, AMFDataList params) {
+ }
}
- public void aonAppStop(IApplicationInstance appInstance) {
- String fullname = appInstance.getApplication().getName() + "/" + appInstance.getName();
- getLogger().info("onAppStop: " + fullname);
+ private void notifyClientsOfStreamChange(String spaceID, int avoidedClientId) {
+ for (int i = 0; i < appInstance.getClientCount(); i++) {
+ IClient remoteClient = appInstance.getClient(i);
+ if (remoteClient == null) {
+ break;
+ }
+ ClientData data = getClientData(remoteClient.getClientId());
+ if(data == null){
+ getLogger().warn("Have a client with no client data: " + remoteClient.getClientId());
+ return;
+ }
+ if (remoteClient.getClientId() == avoidedClientId || !spaceID.equals(data.getSpaceId())) {
+ continue;
+ }
+ remoteClient.call("streamListChanged", new MyResult());
+ }
}
- public void aonConnect(IClient client, RequestFunction function, AMFDataList params) {
- getLogger().info("onConnect: " + client.getClientId());
+ private ClientData getClientData(int clientID) {
+ synchronized (clientDataSet) {
+ return (ClientData) clientDataSet.get(clientID);
+ }
}
- public void aonConnectAccept(IClient client) {
- getLogger().info("onConnectAccept: " + client.getClientId());
+ private ClientData[] getClientDataSets() {
+ synchronized (clientDataSet) {
+ return (ClientData[]) clientDataSet.values().toArray(new ClientData[0]);
+ }
}
- public void aonConnectReject(IClient client) {
- getLogger().info("onConnectReject: " + client.getClientId());
+ private boolean addClientData(ClientData data) {
+ synchronized (clientDataSet) {
+ if (clientDataSet.containsKey(data.client.getClientId())) {
+ return false;
+ }
+ clientDataSet.put(data.client.getClientId(), data);
+ return true;
+ }
}
- public void aonDisconnect(IClient client) {
- getLogger().info("onDisconnect: " + client.getClientId());
+ private ClientData removeClientData(int clientId) {
+ synchronized (clientDataSet) {
+ return (ClientData) clientDataSet.remove(clientId);
+ }
}
- public void aonStreamCreate(IMediaStream stream) {
- getLogger().info("onStreamCreate: " + stream.getSrc());
+ private class ClientData {
+ String name = null;
+
+ IClient client = null;
+
+ ClientData(IClient client, String name) {
+ this.client = client;
+ this.name = name;
+ }
+
+ String getSpaceId() {
+ return new StringTokenizer(name, "-").nextToken();
+ }
+
+ String getUsername() {
+ StringTokenizer tokenizer = new StringTokenizer(name, "-");
+ tokenizer.nextToken();
+ return tokenizer.nextToken();
+ }
+
}
+ public void onAppStart(IApplicationInstance appInstance) {
+ this.appInstance = appInstance;
+ getLogger().info("Starting the Ogoglio Chat Spaces App: " + getFullAppName());
+ }
+
+ public void onAppStop(IApplicationInstance appInstance) {
+ getLogger().info("Stopping the Ogoglio Chat Spaces App: " + getFullAppName());
+ }
+
+ public void onStreamCreate(IMediaStream stream) {
+ }
+
public void onStreamDestroy(IMediaStream stream) {
- getLogger().info("onStreamDestroy: " + stream.getSrc());
+ ClientData data = removeClientData(stream.getClientId());
+ if (data == null) {
+ return;
+ }
+ notifyClientsOfStreamChange(data.getSpaceId(), stream.getClientId());
}
+ public String getFullAppName() {
+ return appInstance.getApplication().getName() + "/" + appInstance.getName();
+ }
+
+ public void onConnect(IClient client, RequestFunction function, AMFDataList params) {
+ }
+
+ public void onConnectAccept(IClient client) {
+ }
+
+ public void onConnectReject(IClient client) {
+ }
+
+ public void onDisconnect(IClient client) {
+ }
+
public void onCall(String handlerName, IClient client, RequestFunction function, AMFDataList params) {
- getLogger().info("onCall: " + handlerName);
}
-*/
+
}
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|