mt
Class ServidorBT

java.lang.Object
  extended by javax.microedition.lcdui.Displayable
      extended by javax.microedition.lcdui.Canvas
          extended by mt.TelaBT
              extended by mt.ServidorBT
All Implemented Interfaces:
java.lang.Runnable, javax.microedition.lcdui.CommandListener

public class ServidorBT
extends TelaBT

Recebe conexões (via Bluetooth) de outros celulares-cliente, exibe suas posições, configura e inicia a partida (criando os proxies JogadorBT para cada jogador remoto).

Author:
Chester

Nested Class Summary
(package private)  class ServidorBT.ThreadMonitoraClientes
          Thread secunddária (verifica se houve desconexão de algum cliente).
 
Field Summary
(package private)  javax.microedition.io.StreamConnection[] connClientes
          Conexoes dos jogadores conectados.
 
Fields inherited from class mt.TelaBT
apelidos, APELIDOS_CPU, display, localDevice, midlet, okApelidoCommand, regras, SEPARADOR_ENV, SEPARADOR_REC, txtApelido, UUID_BT, voltarCommand
 
Fields inherited from class javax.microedition.lcdui.Canvas
DOWN, FIRE, GAME_A, GAME_B, GAME_C, GAME_D, KEY_NUM0, KEY_NUM1, KEY_NUM2, KEY_NUM3, KEY_NUM4, KEY_NUM5, KEY_NUM6, KEY_NUM7, KEY_NUM8, KEY_NUM9, KEY_POUND, KEY_STAR, LEFT, RIGHT, UP
 
Constructor Summary
ServidorBT(MiniTruco midlet)
          Inicializa o servidor
 
Method Summary
 void commandAction(javax.microedition.lcdui.Command cmd, javax.microedition.lcdui.Displayable arg1)
          Processa comandos de menu exclusivos do servidor
(package private)  void desconecta(int slot)
          Desconecta um jogador (ou notifica desistência do servidor) e exibe a tela de jogadores
 void encerraSessaoBT()
          Interrompe as threads e quaisquer conexões existentes
 void enviaMensagem(int slot, java.lang.String comando)
          Envia uma linha de texto para o cliente no slot especificado.
 int getNumClientes()
          Conta quantos clientes estão conectados
 int getPosicaoMesa(int i)
          Recupera a posição na mesa para o jogador conectado na posição i.
 void run()
          Loop da thread principal (que recebe e processa as conexões dos clientes)
 void setModoSetup(boolean isSetup)
          Coloca o servidor no modo "jogo" (não aceita conexões e exibe a mesa de jogo) ou "setup" (exibe os usuários conectados e aceita novas conexões apenas se houver vaga).
 
Methods inherited from class mt.TelaBT
alerta, alerta, log, paint, setTelaMsg, split
 
Methods inherited from class javax.microedition.lcdui.Canvas
getGameAction, getHeight, getKeyCode, getKeyName, getWidth, hasPointerEvents, hasPointerMotionEvents, hasRepeatEvents, hideNotify, isDoubleBuffered, keyPressed, keyReleased, keyRepeated, pointerDragged, pointerPressed, pointerReleased, repaint, repaint, serviceRepaints, showNotify
 
Methods inherited from class javax.microedition.lcdui.Displayable
addCommand, isShown, removeCommand, setCommandListener
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

connClientes

javax.microedition.io.StreamConnection[] connClientes
Conexoes dos jogadores conectados.

Constructor Detail

ServidorBT

public ServidorBT(MiniTruco midlet)
Inicializa o servidor

Parameters:
midlet - referência ao programa principal
Method Detail

enviaMensagem

public void enviaMensagem(int slot,
                          java.lang.String comando)
Envia uma linha de texto para o cliente no slot especificado.

Se o slot espedificado estiver vazio, não faz nada.

Se o cliente der erro, processa sua desconexão (principal motivo do synchronized).

Parameters:
slot - índice do cliente em connClientes/outClientes
comando - texto do comando/notificação a enviar

desconecta

void desconecta(int slot)
Desconecta um jogador (ou notifica desistência do servidor) e exibe a tela de jogadores

Parameters:
slot - slot do jogador a desconectar (0 a 2). Se for -1, notifica desistência do servidor. Se for -2, não notifica nada (apenas encerra e vai para a tela).

run

public void run()
Loop da thread principal (que recebe e processa as conexões dos clientes)


getNumClientes

public int getNumClientes()
Conta quantos clientes estão conectados

Returns:
Número de clientes

encerraSessaoBT

public void encerraSessaoBT()
Interrompe as threads e quaisquer conexões existentes

Specified by:
encerraSessaoBT in class TelaBT

setModoSetup

public void setModoSetup(boolean isSetup)
Coloca o servidor no modo "jogo" (não aceita conexões e exibe a mesa de jogo) ou "setup" (exibe os usuários conectados e aceita novas conexões apenas se houver vaga).

Esta operação atualiza o indicador status para A ou L (no modo setup) ou J (no modo jogo). Caso ele já esteja previamente em X (encerramento), o notifier é desligado, independente de isSetup

Parameters:
isSetup - true para modo "setup", false para modo "jogo"

getPosicaoMesa

public int getPosicaoMesa(int i)
Description copied from class: TelaBT
Recupera a posição na mesa para o jogador conectado na posição i.

Este método permite que cliente e servidor compartilhem o código de desenho da tela (pois o que muda de um para outro é o "ponto de vista" mesmo - ambos têm que ter o jogador humano na posição 1)

Specified by:
getPosicaoMesa in class TelaBT
Parameters:
i - posição (1 a 4) na conexão (no cliente é a posição na lista recebida; no servidor é a posição de jogo mesmo)
Returns:
posição em que este jogador deve ser desenhado na mesa (e adicionado no jogo), na mesma convenção da classe Mesa (1=inferior, 2=direita, 3=superior, 4=esquerda)

commandAction

public void commandAction(javax.microedition.lcdui.Command cmd,
                          javax.microedition.lcdui.Displayable arg1)
Processa comandos de menu exclusivos do servidor

Specified by:
commandAction in interface javax.microedition.lcdui.CommandListener
Overrides:
commandAction in class TelaBT