/*
* @(#)RtspManager.java 1.19 02/08/21
*
* Copyright (c) 1996-2002 Sun Microsystems, Inc. All rights reserved.
*/
package com.sun.media.rtsp;
import java.net.*;
import java.util.*;
import com.sun.media.Log;
import com.sun.media.rtsp.protocol.*;
public class RtspManager {
private Vector listeners;
private int connectionCounter;
private Vector connections;
private String address;
private int port;
public RtspManager() {
listeners = new Vector();
connections = new Vector();
Server server = new Server(this);
server.start();
}
public RtspManager(boolean server_socket) {
listeners = new Vector();
connections = new Vector();
if (server_socket) {
Server server = new Server(this);
server.start();
}
}
public boolean sendMessage(int connectionId, String message) {
Log.comment("outgoing msg:");
Log.comment(message);
Connection connection = getConnection(connectionId);
boolean success;
if (connection == null) {
success = false;
} else {
success = connection.sendData(message.getBytes());
}
return success;
}
public void dataIndication(int connectionId, Message message) {
for (int i = 0; i < listeners.size(); i++) {
RtspListener listener = (RtspListener) listeners.elementAt(i);
listener.rtspMessageIndication(connectionId, message);
}
}
public void addListener(RtspListener listener) {
listeners.addElement(listener);
}
public void removeListener(RtspListener listener) {
listeners.removeElement(listener);
}
public int createConnection(String address, int port) {
this.address = address;
this.port = port;
int connectionId = -1;
try {
Connection connection = new Connection(this, connectionCounter + 1,
address.getBytes(), port);
connections.addElement(connection);
connectionId = connection.connectionId;
connectionCounter++;
} catch (UnknownHostException e) {
Log.error("[EXCEPTION]: Unknown host.");
connectionId = -2;
}
catch (ConnectException e) {
Log.error("[EXCEPTION]: Can't connect to server.");
connectionId = -3;
}
return connectionId;
}
public void addConnection(Socket socket) {
connectionCounter++;
Connection connection = new Connection(this, connectionCounter, socket);
connections.addElement(connection);
}
public void removeConnection(int connectionId) {
Connection connection = getConnection(connectionId);
connections.removeElement(connection);
for (int i = 0; i < listeners.size(); i++) {
RtspListener listener = (RtspListener) listeners.elementAt(i);
listener.rtspConnectionTerminated(connectionId);
}
}
public void closeConnection(int connectionId) {
Connection connection = getConnection(connectionId);
if (connection != null) {
connection.close();
connections.removeElement(connection);
} else {
System.out.println("connection not found!");
}
}
public Connection getConnection(int connectionId) {
Connection connection = null;
for (int i = 0; i < connections.size(); i++) {
Connection tmpConnection = (Connection) connections.elementAt(i);
if (tmpConnection.connectionId == connectionId) {
connection = tmpConnection;
break;
}
}
return connection;
}
}
|