segunda-feira, 28 de dezembro de 2009

Chat Teste

public User getFrom();
public User getTo();
public String getHTMLCode();

public String getName();

boolean isConnected();
public void disconnect();
public void checkSession();

public HttpServletResponse getResponse();
public HttpServletRequest getRequest();
public void setResponse(HttpServletResponse res);
public void setRequest(HttpServletRequest req);

public void addMessage(Message msg);
public Message getNewMessage();
public void showMessage(Message msg) throws IOException;

public User getFrom() {
return (from);
}
public User getTo() {
return (to);
}
public String getHTMLCode() {
return (" - " + getFrom().getName() + (getTo()!=null? " fala para " + getTo().getName() : "") + ": " + text + "
\\n");
}

private User from = null;
private User to = null;
private String text = null;
public GenericMessage(User from,String texto) {
this.from = from;
this.text = texto;
}
public GenericMessage(User from, User to, String texto) {
this(from,texto);
this.to = to;
}

private String name = null;

public ChatUser(String name) {
this.name = name;
if (ChatUser.getByName(getName()) != null) {
throw new IllegalArgumentException("Invalid username");
} else {
ChatUser.addUser(this);
}
}

public String getName() {
return name;
}

private HttpServletResponse res = null;
private HttpServletRequest request = null;

public HttpServletResponse getResponse() {
return res;
}

public void setResponse(HttpServletResponse res) {
this.res = res;
}

public HttpServletRequest getRequest() {
return request;
}

public void setRequest(HttpServletRequest request) {
this.request = request;
}

private boolean connected = true;

public boolean isConnected() {
return connected;
}

public void disconnect() {
connected = false;
}

public void checkSession() {
try {
if (getRequest().getSession() == null
|| getRequest().getSession().getAttribute("user") == null) {
this.disconnect();
}
} catch (IllegalStateException isex) {
this.disconnect();
}
}

private ArrayList messages = new ArrayList();

public void addMessage(Message msg) {
messages.add(msg);
synchronized (messages) {
// sinaliza para quem está esperando
messages.notifyAll();
}
}

public synchronized Message getNewMessage() {
if (messages.isEmpty()) {
// iremos inserir o codigo para esperar aqui
}
return (Message) (messages.remove(0));
}

try {
synchronized (messages) {
messages.wait(5 * 1000);
}
} catch (InterruptedException e) {
// o q fazer se der uma exception?
}
// se deu timeout
if (messages.isEmpty()) {
return (null);
}

// desconecta
this.disconnect();
// ele desconectou
return (null);

public static void addUser(User user);
public static void removeUser(User user) throws IOException;
protected static User getByName(String name);
public static Hashtable getUsers();
public static void sendMessage(Message msg) throws IOException;

private static Hashtable users = new Hashtable();

public static void addUser(User user) {
synchronized (users) {
users.put(user.getName(), user);
}
}


public static void removeUser(User user) throws IOException {
synchronized (users) {
// se não existir
if (!users.containsValue(user)) {
return;
}
// remove
users.remove(user.getName());
// desconecta
user.disconnect();
// notifica da saída
synchronized (user) {
user.notifyAll();
}
}
}

// envia uma mensagem para a sala
Message msg =
new GenericMessage(
user,
"deu no pé");
ChatUser.sendMessage(msg);

public static User getByName(String name) {
return (User) users.get(name);
}

public static Hashtable getUsers() {
synchronized (users) {
return (new Hashtable(users));
}
}

msg.getTo().addMessage(msg);
msg.getFrom().addMessage(msg);

// caso contrario envia para todos
Hashtable usersList = getUsers();
Iterator i = usersList.keySet().iterator();
while (i.hasNext()) {
String username = (String) i.next();
User user = ((User) usersList.get(username));
try {
user.addMessage(msg);
} catch (Exception e) {
e.printStackTrace();
removeUser(user);
}
}

public static void sendMessage(Message msg) throws IOException {

// se a mensagem tem um destinatario especifico
if (msg != null && msg.getTo() != null) {
msg.getTo().addMessage(msg);
msg.getFrom().addMessage(msg);
return;
}

// caso contrario envia para todos
Map usersList = getUsers();
Iterator i = usersList.keySet().iterator();
while (i.hasNext()) {
String username = (String) i.next();
User user = ((User) usersList.get(username));
try {
user.addMessage(msg);
} catch (Exception e) {
e.printStackTrace();
removeUser(user);
}
}
}





// se ja existir uma sessao, anula ela
if (req.getSession() != null
&& req.getSession().getAttribute("user") != null) {
req.getSession().invalidate();
}

// cria um usuario
try {
User user = new ChatUser(req.getParameter("login"));
// seta o usuario na session
req.getSession().setAttribute("user", user);
// seta o tempo limite da session (10 minutos)
req.getSession().setMaxInactiveInterval(10 * 60);
} catch (IllegalArgumentException iaex) {
// se ja existe um usuario, mostra a pagina de login denovo
res.getWriter().println(
"Ja existe um usuario com esse login:
");
return;
}

res.getWriter().print("");

final User user = (User) req.getSession(false).getAttribute("user");

E então checamos a mensagem e mostramos o formulário novamente:
view plainprint?
if (req.getParameter("message") != null) {
// se mensagem nao for vazia
if (!req.getParameter("message").trim().equals("")) {
// envia a mensagem (insira o codigo aqui)
}
}
// mostra o formulario novamente
doGet(req, res);

Message msg = new GenericMessage(
user,
ChatUser.getByName(req.getParameter("para")),
req.getParameter("message")
);
// envia a mensagem
ChatUser.sendMessage(msg);

// pega o codigo de listagem de usuarios
String codigoPara = "";
Iterator i = new HashMap(ChatUser.getUsers()).keySet().iterator();
while (i.hasNext()) {
String value = (String) i.next();
codigoPara += "";
}

// mostra o formulario
res.getWriter().print(
"
+ this.getClass().getName()
+ "\\" method=post>\\n"
+ "\\n"
+ "\\n\\t para "
+ "\\n\\t\\n"
+ "
\\n");

final User user = (User) req.getSession(false).getAttribute("user");
user.setResponse(res);
user.setRequest(req);

// envia a mensagem de entrada
ChatUser.sendMessage(
new GenericMessage(
user,
"entrou na sala: "
+ new SimpleDateFormat("hh:mm").format(new Date())));

// dorme eternamente, ate uma excecao ser jogada pois o usuario saiu da sala
while (user.isConnected()) {
try {
// espera uma nova mensagem e a envia (insira o codigo aqui)
} catch (java.net.SocketException e) {
user.addLog("socketexception:\\n" + exceptionToString(e));
user.disconnect();
} catch (Exception e) {
ChatUser.sendMessage(
new GenericMessage(user, exceptionToString(e)));
user.addLog("deu exception, desconectar: " + e.toString());
user.disconnect();
}

}

// espera pela proxima mensagem
Message msg = user.getNewMessage();

// checa a sessao
user.checkSession();

// se for uma mensagem, mostra ela, se nao, verifica a conexao
if (msg != null) {
user.showMessage(msg);
} else {
user.showMessage(null);
}

// tira o usuario da lista e tira sua sessao
ChatUser.removeUser(user);

// invalida a sessao
try {
session.invalidate();
} catch (IllegalStateException e) {
// a sessao ja estava invalidada
}

A história do Desperados 2

1883. Dois anos após a primeira aventura na cidade de El Paso, Cooper está agora à procura de pistas a respeito de uma misteriosa lenda indígena, e para isso contará com a ajuda e as habilidades de seus antigos companheiros. À medida que se avança pelas 14 missões e sub-missões do jogo, o jogador irá descobrir segredos sobre a misteriosa lenda a qual Cooper tanto procura, e que ela também está relacionada ao seu próprio passado.

John Cooper: Homem de poucas palavras, esse legítimo cowboy do oeste, é o líder do bando. Exímio atirador de facas, tem a capacidade para ataques mortais e silenciosos, mas também carrega consigo sua colt 45 no caso da situação se tornar um legítimo bang-bang, mostrando-se um excelente pistoleiro.

Kate O’Hara: A Bela, porém perigosa Kate, tem como principal habilidade o poder de usar o seu charme e beleza para seduzir e distrair todos os tipos adversários ou inimigos. Essa habilidade é de muita utilidade para que Cooper e sua turma possam realizar emboscadas com os pobres e apaixonados inimigos. Kate conta também com um oportuno estojo de maquiagem que pode ser utilizado para segar temporariamente seus oponentes.

Doc McCoy: Médico e charlatão, o caolho doutor com sua mira infalível e sua espingarda de mira telescópica, é capaz de alvejar os inimigos a distâncias impressionantes. Perito em produtos químicos, também pode manipular frascos de produtos tóxicos ou explosivos, mas sem dúvida sua habilidade médica é mais importante, já que Doc é o único do grupo capaz de curar seus parceiros e aliados.

Sam Williams: Perito em explosivos pode manipular desde bananas de dinamite a nitroglicerina pura, e essa aptidão explosiva será muito bem vinda tanto em combates, como na desobstrução de obstáculos e passagens. Munido de sua inseparável winchester, Sam é mortal em combates em curtas e médias distâncias.

Pablo Sanchez: Mexicano casca grossa e provido de força bruta, Sanches é ideal para utilizar armamento pesado que possam ser encontrados pelo caminho. Também pode distrair ou embebedar seus adversários para proporcionar vantagens nas emboscadas e ataques aos seus inimigos. Equipado com sua escopeta de cano duplo, pobre daquele que estiver frente a frente com Sanchez.

Hawkeye: Chefe da tribo Lobos Brancos, o pele vermelha é o integrante do grupo mais indicado para ações furtivas e silenciosas. Nenhuma das armas de Hawkeye que variam de arco e flecha e machadinha fazem barulho e sua aptidão para movimentos silenciosos tornam o sexto e último integrante do grupo ideal para momentos em que o sigilo fará a diferença para o sucesso ou o fracasso da missão.