package blackberry466; import java.io.IOException; import java.util.Vector; import javax.microedition.io.Connector; import javax.microedition.io.Datagram; import javax.microedition.io.DatagramConnection; import net.rim.device.api.ui.Color; import net.rim.device.api.ui.DrawStyle; import net.rim.device.api.ui.Field; import net.rim.device.api.ui.FieldChangeListener; import net.rim.device.api.ui.Manager; import net.rim.device.api.ui.component.ButtonField; import net.rim.device.api.ui.component.Dialog; import net.rim.device.api.ui.component.EditField; import net.rim.device.api.ui.component.LabelField; import net.rim.device.api.ui.component.SeparatorField; import net.rim.device.api.ui.container.MainScreen; import net.rim.device.api.ui.decor.Background; import net.rim.device.api.ui.decor.BackgroundFactory; import net.rim.device.api.ui.UiApplication; // BEGIN final class EcranDemarrage extends MainScreen { public EcranDemarrage () { super ( Manager.NO_VERTICAL_SCROLL ); Journal.append ( "EcranDemarrage" ); threadecouteur = new ThreadEcouteur (); threadecouteur.start (); Journal.append ( "THRECO start" ); threadenvoi = new ThreadEnvoi (); threadenvoi.start (); Journal.append ( "THRENV start" ); LabelField lftitre = new LabelField ( "466 - Short Message Service", LabelField.USE_ALL_WIDTH | LabelField.USE_ALL_HEIGHT | DrawStyle.HCENTER ); Background backgroundtitre = BackgroundFactory.createSolidBackground ( Color.LIGHTSKYBLUE ); lftitre.setBackground ( backgroundtitre ); setBanner ( lftitre ); add ( new SeparatorField () ); add ( new SeparatorField () ); efdestinataire = new EditField ( "Pour le : ", "0494092835", 10, EditField.NON_FOCUSABLE ); efmessage = new EditField ( "Message : ", SHORT_MESSAGE_SERVICE, 140, EditField.NON_FOCUSABLE ); efstatut = new EditField ( "Statut de envoiDestinataireMessage () :", "", 140, Field.NON_FOCUSABLE ); MesButtonField mbfenvoyer = new MesButtonField ( "ENVOYER Short Message Service", ButtonField.CONSUME_CLICK | Field.FOCUSABLE | Field.FIELD_HCENTER | Field.FIELD_HCENTER, Color.PALETURQUOISE, 300 ); MesButtonField mbfjournal = new MesButtonField ( "JOURNAL DE L'APPLICATION", ButtonField.CONSUME_CLICK | Field.FOCUSABLE | Field.FIELD_HCENTER | Field.FIELD_VCENTER, Color.PEACHPUFF, 300 ); MesButtonField mbfquitter = new MesButtonField ( "QUITTER", ButtonField.CONSUME_CLICK | Field.FOCUSABLE | Field.FIELD_HCENTER | Field.FIELD_VCENTER, Color.LIGHTCORAL, 100 ); add ( efdestinataire ); add ( new SeparatorField () ); add ( efmessage ); add ( new SeparatorField () ); add ( efstatut ); add ( new SeparatorField () ); add ( mbfenvoyer ); add ( mbfjournal ); add ( mbfquitter ); mbfenvoyer.setChangeListener ( new FieldChangeListener () { public void fieldChanged ( Field field, int context ) { String destinataire = efdestinataire.getText (); String message = efmessage.getText (); if ( destinataire.length () > 0 && message.length () > 0 ) { envoiDestinataireMessage ( destinataire, message ); } efstatut.setText ( compteurmessagesms + " Short Message Service envoye(s)" ); compteurmessagesms++; Journal.append ( "SMS envoye" ); } }); mbfjournal.setChangeListener ( new FieldChangeListener () { public void fieldChanged ( Field field, int context ) { ecranjournal = new EcranJournal (); UiApplication.getUiApplication ().pushScreen ( ecranjournal ); } }); mbfquitter.setChangeListener ( new FieldChangeListener () { public void fieldChanged ( Field field, int context ) { Dialog.alert ( "Fermeture de 466 - Short Message Service" ); Thread.currentThread ().interrupt (); // ThreadJournal threadecouteur.stopper (); threadenvoi.stopper (); System.exit ( 0 ); } }); } // Override public boolean onClose () { Dialog.alert ( "Fermeture de 466 - Short Message Service" ); Thread.currentThread ().interrupt (); // ThreadJournal threadecouteur.stopper (); threadenvoi.stopper (); System.exit ( 0 ); return true; } private void envoiDestinataireMessage ( String destinataire, String message ) { threadenvoi.envoyer ( destinataire, message ); } private void receptionMessageSms ( Datagram datagram ) { String message = new String ( datagram.getData () ); Journal.append ( message ); } private class ThreadEcouteur extends Thread { public synchronized void stopper () { stopthreadecouteur = true; try { datagramconnection.close (); } catch ( IOException ioexception ) { Journal.append ( "THRECO_STO_IOE : " + ioexception.getMessage () ); } } // Override public void run () { try { datagramconnection = ( DatagramConnection ) Connector.open ( nomconnection ); for ( ; ; ) { if ( stopthreadecouteur ) { return; } Datagram datagram = datagramconnection.newDatagram ( datagramconnection.getMaximumLength () ); datagramconnection.receive ( datagram ); receptionMessageSms ( datagram ); } } catch ( IOException ioexception ) { Journal.append ( "THRECO_RUN_IOE : " + ioexception.getMessage () ); } } private boolean stopthreadecouteur = false; private DatagramConnection datagramconnection; } private static class ThreadEnvoi extends Thread { public synchronized void envoyer ( String destinataire, String message ) { startthreadenvoi = true; vector.addElement ( new MessageSms ( destinataire, message ) ); } public synchronized void stopper () { stopthreadenvoi = true; try { if ( datagramconnection != null ) { datagramconnection.close (); } } catch ( IOException ioexception ) { Journal.append ( "THRENV_STO_IOE : " + ioexception.getMessage () ); } } // Override public void run () { try { datagramconnection = ( DatagramConnection ) Connector.open ( nomconnection ); } catch ( IOException ioexception ) { Journal.append ( "THRENV_RUN_IOE_1: " + ioexception.getMessage () ); } for ( ; ; ) { while ( ! startthreadenvoi && ! stopthreadenvoi ) { try { sleep ( TIMEOUT ); } catch ( InterruptedException interruptedexception ) { Journal.append ( "THEENV_RUN_IE : " + interruptedexception.getMessage () ); } } if ( stopthreadenvoi ) { return; } while ( true ) { try { MessageSms messagesms = null; synchronized ( this ) { if ( ! vector.isEmpty () ) { messagesms = ( MessageSms ) vector.firstElement (); vector.removeElement ( messagesms ); } else { startthreadenvoi = false; break; } } datagramconnection.send ( messagesms.datagramEmis ( datagramconnection ) ); } catch ( IOException ioexception ) { Journal.append ( "THEENV_RUN_IOE_2 : " + ioexception.getMessage () ); } } } } private static final int TIMEOUT = 500; private Vector vector = new Vector ( 5 ); private DatagramConnection datagramconnection = null; private volatile boolean startthreadenvoi = false; private volatile boolean stopthreadenvoi = false; } private static final class MessageSms { public MessageSms ( String destinataire, String message ) { newdestinataire = destinataire; newmessage = message; } public Datagram datagramEmis ( DatagramConnection datagramconnection ) throws IOException { byte [] donnees = newmessage.getBytes (); Datagram datagram = datagramconnection.newDatagram ( donnees, donnees.length ); datagram.setAddress ( "//" + newdestinataire ); return datagram; } private String newdestinataire; private String newmessage; } private EcranJournal ecranjournal; private EditField efdestinataire; private EditField efmessage; private EditField efstatut; private ThreadEcouteur threadecouteur; private ThreadEnvoi threadenvoi; private int compteurmessagesms = 1; private static String nomconnection = "sms://"; private static String SHORT_MESSAGE_SERVICE = "les sanglots longs des violons de l automne blessent mon coeur d une langueur monotone " + "tout suffocant et bleme quand sonne l heure je me ..."; } // END