Estou desenvolvendo uma aplicação cliente/servidor e estou tendo alguns problemas com o servidor. Preciso fazer com que se tenha um tipo de ação para cada requisição do cliente. Por exemplo, se o cliente dá play no vídeo, a sequencia de imagens é mostrada de um jeito. Se dá FF, é mostrada de outro (acelerado).
Eu estou tentando fazer isso passando parâmetros para uma classe anônima interna, a "public void actionPerformed (ActionEvent e)" (trecho que está comentado), mas não consigo. O programa faz tudo certinho, só não executa o que está dentro da "actionPerformed" quando tento passar algum parâmetro. Qual é o problema? Alguém tem alguma idéia de como posso fazer isso?
Pode parecer complexo, mas a pergunta é de iniciante mesmo.
Valeu aí por qualquer ajuda.
O código do meu servidor está aí:
public class AplicacaoServidor extends JFrame implements ActionListener
{
...
final static int INIT = 0;
final static int READY = 1;
final static int PLAYING = 2;
final static int SETUP = 3;
final static int PLAY = 4;
final static int PAUSE = 5;
final static int TEARDOWN = 6;
final static int FF = 7;
final static int RW = 8;
final static int FF2 = 9;
...
public AplicacaoServidor()
{
super("Aplicacao Servidor");
timer = new Timer(PERIODO_QUADRO, this);
timer.setInitialDelay(0);
timer.setCoalesce(true);
timer2 = new Timer(PERIODO_QUADRO2, this);
timer2.setInitialDelay(0);
timer2.setCoalesce(true);
timer3 = new Timer(PERIODO_QUADRO3, this);
timer3.setInitialDelay(0);
timer3.setCoalesce(true);
buf = new byte[15000];
b = new byte [15000];
addWindowListener(new WindowAdapter()
{
@Override
public void windowClosing(WindowEvent e)
{
timer.stop();
System.exit(0);
}
});
label = new JLabel("Enviando quadro # ", JLabel.CENTER);
getContentPane().add(label, BorderLayout.CENTER);
}
public static void main(String argv[]) throws Exception
{
...
}
private void enviaVideo()
{
if (controle < COMP_VIDEO)
{
controle++;
imagem = controle;
//int casa = traduz_resp_RTSP();
//if (casa==PLAY){imagem=controle;}
//else if (casa==FF){imagem=2*controle;}
//else if (casa==FF2){imagem=4*controle;}
//else if (casa==RW && controle>30){controle=controle-30};
//else {controle=1};
try
{
int tam_imagem = video.getTam(imagem);
byte[] frame = video.getImagem(imagem);
EmpacotaRTP pacote_rtp = new EmpacotaRTP(CARGA_UTIL, imagem, imagem*PERIODO_QUADRO, frame, tam_imagem);
int tam_pacote = pacote_rtp.gettamanho();
byte[] bitstream = new byte[tam_pacote];
pacote_rtp.getpacote(bitstream);
enviapacoteudp = new DatagramPacket(bitstream, tam_pacote, ClientIPAddr, RTP_porta_destino);
RTPsocket.send(enviapacoteudp);
System.out.println("Enviando frame #"+imagem);
pacote_rtp.mostracabecalho();
label.setText("Enviando frame #" + imagem);
}
catch(Exception ex)
{
System.out.println("Exception caught: "+ex);
System.exit(0);
}
}
else
{
timer.stop();
}
}
public void actionPerformed(ActionEvent e)
{
enviaVideo();
}
...
}