Red5 Install/Red5 Chat
Red5Install/Red5Chat ¶* 2011.12.16
* download
tcheun@enk:~/chat$ ls -R
.:
FLA Install.txt JAVA-RED5 PHP red5chatv2.1.zip
./FLA:
IconCellRenderer.as User.as css.as
RemoveCellRenderer.as chat.as red5Chat.fla
./JAVA-RED5:
red5-web.properties red5-web.xml src web.xml
./JAVA-RED5/src:
User.as backupchat.txt chat demo.txt
./JAVA-RED5/src/chat:
Application.java
./PHP:
Connections create_tables.sql infouser.php testlogin.php
./PHP/Connections:
con1.php
* testlogin.php, infouser.php
* Application À» ÄÄÆÄÀÏÇϱâ À§ÇØ eclipse ¸¦ »ç¿ëÇØ¾ß¸¸ Çϳª?
2011.12.02 ¶* On ubuntu
* public class Application extends ApplicationAdapter
tcheun@enk:~/chat/FLA$ grep nc.call chat.as
nc.call("closePrivateChat",null,myID,_root.privateChatterID);
nc.call("stopPrivateInvitation",null,myID,_root.privateChatterID);
nc.call("acceptInvitation",null,_root.user.pseudo,_root.user.id,postedBy,postedByID);
nc.call("requestPrivate",null,_root.user.pseudo,_root.user.id,whoId);
nc.call("changeProfil",null,_root.user.webcam,_root.user.role,_root.user.onlineStatus);
//nc.call("changeStatus",null,myuser.pseudo,2);
nc.call("startTalk",null,_root.user.pseudo);
nc.call("stopTalk",null,_root.user.pseudo);
nc.call("kick",null,who);
nc.call("ban",null,who);
nc.call("requestHand",null,_root.user.pseudo);
nc.call("stopTalk",null,pseudo);
nc.call("send_private",null,fromPseudo,destinationID,msg);
nc.call("send_public",null,_root.user.pseudo,msg);
nc.call("getUserList", new getUserListCallBack());
* ´ÙÀ½ÀÇ 4°³ function Àº server ¿¡ ¾øÀ½
flash ¶* timeline ¿¡¼ actions layer ¿¡ ù¹øÂ° frame ÀÇ action script
stop();
onEnterFrame = function () {
var loaded = Math.ceil(_root.getBytesLoaded()*100/ _root.getBytesTotal());
_root.loading_txt.text="Loading:"+loaded+"%";
if (_root.getBytesLoaded() == _root.getBytesTotal()) {
delete onEnterFrame;
play();
}
};
import User;
Stage.scaleMode = "exactFit";
ASSetPropFlags(Object.prototype, "copyProperties", 1);
#include "css.as"
#include "chat.as"
_root.IP="127.0.0.1";
_root.port = 1935;
_root.room="chat";
_root.debug = false;
if (_root.debug == true) {
_root.IP = "127.0.0.1";
_root.port = "1935";
_root.pseudo="yarek";
_root.sexe="f";
}
_root.rtmpString = "rtmp://"+_root.IP+':'+_root.port+"/"+_root.room;
_root.infos = true;
_root.userMustPublishWebcam = true;
_root.colorText = '#00000';
_root.playSounds = true;
_root.serverMessages = true;
_root.showToolTips = true;
_root.listenToTalk=true;
_root.individualPrivateMessages = true;
_root.showAdminsAsNormalUsers = true;
// displays infos such: "user has joined the chat":
//attachAudio
_root.authentificate = false;
_root.showMyWebcam = false;
_root.authentificateURL = "http://"+_root.IP+"/red5chat/testlogin.php";
_root.infoUserURL = "http://"+_root.IP+"/red5chat/infouser.php";
// this url is to connect to your database page testAutoconnect.php
// we will provide the following information $POST["username"] and $POST["password"]
// if the result ?result=ok, the user is AUTHETIFCAITED, else it is not !
// look at the testAutoconnect.php provided with the red5chat and edit it !
//
//LoadVars
_root.autoConnect = false;
// if you put the autoconnect to true, make sure to provide the params
// pseudo=nickname, status= online, offline..., role=normal, admin..., sexe=m,f,a,
// room = name of room, world = world !
// if autoconnect is true, the the login panel will not be shown
// PRELOADER
init_rooms();
//init_chat();
stop();
* _root.authentificate = false; À» true ·Î º¯°æ
chat.as ¶* init_rooms()
function init_rooms() {
login_msg("");
_root.Application._visible=false;
_root.login._visible=false;
TransitionManager.start(rooms_mc, {type:Squeeze, direction:Transition.IN, duration:2,
easing:Elastic.easeOut, dimension:1});
}
* rooms layer ¸¦ ¼±ÅÃÇϰí property¸¦ º¸¸é room_mc µ¿¿µ»ó Ŭ¸³ÀÌ ¼±ÅõÊ
_root.Application.rooms_mc._visible = false;
_root.rooms_mc.roomLove_btn.onPress=enterLoveRoom;
_root.rooms_mc.roomFriend_btn.onPress=enterFriendRoom;
_root.rooms_mc.roomHot_btn.onPress=enterHotRoom;
_root.rooms_mc.termsOfUse_btn.onPress=termsOfUse;
function termsOfUse() {
getURL("termsOfUse.php","_new");
}
function enterFriendRoom() {
_root.room="chat";
_root.rtmpString = "rtmp://"+_root.IP+':'+_root.port+"/"+_root.room;
init_chat();
TransitionManager.start(rooms_mc, {type:Squeeze, direction:1, duration:2, easing:Elastic.easeIn, dimension:1});
}
function enterLoveRoom() {
_root.room="chat";
_root.rtmpString = "rtmp://"+_root.IP+':'+_root.port+"/"+_root.room;
init_chat();
TransitionManager.start(rooms_mc, {type:Squeeze, direction:1, duration:2,
easing:Elastic.easeIn, dimension:1});
}
function enterHotRoom() {
_root.room="chat";
_root.rtmpString = "rtmp://"+_root.IP+':'+_root.port+"/"+_root.room;
init_chat();
TransitionManager.start(rooms_mc, {type:Squeeze, direction:1, duration:2, easing:Elastic.easeIn, dimension:1});
}
* init_chat
function init_chat() {
// if autoconnect =true, make sure to provide these parameters:
// pseudo=nickname, status= online, offline..., role=normal, admin..., sexe=m,f,a,
// room = name of room, world = world !
_root.login.sex_mc._visible=false;
if (_root.authentificate==false) {
_root.login.password_txt._visible=false;
_root.login.password_label._visible=false;
_root.login.sex_mc._visible=true;
_root.Application.info_btn._visible=false;
if (_root.pseudo==undefined) _root.pseudo="";
if (_root.sexe==undefined) _root.sexe="m";
if (_root.sexe=="m") {
_root.login.male_rb.selected=true;
} else {
_root.login.female_rb.selected=true;
}
_root.login.login_txt.text=_root.pseudo;
}
TransitionManager.start(login, {type:Squeeze, direction:Transition.IN, duration:2,
easing:Elastic.easeOut, dimension:1});
// nc.connect(_root.rtmpString,"connectTemp");
trace("connecting as connectTemp");
disable_GUI();
initPeopleGrid();
if (_root.autoConnect==true) {
//_root.login._visible=false;
TransitionManager.start(login, {type:Squeeze, direction:1, duration:1, easing:Elastic.easeIn, dimension:1});
login_chat();
} else {
//no auto connect
}
}
* »ç¿ëµÇ´ÂÁö ¸ð¸£°ÚÀ½.
_root.login.login_txt.addEventListener("enter",loginKeyDown);^M
_root.login.password_txt.addEventListener("enter",loginKeyDown);^M
function loginKeyDown() {^M
if (Key.isDown(Key.ENTER)) {^M
_root.pseudo=_root.login.login_txt.text;^M
_root.password=_root.login.password_txt.text;^M
login_chat();^M
} ^M
}
function checklogin(pseudo) {^M
if (pseudo.length<2) return false;^M
if (pseudo.length>20) return false;^M
for (i=0; i<pseudo.length-1; i++) {^M
var c = pseudo.charAt(i);^M
x=(ord(c));^M
if (x<=32) return false;^M
if (x>122) return false;}^M
return true ^M
}^M
^M
^M
_root.login.login_pb.onPress=function() { ^M
_root.pseudo=_root.login.login_txt.text;^M
_root.password=_root.login.password_txt.text;^M
if (checklogin(_root.pseudo)) {^M
login_chat();^M
}^M
}^M
* initPeopleGrid
function initPeopleGrid() {
_root.Application.people_grd.removeAllColumns();
_root.Application.people_grd.removeAll();
_root.Application.people_grd.columnNames = ["webcam", "sex", "username"];
//customize columns
var col:mx.controls.gridclasses.DataGridColumn;
col = _root.Application.people_grd.getColumnAt(0);
col.width = 30;
col.headerText = "Cam";
col.cellRenderer = "IconCellRenderer";
col["iconFunction"] = peopleIconFunction;
//
col = _root.Application.people_grd.getColumnAt(1);
col.width = 30;
col.headerText = "Sex";
col.cellRenderer = "IconCellRenderer";
col["iconFunction"] = peopleIconFunction;
//
col = _root.Application.people_grd.getColumnAt(2);
col.width = 250;
col.headerText = "Username";
// --------------------
// Style for DataGrid
//
var styleObj:CSSStyleDeclaration = new mx.styles.CSSStyleDeclaration();
styleObj.styleName = "myStyle";
styleObj.fontFamily = "Verdana";
styleObj.fontWeight = "normal";
styleObj.fontSize = 10;
//bold
styleObj.color = 0x334455;
_global.styles["myStyle"] = styleObj;
_root.Application.people_grd.setStyle("styleName", "myStyle");
_root.Application.people_grd.setStyle("alternatingRowColors", Array(0xFFFFFF, 0xECF2F8));
_root.Application.people_grd.setRowHeight(24);
_root.Application.people_grd.setStyle("hGridLines", false);
_root.Application.people_grd.setStyle("hGridLineColor", 0xA2A6A9);
_root.Application.people_grd.setStyle("vGridLines", false);
_root.Application.people_grd.resizableColumns = false;
//people_grd.setVScrollPolicy("off");
// themeColor
//people_grd.setStyle("themeColor", "haloBlue");
// Header
// No header in this example
_root.Application.people_grd.setShowHeaders(true);
}
* login_chat
function login_chat() {
// _root.login.login_pb.enabled=false;
_root.user=new User(_root.pseudo,_root.webcam,_root.password,"true",_root.role,
_root.sex,_root.room,_root.world);
//trace("_root.user.onlinseStatus="+_root.user.onlineStatus);
//trace("_root.user.pseudo="+_root.user.pseudo);
if (_root.user.pseudo=="") {
login_msg("UserName is not valid !");
_root.login.login_pb.enabled=true;
return;
}
if (_root.authentificate==true) {
if (_root.user.password=="") {
login_msg("Password is not valid !");
_root.login.login_pb.enabled=true;
return;
}
login_msg("");
// authetificate : please check _root.authentificateURL and testlogin.php
var myVars = new LoadVars();
myVars.pseudo = _root.user.pseudo;
myVars.password = _root.user.password;
//trace("*pseudo:"+myVars.pseudo+" pass="+myVars.password);
//trace("authentificateURL="+_root.authentificateURL);
myVars.sendAndLoad(_root.authentificateURL, myVars, "");
myVars.onLoad = function(success) {
trace("myVars.status="+myVars.status);
if (myVars.status=="ok") {
_root.user.sex=myVars.sex;
_root.user.role=myVars.role;
//trace("myVars.sex="+myVars.sex);
connect_chat();
} else {
login_msg("Incorrect User or password ");
_root.login.login_pb.enabled=true;
return;
}
}
} else {
// no authentification !
if (_root.role!="a") _root.role="n";
_root.user.role=_root.role;
_root.user.sex="m";
if (_root.login.female_rb.selected==true) _root.user.sex="f";
connect_chat();
}
}
* connect_chat
function connect_chat() {
//trace("connecting to chat");
//params = pseudo status role sexe room world
//trace(_root.rtmpString+"-"+_root.user.pseudo+"-"+_root.user.status+
"-"+_root.user.role+"-"+_root.user.sex+"-"+_root.user.room+"-"+_root.user.world);
_root.user.webcam=!(Camera.get().muted);
trace("_root.user.webcam="+_root.user.webcam);
nc.connect(_root.rtmpString,_root.user.pseudo,_root.user.webcam,_root.user.onlineStatus,
_root.user.role,_root.user.sex,_root.user.room,_root.user.world);
nc.onStatus = function(info){
//trace("info.code="+info.code);
if (info.code == "NetConnection.Connect.Success") {
enter_chat();
} else if(info.code=="NetConnection.Connect.Rejected") {
login_msg("UserName already in use !");
_root.login.login_pb.enabled=true;
return;
} else {
//login_msg("**UserName already in use !");
_root.login.login_pb.enabled=true;
return;
}
};
}
* _root.login.login_pb.enabled=true;
enter_chat ¶* enter_chat
function enter_chat() {
if(_root.Application.myMenuBar.initiated!=true) initMenu();
getUserList(); // get list of connected users
//_root.login._visible=false;
TransitionManager.start(login, {type:Squeeze, direction:1, duration:1, easing:Elastic.easeIn,
dimension:1});
enable_GUI();
publishMyWebcam();
}
* initMenu()
function initMenu() {^M
_root.Application.myMenuBar.initiated=true;^M
var menu1 = _root.Application.myMenuBar.addMenu("My status");^M
var menu2 = _root.Application.myMenuBar.addMenu("Rooms");^M
var menu = _root.Application.myMenuBar.addMenu("Parameters");^M
menu1.addMenuItem({type:"check", selected:_root.online, label:"OnLine", instanceName:"online"});^M
menu2.addMenuItem({label:"Change Rooms", instanceName:"changeRoom"});^M
menu.addMenuItem({label:"Show my webcam", instanceName:"showMyWebcam"});
menu.addMenuItem({type:"check", selected:_root.listenToTalk, label:"Listen to Talks",
instanceName:"listenToTalk"}); ^M
....
if (_root.user.role=="a") menu.addMenuItem({label:"Admin tools", instanceName:"admintools"});^M
var menulisten = new Object();^M
menu.addEventListener("change", menulisten);^M
menu1.addEventListener("change", menulisten);^M
menu2.addEventListener("change", menulisten);^M
menulisten.change = function(evt) {^M
var menu = evt.menu;^M
var item = evt.menuItem;^M
if (item.attributes.instanceName == "changeRoom") {^M
init_rooms(); ^M
} ^M
if (item.attributes.instanceName == "listenToTalk") {^M
_root.listenToTalk=item.attributes.selected;^M
if (_root.listenToTalk==true) closeTalk();^M
_root.Application.talk_btn._visible=item.attributes.selected;^M
_root.Application.askHand_mc._visible=item.attributes.selected;^M
} ^M
if (item.attributes.instanceName == "online") {^M
_root.user.onlineStatus=item.attributes.selected; ^M
changeMyProfil();^M
} ^M
if (item.attributes.instanceName == "showMyWebcam") {^M
_root.Application.av1._visible=true;^M
} ^M
if (item.attributes.instanceName == "sounds") {^M
_root.playSounds=item.attributes.selected; ^M
}^M
if (item.attributes.instanceName == "serverMessages") {^M
_root.serverMessages=item.attributes.selected;^M
}^M
if (item.attributes.instanceName == "individualPrivateMessages") {^M
_root.individualPrivateMessages=item.attributes.selected;^M
trace("_root.individualPrivateMessages="+_root.individualPrivateMessages);^M
} ^M
if (item.attributes.instanceName == "admintools") {^M
_root.Application.admintools_window._visible=true;^M
} ^M
^M
} ^M
}
* menu ´Â My status, Rooms, Parameters ÀÓ
function getUserList() {^M
trace("getUserList called");^M
function getUserListCallBack() {^M
trace("getUserListCallBack called");^M
this.onResult = function(_users) {^M
for (_user in _users) {^M
trace("pseudo:"+_users[_user].pseudo+" webcam:"+_users[_user].webcam);^M
_root.Application.people_grd.addItem({label:_users[_user].pseudo,
webcam:_users[_user].webcam,
username:_users[_user].pseudo,
data:_users[_user].pseudo,
sex:_users[_user].sex, role:_users[_user].role,
onlineStatus:_users[_user].onlineStatus,
id:_users[_user].id});^M
if (_root.user.pseudo==_users[_user].pseudo) _root.user.id=_users[_user].id;
}^M
updateNumberUsers();^M
};^M
^M
}^M
nc.call("getUserList", new getUserListCallBack());^M
}
* server ÀÇ getUserList ¸¦ call ÇÔ.
* publishMyWebcam()
function publishMyWebcam() {^M
//mic^M
volumeID = setInterval(displayVolume, 50);^M
mic = Microphone.get();^M
mic.setRate(11);^M
mic.useEchoSuppression=true;^M
// and cam!^M
cam = Camera.get();^M
cam.setMode(160, 120, 5);^M
cam.setQuality(0, 80);^M
if (cam.muted==true) {^M
if (_root.userMustPublishWebcam==true) System.showSettings(0);^M
} ^M
if (Camera.names.length==0) {^M
trace("no webcam found!");^M
} else {^M
//nc.call("changeStatus",null,myuser.pseudo,2);^M
trace("webcam found");^M
}^M
cam.onStatus = function(infoObj:Object) {^M
switch (infoObj.code) {^M
case 'Camera.Muted' :^M
trace("Camera access is denied");^M
System.showSettings(0);^M
_root.user.webcam=false;^M
changeMyProfil();^M
break;^M
case 'Camera.Unmuted' :^M
trace("Camera access granted");^M
_root.user.webcam=true;^M
changeMyProfil();^M
break;^M
}^M
}^M
^M
_root.Application.av1.outgoing.attachVideo(cam); ^M
out_stream = new NetStream(nc); ^M
out_stream.attachVideo(cam);^M
out_stream.attachAudio(mic); ^M
out_stream.publish(_root.user.pseudo, "live"); ^M
}
* chat.as
diff Application.java ¶
tcheun@enk:~/Chat/chat/src/org/red5/core$ diff Application.java
/home/tcheun/chat/JAVA-RED5/src/chat/Application.java
1c1
< package org.red5.core;
---
> package chat;
8c8,12
<
---
> import org.red5.server.api.so.ISharedObject;
> import org.red5.server.api.ScopeUtils;
> import org.red5.server.api.so.ISharedObjectService;
> import org.red5.server.api.*;
> import org.red5.server.api.scheduling.*;
9a14
> import org.red5.server.api.service.ServiceUtils;
10a16
> import org.red5.server.api.service.IPendingServiceCallback;
16a23,25
> import java.util.HashMap;
> //
> //
157d165
< /*
168,181d175
< */
< Collection<Set<IConnection>> conCollection = scope.getConnections();
< for (Set<IConnection> cons : conCollection) {
< for (IConnection conn : cons) {
< if (conn != null) {
< //do something with the connection
< if (conn.equals(current)) continue;
< if (conn instanceof IServiceCapableConnection) {
< ((IServiceCapableConnection) conn).invoke("someClientMethod", new Object[]{"Hello World"});
< log.debug("sending notification to "+conn);
< }
< }
< }
< }
238d231
< /*
253,270d245
< */
< Collection<Set<IConnection>> conCollection = scope.getConnections();
< log.debug("send_private to "+sendToId+" "+msg);
< for (Set<IConnection> cons : conCollection) {
< for (IConnection conn : cons) {
< if (conn != null) {
< //do something with the connection
< String id=conn.getClient().getId();
< if (!(sendToId.equals(id))) continue;
< log.info("receive_private "+sendToId+" "+msg);
< if (conn instanceof IServiceCapableConnection) {
< ((IServiceCapableConnection) conn).invoke("receive_private", new Object[]{msg});
< log.info("received_private "+sendToId+" "+msg);
< return;
< }
< }
< }
< }
279d253
< /*
293,310d266
< */
< Collection<Set<IConnection>> conCollection = scope.getConnections();
< log.debug("watches "+UserId);
< for (Set<IConnection> cons : conCollection) {
< for (IConnection conn : cons) {
< if (conn != null) {
< //do something with the connection
< String id=conn.getClient().getId();
<
< if (!(UserId.equals(id))) continue;
< if (conn instanceof IServiceCapableConnection) {
< ((IServiceCapableConnection) conn).invoke("watches", new Object[]{uid});
< log.info(uid+" is watching "+UserId);
< return;
< }
< }
< }
< }
316d271
< /*
328,342d282
< */
< Collection<Set<IConnection>> conCollection = scope.getConnections();
< for (Set<IConnection> cons : conCollection) {
< for (IConnection conn : cons) {
< if (conn != null) {
< //do something with the connection
< String id=conn.getClient().getId();
< if (!(_id.equals(id))) continue;
< if (conn instanceof IServiceCapableConnection) {
< ((IServiceCapableConnection) conn).invoke("IhaveBeenBanned", new Object[]{_id});
< log.info("ban "+_id);
< }
< }
< }
< }
348d287
< /*
360,374d298
< */
< Collection<Set<IConnection>> conCollection = scope.getConnections();
< for (Set<IConnection> cons : conCollection) {
< for (IConnection conn : cons) {
< if (conn != null) {
< //do something with the connection
< String id=conn.getClient().getId();
< if (!(_id.equals(id))) continue;
< if (conn instanceof IServiceCapableConnection) {
< ((IServiceCapableConnection) conn).invoke("IhaveBeenKicked", new Object[]{_id});
< log.info("kick "+_id);
< }
< }
< }
< }
381d304
< /*
398,416d320
< */
< Collection<Set<IConnection>> conCollection = scope.getConnections();
< for (Set<IConnection> cons : conCollection) {
< for (IConnection conn : cons) {
< if (conn != null) {
< //do something with the connection
< String id=conn.getClient().getId();
< log.debug("id="+id+ " senTO="+DestinationID);
< //if (sendTo.equals(id)) log.info("PAREIL"); else log.info("differents");
<
< if (!(DestinationID.equals(id))) continue;
< log.info("receive_private "+DestinationID+" "+msg);
< if (conn instanceof IServiceCapableConnection) {
< ((IServiceCapableConnection) conn).invoke("receivePrivateMsg", new Object[]{fromPseudo, msg});
< log.info("received_private "+DestinationID+" "+msg);
< }
< }
< }
< }
465a370
> IScope scope = conn.getScope();
485c390
< // cherche si user d�j� dans la liste
---
> // cherche si user d�j� dans la liste
488c393
< application.rejectConnection(newClient, {msg:"Nom d�j� utilis�, essayez de nouveau."});
---
> application.rejectConnection(newClient, {msg:"Nom d�j� utilis�, essayez de nouveau."});
|
Many pages make a thick book. |