Red 5 Chat Problem bei der Insterlation

Phill1991

Grünschnabel
Hallo zusammen,
ich bin momentan dabei einen Red5 VideoChat zu erstellen.
Der Red5 ansich usw. läuft.
Mein einzigstes Problem momentan ist die gebrauchsanleitung die zu diesen Chat beigelegt wurde womit ich eher wenig anfangen kann.

Die bereits erledigten schritte habe ich Unterstrichen

SIMPLE INSTALLATION GUIDE
-------------------------

FLASH PART
----------
edit the FLA red5Chat.fla and configure these lines:

_root.IP = "88.191.36.127";
_root.port=1934;

_root.authentificateURL = "http://"+_root.IP+"/red5chat/testlogin.php";
_root.infoUserURL="http://"+_root.IP+"/red5chat/infouser.php";






PHP part (only if you connect to the database for user authentification)
-------------------------------------------------------------------------

If you use the AUTHENTIFICATION (_root.authentification=true):
- Create tables form create_tables.sql
- edit the PHP/connections folder and setup con1.php to connect the database



RED5 part
---------

- create the chat directory on c:\program files\red5\webapps\
- compile the JAVA and put the classes

---------------------

Nun habe ich 2 Fragen. Einmal wie das mit den PHP Part funktioniert und einmal das letzte
- compile the JAVA and put the classes
damit kann ich so nichts anfangen.


Ich würde mich sehr freuen würde jemand mir dabei helfen können.

Mfg.
Phill
 
Hallo,

ich kenne weder Red5 noch das chatprogramm, aber folgende Anmerkungen:
If you use the AUTHENTIFICATION (_root.authentification=true):
- Create tables form create_tables.sql
- edit the PHP/connections folder and setup con1.php to connect the database
Wenn du die Authentifzierung in der Konfiguration aktiviert hast:
Die Datei create_tables.sql enthält vermutlich sql Befehle, die die benötigte Tabellenstruktur für die Authentifizierung erzeugt.
Dazu feststellen welche Datenbank installiert ist und wie man dazu scripte aus der Kommandozeile ausführt, falls kein spezielles sql tooling vorliegt. Mit mysql z.b. "mysql < create_tables.sql"

Anschliessend die Ordnerstruktur in PHP/connections sichten. Dort liegt wahrscheinlich die Datei con1.php, welche in irgendwelchen php-Variablen die Verbindungsdetails zur Datenbank enthält. Diese passend editieren.


- create the chat directory on c:\program files\red5\webapps\
- compile the JAVA and put the classes

Ein Verzeichniss für die chat-Anwendung innerhalb des red5 Anwendungsbereiches anlegen.
Die heruntergeladenen Javaklassen sichten und kompilieren. Anschliessend die class-Dateien in das erstellte Verzeichniss verschieben.
Komilieren z.b. mit javac *.java (auszuführen im Verzeichniss mit den Javaklassen)
 
Was muss ich unter "sichten und kompilieren" verstehen?
Benötige ich da noch irgentwelche Pogramme für womit ich das mache?
Bin in den bereich leider blutiger anfänger versuch mich selbst duch Tutorials ein wenig zu orientieren.
 
Hi

Eine .java-Datei ist der Quelltext für ein Programm.
Um daraus ein lauffähiges Programm zu machen, gibt es wiederum Hilfsprogramme, die man Compiler nennt.

Man gibt einem Java-Compiler eine .java-Datei und er generiert daraus ein Programm.

Da die ganze Sprache Java eine Entwicklung der Firma Sun ist, hat die auch gleich "den" Compiler dafür gemacht. Es gibt zwar noch andere, teilweise auch von Hobbyprogrammierern, die aber alle irgendwelche kleinen Mängel haben. Nimm den von Sun.

Da Sun inzwischen von einer anderen Firma (Oracle) aufgekauft wurde, findest du das Ganze auf deren Homepage:
http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u25-download-346242.html
Hier zuerst anklicken, dass du die Lizenz akzeptierst, und dann die zu dienem Betriebssystem passende Datei herunterladen und installieren.

Der wichtigste Teil am Ganzen ist das Programm javac, findet man im Installationsordner (den kannst du dir während der Installation aussuchen) im Unterordner bin.

Dieses Programm über die Konsole starten und dabei den Dateinamen (und Pfad) einer .java-Datei angeben.
Wenn keine Fehlermeldungen kommen, bekommst du nach ein paar Sekunden eine .class-Datei heraus.
Wenn Fehler sind, liegts meistens an der .java-Datei. Wenn du uns ggf. den Fehler dann auch noch sagst, können wir dir weiterhelfen.

Gruß
 
Habe das das Pogramm und die datei soweit alles gefundne nur sobald ich Javac in konsole öffnet schließt sie sich sofort. :(
Mache ich was falsch?
 
Ah jetzt hab den fehler gefunden. Aber nun bekomme cih 100 Errors ^^
Der scheind datein nicht zu finden.
Ich weiß nicht kann man mir vieleicht über ICQ, Skype etwas Hilfeleistung bieten?
Fals ja einfach per PN anschreiben
 
Ich habe da noch einige viele datein zu.
Ein PHP Ordner mit PHP skripten
Ein FLA Ordner mit den chat
Und halt den Java ordner mit der .java datei

http://www.fotos-hochladen.net/uploads/unbenanntfbh8xkrca4.png

Das sind die Ordner die ich alle habe für den chat.

Und das hier steht in der Application.java :

package chat;
import org.red5.server.adapter.ApplicationAdapter;
import org.red5.server.api.IConnection;
import org.red5.server.api.IClient;
import org.red5.server.api.IScope;
import org.red5.server.api.Red5;
import org.red5.server.api.service.IServiceCapableConnection;
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.*;
import org.red5.samples.components.ClientManager;
import org.red5.server.api.service.ServiceUtils;
import org.red5.server.api.service.*;
import org.red5.server.api.service.IPendingServiceCallback;

//
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.util.*;
import java.util.HashMap;
//
//

public class Application extends ApplicationAdapter{
public HashMap<String,User> users = new HashMap<String,User>();
public class User {
public String id = null;
public String pseudo = null;
public String webcam = null;
public String role = null;
public String sex = null;
public String onlineStatus = null;
public String room=null;
public String world=null;
public String isWatching=null;
public String hasWebcam=null;

public User (String id,String pseudo,String webcam, String role,String sex,String onlineStatus,String room,String world,String isWatching,String hasWebcam) {
this.id = id;
this.pseudo = pseudo;
this.webcam = webcam;
this.role = role;
this.sex = sex;
this.onlineStatus = "true";
this.room = room;
this.world = world;
this.isWatching = "false";
this.world = world;
}
}




// ici le callback ! ! !
/*if (conn instanceof IServiceCapableConnection) {
IServiceCapableConnection sc = (IServiceCapableConnection) conn;
sc.invoke("the_method", new Object[]{"One", 1}, new MyCallback());
}
sc.invoke("echo", new Object[]{"Hello world!"},
new IPendingServiceCallback() {
public void resultReceived(IPendingServiceCall call) {
System.err.println("Received: " + call.getResult());
}
});
*/


class MyCallback implements IPendingServiceCallback {
public void resultReceived(IPendingServiceCall call) {
// Do something with "call.getResult()"
}
}
//private ClientManager2 clientMgr = new ClientManager2("users_so","online",true);
private ClientManager clientMgr = new ClientManager("users_so",true);
private static final Log log = LogFactory.getLog( Application.class );

//ISharedObject users_so;
//= getSharedObject(scope);

//ArrayList listeUsers = new ArrayList();
//ArrayList listeObjectUsers = new ArrayList();

/** Manager for the clients. */

public void disconnectUser(String connectionID)
{ //code to inform other clients that this client with this connection ID has left below...
}
/*
* (non-Javadoc)
* @see org.red5.server.adapter.ApplicationAdapter#connect(org.red5.server.api.IConnection, org.red5.server.api.IScope, java.lang.Object[])
* connect an users with 7 parameters: username,webcam,onlineStatus, role, room, world
*/
public boolean connect(IConnection conn, IScope scope, Object[] params) {
log.info("connect IConnection nombre params="+ params.length);
// Check if the user passed valid parameters.
//params = pseudo onlineStatus role sexe room world
if (params.length==1) {
log.info("getNumberUsersConnected");
((IServiceCapableConnection) conn).invoke("getNumberUsersConnected", new Object[]{users.size()});
//rejectClient("getNumberUsersConnected !.");
conn.close();
return false;
}
if (params == null || params.length != 7) {
log.info("Client must pass 7 params !");
rejectClient("Client must pass 7 params !.");
return false;
}
String id = conn.getClient().getId();
String pseudo = params[0].toString();
String webcam = params[1].toString();
String onlineStatus = params[2].toString();
String role=params[3].toString();
String sex = params[4].toString();
String room = params[5].toString();
String world=params[6].toString();
String isWatching="false";
String hasWebcam="true";
// test if username is already used
if (users.containsKey(pseudo)) {
rejectClient("Error: pseudo "+pseudo+" already used.");
return false;
}

// Call original method of parent class.
if (!super.connect(conn, scope, params)) {
return false;
}
log.info("ici2");
users.put(pseudo,new User(id,pseudo,webcam, role,sex,onlineStatus,room,world,isWatching,hasWebcam));
log.info("ici3");
log.info("connected as :"+pseudo+"webcam="+webcam+" status="+onlineStatus+"role="+role+"sexe="+sex+"room="+room+"world="+world);
clientMgr.addClient(scope, pseudo, id);
ServiceUtils.invokeOnAllConnections (scope, "joinuser", new Object[] {id,pseudo,webcam, onlineStatus,role,sex,room,world} );
return true;
}
/*
* (non-Javadoc)
* @see org.red5.server.adapter.ApplicationAdapter#disconnect(org.red5.server.api.IConnection, org.red5.server.api.IScope)
* disconnect an user form the chat and notify all others users
*/
public void disconnect(IConnection conn, IScope scope) {
// Get the previously stored username.
String id = conn.getClient().getId();
// Unregister user.
String pseudo = clientMgr.removeClient(scope, id);
User user=users.get(pseudo);
users.remove(pseudo);
log.info("removeuser invoked id:"+user.id+" pseudo="+user.pseudo+"sexe="+user.sex);
ServiceUtils.invokeOnAllConnections (scope, "removeuser", new Object[] {user.id,user.pseudo,user.room,user.world} );
super.disconnect(conn, scope);

}
public boolean appJoin(IClient client, IScope scope) {
log.info("Client joined app " + client.getId());
// If you need the connecion object you can access it via.
//IConnection conn = Red5.getConnectionLocal();
return true;
}
public void send_to_all_iterate() {
IConnection current = Red5.getConnectionLocal();
Iterator<IConnection> it = scope.getConnections();

while (it.hasNext()) {
IConnection conn = it.next();
if (conn.equals(current)) continue;
if (conn instanceof IServiceCapableConnection) {
((IServiceCapableConnection) conn).invoke("someClientMethod", new Object[]{"Hello World"});
log.debug("sending notification to "+conn);
}
}
}
/*
* get all the already connected users
*/
public HashMap<String,User> getUserList() {
/*IConnection conn = Red5.getConnectionLocal();
if (conn instanceof IServiceCapableConnection) {
((IServiceCapableConnection) conn).invoke("receive_private", new Object[]{"zaza"});
log.info("getUserList"+conn.getClient().getId());
}*/
//listeObjectUsers.toString()
log.info("getUserList called");
return users;
}
/*
* send a public message msg from from_pseudo to ALL users
*/
public void send_public(String from_pseudo, String msg) {
//Iterator<IConnection> it = scope.getConnections();
log.info("send_public from_pseudo"+from_pseudo+" msg:"+msg);
ServiceUtils.invokeOnAllConnections (scope, "receivePublicMsg", new Object[] {from_pseudo,msg} );
}
/*
* start Talk invoked on all users by whoTalks
*/
public void startTalk(String whoTalks) {
log.info("startTalk: "+whoTalks);
ServiceUtils.invokeOnAllConnections (scope, "talkStarted", new Object[] {whoTalks} );
}
/*
* stop Talk invoked on all users by whoTalks
*/
public void stopTalk(String whoTalks) {
log.info("stopTalk: "+whoTalks);
ServiceUtils.invokeOnAllConnections (scope, "talkEnded", new Object[] {whoTalks} );
}
/*
* gett the number of connected users to the chat
*/
public int getNumberUsersConnected(){
return users.size();

}
/*
* start requestHand invoked on all users by whoRequests
*/
public void requestHand(String whoRequests) {
log.info("send_public from_pseudo"+whoRequests);
ServiceUtils.invokeOnAllConnections (scope, "handRequested", new Object[] {whoRequests} );
}

/*
* send a privateMessage msg from fromPseudo to sendToId user
*/
public void send_private_id(String sendToId,String fromPseudo, String msg) {
//IConnection current = Red5.getConnectionLocal();
Iterator<IConnection> it = scope.getConnections();
log.debug("send_private to "+sendToId+" "+msg);
//String uid = scope.getClient().getId();
while (it.hasNext()) {
IConnection conn = it.next();
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;
}
}
}
/*
* who is wathing who function
*/
public void watches(String UserId) {
IConnection conn2 = Red5.getConnectionLocal();
String uid = conn2.getClient().getId();

Iterator<IConnection> it = scope.getConnections();
log.debug("watches "+UserId);
while (it.hasNext()) {
IConnection conn = it.next();
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;
}
}
}
/*
* ban the user _id
*/
public void ban(String _id) {
Iterator<IConnection> it = scope.getConnections();
//log.debug("ban called: "+_id);
while (it.hasNext()) {
IConnection conn = it.next();
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);
}
}
}
/*
* kick the user _id
*/
public void kick(String _id) {
Iterator<IConnection> it = scope.getConnections();
//log.debug("kick called: "+_id);
while (it.hasNext()) {
IConnection conn = it.next();
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);
}
}
}
/*
* send a private message msg from user fromPseudo to detsination user DestinationID
*/
public void send_private(String fromPseudo, String DestinationID,String msg) {
//IConnection current = Red5.getConnectionLocal();
Iterator<IConnection> it = scope.getConnections();
log.debug("send_private to "+DestinationID+" "+msg);
//String uid = scope.getClient().getId();
while (it.hasNext()) {
IConnection conn = it.next();
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);
}
}
}
/*
* change the status of the webcam: can be "on" or "off"
*/
public void change_webcam(String webcam) {
//
IScope appScope = Red5.getConnectionLocal().getScope();
IConnection conn = Red5.getConnectionLocal();
String uid = conn.getClient().getId();
log.debug("change_webcam called form id:"+uid+" :"+webcam);
ServiceUtils.invokeOnAllConnections (appScope, "change_webcam", new Object[]{uid,webcam} );
}
/*
* change the status of the user to "status"
*/
//
public void changeProfil(String webcam,String role, String onlineStatus) {
//
IScope appScope = Red5.getConnectionLocal().getScope();
IConnection conn = Red5.getConnectionLocal();
String _id = conn.getClient().getId();
log.debug("changeProfil called form id:"+_id+" :"+webcam);
ServiceUtils.invokeOnAllConnections (appScope, "changeProfil", new Object[]{_id,webcam,role,onlineStatus} );
// return (new Object[]{uid,status});
}

public Double add(Double a, Double b){
return a + b;
}
public Boolean appStart() {
//users_so = SharedObject.get("users_so", false);
createSharedObject(Red5.getConnectionLocal().getScope(), "users_so", false);
log.debug("application START!");
return true;

}
public boolean roomStart(IScope room) {
log.info( "Red5First.room start " + room);
if (!super.roomStart(room))
return false;
//createSharedObject(room, "sampleSO", true);
//ISharedObject so = getSharedObject(room, "sampleSO");
// Now you could do something with the shared object...

return true;
}
public String whoami() {
IConnection conn = Red5.getConnectionLocal();
IClient client = conn.getClient();
IScope scope = conn.getScope();
return client.getId();
// ...
}
public void callclient() {
log.info("callclient called");
IConnection conn = Red5.getConnectionLocal();
if (conn instanceof IServiceCapableConnection) {
IServiceCapableConnection sc = (IServiceCapableConnection) conn;
log.info("flashmethod called");
sc.invoke("flashmethod", new Object[]{"One", 1});
}
}
public boolean appConnect( IConnection conn , Object[] params )
{
//String id=conn.getClient().getId();
//String username=(String)params[1];
//String password=(String)params[2];
//String sexe=(String)params[3];
//String status=(String)params[4];
// cherche si user déjà dans la liste
//Cuser user=new Cuser(id,username,password,sexe,status);
/*if (this.list[UserName]) {
application.rejectConnection(newClient, {msg:"Nom déjà utilisé, essayez de nouveau."});
trace("### name taken");
return;
}
*/


log.info( "appConnect " + conn.getClient().getId() );
//boolean accept = (Boolean)params[0];
//String user=(String)params[1];
// if ( !accept ) rejectClient( "you passed false..." );
return true;
}
public void appDisconnect( IConnection conn){
log.info( "Red5First.appDisconnect " + conn.getClient().getId() );
// IScope appScope = Red5.getConnectionLocal().getScope();
// ServiceUtils.invokeOnAllConnections (appScope, "removeuser", new Object[] { "zaza" } );

}
public void appStop() {
log.info( "Red5First.appStop" );

}
}
 
Da werden diverse Klassen aus red5 importiert, d.h. beim kompilieren müssen die jar-Dateien gelinkt werden. Du müsstest herausfinden, in welchen jar-Dateien red5 die zum kompilieren gebraucht Klassen vorhält. Z.b. mit einem Program, welches Inhalte von zip-Dateien durchsuchen kann(müsste alles in red5.jar im red5-Installationsverzeichniss liegen laut google).
Diese jar-Dateien listest du dann beim kompilieren auf:
Code:
javac -classpath /folder/red5.jar:/folder/commons-logging.jar *.java
http://download.oracle.com/javase/1.5.0/docs/tooldocs/solaris/classpath.html

Für die Apache imports bräuchtest du das Apache-Commons packet.
 
Zurück