|
|
tekzaf@yahoo.com |
Bu örnekte iki cep teleofunundaki midlet'ler ile bir chat yapıyoruz. Kullanıcı ilk önce nick'ini giriyor. Daha sonra chat formu gösteriliyor. Kullanıcı send komutunu seçinde text field'te yazdığı mesaj server'a gönderiliyor. Get komutunu seçinde server'a gönderilmiş son mesajı alıyor. (Aslında kendisinin görmediği tüm mesajları alması gerekir. Ancak bizim chat örneğimiz sadece en son eklenen mesajı vermekte.)
Server'de MultiMessagesServer.jsp kullanılmaktadır.
Göster Gizle Kopar Satır Gizle Satır Göster |
<%! static String lastMessage=""; %> <% String message=request.getParameter("message"); String req=request.getParameter("req"); String nick=request.getParameter("nick"); if(req.equals("GET")){ %><%=lastMessage%><% }else{ lastMessage=nick+">"+message; %>OK<% } %>
MultiMessagesServer JSP son gönderilen mesajı lastMessage değişkeninde tutmakta. Eğer req paremtresi GET olrak verilmişse (mesaj isteniyorsa) lastMessage değişkeni cevap olarak verilir.
%><%=lastMessage%><%
JSP'de <%,%> işaretleri dışındaki her şey cevap olarak gönderilir. %><%=lastMessage%><% ifadesi lastMessage değişkeninin değerini vermek içindir.
Göster Gizle Kopar Satır Gizle Satır Göster |
1 import javax.microedition.midlet.*; 2 import javax.microedition.lcdui.*; 3 import javax.microedition.io.*; 4 import java.util.*; 5 import java.io.*; 6 public class ChatMIDlet extends javax.microedition.midlet.MIDlet{ 7 ChatForm form; 8 public void startApp(){ 9 NickForm nickForm=new NickForm(this,"Chat Form"); 10 Display.getDisplay(this).setCurrent(nickForm); 11 } 12 public void pauseApp(){} 13 public void destroyApp(boolean unconditional){} 14 public void setNick(String nick){ 15 ChatForm form=new ChatForm("Chat Form",nick); 16 Display.getDisplay(this).setCurrent(form); 17 } 18 } 19 class ChatForm extends Form implements CommandListener{ 20 String url="http://localhost:8080/examples/midlet_test/MultiMessagesServer.jsp"; 21 Command sendCommand=new Command("Send",Command.SCREEN,2); 22 Command getCommand=new Command("Get",Command.SCREEN,1); 23 TextField messageField; 24 MessagesBox messagesBox; 25 String nick=""; 26 public ChatForm(String title,String nick){ 27 super(title); 28 this.nick=nick; 29 messagesBox=new MessagesBox("",""); 30 messageField=new TextField("","",100,TextField.ANY); 31 append(messageField); 32 append(messagesBox); 33 addCommand(sendCommand); 34 addCommand(getCommand); 35 setCommandListener(this); 36 } 37 public void commandAction(Command c, Displayable d){ 38 if(c==sendCommand){ 39 try{ 40 String s=messageField.getString(); 41 if(s!=null){ 42 String result=send(s); 43 messagesBox.append(nick+">"+s); 44 messageField.setString(""); 45 }else{ 46 messagesBox.append("String null"); 47 } 48 }catch(Exception e){ 49 messagesBox.append("Exception"+e.getMessage()); 50 } 51 }else if(c==getCommand){ 52 try{ 53 String s=get(); 54 if(s!=null){ 55 messagesBox.append(s.trim()); 56 }else{ 57 messagesBox.append("String null"); 58 } 59 }catch(Exception e){ 60 messagesBox.append("Exception"+e.getMessage()); 61 } 62 } 63 } 64 private String send(String message) throws Exception{ 65 HttpConnection connecton=(HttpConnection)Connector.open(url+"?message="+message+"&nick="+nick+"&req=SEND"); 66 InputStream is=connecton.openInputStream(); 67 StringBuffer buffer=new StringBuffer(); 68 int ch; 69 while ((ch=is.read())!=-1) { 70 buffer.append((char)ch); 71 } 72 is.close(); 73 connecton.close(); 74 return buffer.toString(); 75 } 76 private String get() throws Exception{ 77 StringBuffer sb=new StringBuffer(); 78 InputStream is=Connector.openInputStream(url+"?req=GET"); 79 int ch; 80 while((ch = is.read())!=-1) { 81 sb.append((char) ch); 82 } 83 return sb.toString(); 84 } 85 } 86 class MessagesBox extends StringItem{ 87 Vector messages=new Vector(); 88 public MessagesBox(String label, String text){ 89 super(label,text); 90 } 91 public void append(String message){ 92 messages.addElement(message); 93 refresh(); 94 } 95 public void refresh(){ 96 StringBuffer buffer=new StringBuffer(); 97 for(int i=(messages.size()-1);i>-1;i--){ 98 String message=(String)messages.elementAt(i); 99 buffer.append(message+"\n"); 100 } 101 setText(buffer.toString()); 102 } 103 } 104 class NickForm extends Form implements CommandListener{ 105 Command okCommand=new Command("Ok",Command.SCREEN,1); 106 TextField field; 107 ChatMIDlet midlet; 108 public NickForm(ChatMIDlet midlet,String title){ 109 super(title); 110 this.midlet=midlet; 111 field=new TextField("Nick:","",100,TextField.ANY); 112 append(field); 113 addCommand(okCommand); 114 setCommandListener(this); 115 } 116 public void commandAction(Command c, Displayable d){ 117 if(c==okCommand){ 118 String nick=field.getString(); 119 midlet.setNick(nick); 120 } 121 } 122 }
ChatMIDlet yüklendiğinde önce kullanıcının nick'ini almaktadır. Bunun için NickForm class'ı kullanılmıştır. Kullanıcı nick'i girip ok komutunu seçtiğinde
midlet.setNick(nick);
şeklinde midlet'in setNick method'u çağrılır. Bu işlem tamamlanınca chat formu görüntülenir.
ChatForm form=new ChatForm("Chat Form",nick); Display.getDisplay(this).setCurrent(form);
alınan nick ChatForm class'ına verilir.
ChatForm formuna mesajların yazıldığı bir TextField, bir de tüm mesajların gösterildiği MessagesBox eklenir. MessagesBox class'ı StringItem'dan extend ettiğimiz bir class'tır. Tüm mesajlar bir vectorde tutulur ve yeni bir mesaj eklendiği zaman append methodu çağrılır. Bu method vectordeki tüm mesajları gösterir. En son eklenen mesaj en üste gözükmesi için mesajlar ters sıradan gösterilirler.
ChatForm'da sendCommand mesaj göndermek için, getCommand mesaj almak için kullanılır. Mesaj göndermek için
HttpConnection connecton=(HttpConnection)Connector.open(url+"?message="+message+"&nick="+nick+"&req=SEND"); InputStream is=connecton.openInputStream();
şeklinde bir InputStream yaratılır. Paramtre olrak message,nick ve req olrakta SEND gönderilir. Daha sonra jsp'den dönen cevap gönderilir. Ancak biz bu cevabı kullanmıyoruz.
Mesaj almak içinse get method'u kullanılır.
InputStream is=Connector.openInputStream(url+"?req=GET"); int ch; while((ch = is.read())!=-1) { sb.append((char) ch); }
şeklinde InputStream yaratılır. Gelen cevap bir StringBuffer'a eklenir. Bu cevap en son eklenen mesaj olmaktadır.
|
|