⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wmacommunicationhandler.java

📁 SUN公司发布的SmartTicket 2.0蓝图
💻 JAVA
字号:
/* * Copyright 2001, 2002, 2003 Sun Microsystems, Inc. All Rights Reserved. * Except for any files in PNG format (which are marked with the filename * extension ".png"), GIF format (which are marked with the filename * extension ".gif"), or JPEG format (which are marked with the filename * extension ".jpg"), redistribution and use in source and binary forms, * with or without modification, are permitted provided that the * following conditions are met: * - Redistribution of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * - Redistribution in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * You may compile, use, perform and display the following files with * original Java Smart Ticket Sample Application code obtained from Sun * Microsystems, Inc. only: * - files in PNG format and having the ".png" extension * - files in GIF format and having the ".gif" extension * - files in JPEG format and having the ".jpg" extension * You may not modify or redistribute .png, .gif, or .jpg files in any * form, in whole or in part, by any means without prior written * authorization from Sun Microsystems, Inc. and its licensors, if any. * Neither the name of Sun Microsystems, Inc., the 'Java Smart Ticket * Sample Application', 'Java', 'Java'-based names, or the names of * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * This software is provided "AS IS," without a warranty of any kind. ALL * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN * MIDROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. * You acknowledge that this software is not designed, licensed or * intended for use in the design, construction, operation or maintenance * of any nuclear facility. * $Id: WMACommunicationHandler.java,v 1.9 2003/06/24 22:56:41 zull Exp $ */package com.sun.j2me.blueprints.smartticket.client.midp.model;import javax.microedition.io.*;import javax.wireless.messaging.*;import java.io.*;import com.sun.j2me.blueprints.smartticket.shared.midp.*;import com.sun.j2me.blueprints.smartticket.shared.midp.model.*;import com.sun.j2me.blueprints.smartticket.shared.midp.model.SeatingPlan.Seat;public class WMACommunicationHandler extends MessageHandler     implements MessageListener {    private MessageConnection connection = null;    private boolean threadStopRequested = false;    private RecommendationReceiver receiver = null;    private int pendingMessages = 0;    private final String smscAddress;    private final String listeningAddress;    public WMACommunicationHandler(MessageHandler nextHandler, String smsPort)             throws ApplicationException {        super(nextHandler);        smscAddress = "sms://"                       + System.getProperty("wireless.messaging.sms.smsc")                       + ":" + smsPort;        listeningAddress = "sms://:" + smsPort;        if (!isAlreadyRegistered()) {            try {                PushRegistry.registerConnection(listeningAddress,                                                 "com.sun.j2me.blueprints.smartticket.client.midp.SmartTicketMIDlet",                                                 "*");            } catch (Exception e) {                System.err.println(e);                e.printStackTrace();                throw new ApplicationException(e);            }         }         return;    }    private boolean isAlreadyRegistered() {        String[] connections = PushRegistry.listConnections(false);        for (int i = 0; i < connections.length; i++) {            if (connections[i].equals(listeningAddress)) {                return true;            }         }         return false;    }     public boolean isPushActivated() {        String[] connections = PushRegistry.listConnections(true);        for (int i = 0; i < connections.length; i++) {            if (connections[i].equals(listeningAddress)) {                return true;            }         }         return false;    }     public void init() throws ApplicationException {        return;    }     public void destroy() throws ApplicationException {        synchronized (this) {            threadStopRequested = true;            notify();        }         try {            if (connection != null) {                connection.setMessageListener(null);                connection.close();            }         } catch (IOException ioe) {}        return;    }     public void sendRecommendation(String text, MovieRating rating,                                    String[] recipients) throws ApplicationException {        if (recipients.length > 0) {            MessageConnection connection = null;            byte[] data = serializeMessageData(text, rating);            try {                connection =                     (MessageConnection) Connector.open(recipients[0]);                for (int i = 0; i < recipients.length; i++) {                    if (!recipients.equals(smscAddress)) {    // Do not send to himself                        BinaryMessage message =                             (BinaryMessage) connection.newMessage(MessageConnection.BINARY_MESSAGE,                                                                   recipients[i]);                        message.setPayloadData(data);                        connection.send(message);                        // System.err.println("Message: " + message + " sent to:" + recipients[i] + " by " + smscAddress);                    }                 }             } catch (IOException ioe) {                System.err.println(ioe);                ioe.printStackTrace();                throw new ApplicationException(ioe);            }             finally {                if (connection != null) {                    try {                        connection.close();                    } catch (IOException ioe) {}    // Ignored                }             }             // } else {            // throw new IllegalArgumentException("Empty recipient list.");        }     }     public void receiveRecommendation(RecommendationReceiver receiver)             throws ApplicationException {        this.receiver = receiver;        try {            connection = (MessageConnection) Connector.open(listeningAddress);            connection.setMessageListener(this);            threadStopRequested = false;            new Thread() {                public void run() {                    while (true) {                        try {                            synchronized (WMACommunicationHandler.this) {                                while (!threadStopRequested                                        && pendingMessages == 0) {                                    try {                                        WMACommunicationHandler.this.wait();                                    } catch (InterruptedException e) {}                                }                                 if (threadStopRequested) {                                    break;                                }                                 pendingMessages--;                            }                             try {                                Message message = connection.receive();                                if (message instanceof BinaryMessage) {                                    StringBuffer text = new StringBuffer();                                    MovieRating movieRating =                                         deserializeMessageData(((BinaryMessage) message).getPayloadData(),                                                                text);                                    String sender = message.getAddress();                                    WMACommunicationHandler.this.receiver.recommendationReceived(text.toString(),                                             movieRating, sender);                                }                             } catch (IOException ioe) {                                System.err.println(ioe);                                ioe.printStackTrace();                            }                         } catch (ApplicationException ae) {                            System.err.println(ae);                            // break;                        }                     }                 }             }.start();        } catch (IOException ioe) {            ioe.printStackTrace();            throw new ApplicationException(ioe);        }     }     public void notifyIncomingMessage(MessageConnection connection) {        // System.err.println(smscAddress + " notifyIncomingMessage.");        synchronized (this) {            pendingMessages++;            notify();        }     }     public String getSMSCAddress() throws ApplicationException {        return smscAddress;    }     private byte[] serializeMessageData(String text, MovieRating movieRating)             throws ApplicationException {        try {            ByteArrayOutputStream stream = new ByteArrayOutputStream();            DataOutputStream dataStream = new DataOutputStream(stream);            dataStream.writeUTF(text);            movieRating.serialize(dataStream);            dataStream.flush();            return stream.toByteArray();        } catch (IOException ioe) {            throw new ApplicationException(ioe);        }     }     private MovieRating deserializeMessageData(byte[] data, StringBuffer textBuffer)             throws ApplicationException {        try {            DataInputStream stream =                 new DataInputStream(new ByteArrayInputStream(data));            String text = stream.readUTF();            textBuffer.append(text);            MovieRating movieRating = MovieRating.deserialize(stream);            return movieRating;        } catch (IOException ioe) {            throw new ApplicationException(ioe);        }     } }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -