PushService.java
上传用户:weisa_1
上传日期:2007-10-14
资源大小:287k
文件大小:3k
源码类别:

手机WAP编程

开发平台:

Java

  1. package push;
  2. import members.Members;
  3. import java.util.Vector;
  4. import java.util.StringTokenizer;
  5. /**
  6.  * Handling of user selected push services
  7.  *
  8.  * @version 1.0
  9.  * @since 1.0
  10.  * @see Runnable
  11.  */
  12. public final class PushService implements Runnable {
  13.     private final PushInitiator pusher;
  14.     private final String serviceContextPath;
  15.     /**
  16.      * interval in hours between Push message submissions
  17.      */
  18.     private final int interval;
  19.     private final String addressType;
  20.     public static final String SI_CONTENT_TYPE = "text/vnd.wap.si";
  21.     /**
  22.      * Creates a new <code>PushService</code> instance.
  23.      *
  24.      * @param pusher a <code>PushInitiator</code> value
  25.      * @param serviceContextPath a <code>String</code> value
  26.      * @param interval an <code>int</code> value; in hours
  27.      */
  28.     public PushService(PushInitiator pusher, String serviceContextPath, String addressType, int interval) {
  29. this.pusher = pusher;
  30. this.serviceContextPath = serviceContextPath;
  31. this.interval = interval; 
  32. this.addressType = addressType;
  33.     }
  34.     /**
  35.      * A push service checker thread sends push messages related to ordered services
  36.      */
  37.     public void run() {
  38. while(true){
  39.     try {
  40. Vector users = User.getUsersOnline();
  41. for(int i=0; i<users.size(); i++) {
  42.     User user = (User)users.get(i);
  43.     String name = user.getName();
  44.     String pushServices = user.getPushServices();
  45.     /* Check if the user has selected push services. If so, then generate 
  46.        and send (if not yet sent within a time interval) a push message! */
  47.     if (pushServices != null){
  48. StringTokenizer st = new StringTokenizer(pushServices, ";");
  49. while (st.hasMoreTokens()){
  50.     int serviceId = Integer.parseInt(st.nextToken());
  51.     Object pushService = Members.getPushService(serviceId);
  52.     String serviceName =  ((String[])pushService)[0];
  53.     String serviceUrl =  ((String[])pushService)[1];
  54.     Object serviceObject = user.getProperty(serviceName); 
  55.     if(serviceObject != null) {
  56. if((System.currentTimeMillis() - ((Long)serviceObject).longValue()) > 
  57.    interval*1000*60*60)
  58.     /* If there are more hours than specified by the interval variable 
  59.        from the previous submission, the service message is ready to
  60.        be sent again.*/
  61.     serviceObject = null;
  62.     }
  63.     if (serviceObject == null) {
  64. String url = serviceContextPath + serviceUrl;
  65. String message = PushInitiator.createSiMessage(url, null, null, null,
  66.        null, serviceName);
  67. String address = user.getAddress(addressType);
  68. System.out.println(message);
  69. System.out.println("client Address = " + address);
  70. if(address != null && !address.trim().equals("")) {
  71.     try {
  72.    
  73. pusher.sendPushMessage(address, addressType, message, SI_CONTENT_TYPE);
  74. user.setProperty(serviceName, new Long(System.currentTimeMillis()));
  75.     }
  76.     catch(Exception ee) {
  77. System.err.println("Error in sending push message!");
  78.     }
  79. }
  80.     }
  81. }
  82.     }
  83. }
  84.     }
  85.     catch(Exception e) { e.printStackTrace(); }
  86.     try {
  87. Thread.sleep(10000); // 10 s
  88.     } catch(InterruptedException e){}
  89. }
  90.     }
  91. }