segunda-feira, 28 de dezembro de 2009
Chat Teste
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 += " + value
+ "\\">"
+ value
+ "";
}
// 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
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.