Advertisement
Guest User

ServerService

a guest
Mar 18th, 2014
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.24 KB | None | 0 0
  1. package com.services;
  2.  
  3. import java.io.IOException;
  4. import java.net.DatagramPacket;
  5. import java.net.DatagramSocket;
  6. import java.net.InetAddress;
  7. import java.net.SocketException;
  8. import java.util.ArrayList;
  9. import com.classes.*;
  10. import com.database.DBHandler;
  11. import com.takenumber.TakeNumber.MessageHandler;
  12. import android.app.Service;
  13. import android.content.Context;
  14. import android.content.Intent;
  15. import android.content.SharedPreferences;
  16. import android.content.SharedPreferences.Editor;
  17. import android.net.wifi.WifiManager;
  18. import android.os.AsyncTask;
  19. import android.os.Binder;
  20. import android.os.Bundle;
  21. import android.os.Handler;
  22. import android.os.IBinder;
  23. import android.os.Message;
  24. import android.os.Messenger;
  25. import android.os.RemoteException;
  26. import android.preference.PreferenceManager;
  27. import android.widget.Toast;
  28.  
  29. public class ServerService extends Service {
  30.  
  31.     private MessageHandler messageHandlerIn = new MessageHandler();
  32.     private Messenger messageHandler;
  33.     private String deviceType;
  34.     private ArrayList<Client> clients = new ArrayList<Client>();
  35.     private InetAddress broadcastInetAdress;
  36.     private DatagramSocket socketIn, socketOut;
  37.     private byte[] bufIn = new byte[2000];
  38.     private byte[] bufOut = new byte[2000];
  39.     private DatagramPacket packetIn = new DatagramPacket(bufIn, bufIn.length);
  40.     private DatagramPacket packetOut = new DatagramPacket(bufOut, bufOut.length);
  41.     private SharedPreferences sp;
  42.     private Editor spEditor;
  43.     private Messenger activityMessenger = new Messenger(new IncomingHandler());
  44.    
  45.     public void onCreate() {
  46.         super.onCreate();
  47.        
  48.         WifiManager wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE);
  49.         if (wifi != null){
  50.             WifiManager.WifiLock lock = wifi.createWifiLock("mylock");
  51.             lock.acquire();
  52.         }
  53.        
  54.         // Shared prefs init
  55.         sp           = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
  56.         spEditor     = sp.edit();
  57.        
  58.         db = new DBHandler(getApplicationContext());
  59.        
  60.         // Socket + broadcast adress init
  61.         try {
  62.             broadcastInetAdress   = InetAddress.getByName("255.255.255.255");
  63.             socketOut                 = new DatagramSocket(StaticValues.PORT_TOCLIENT);
  64.             socketIn                  = new DatagramSocket(StaticValues.PORT_TOSERVER);
  65.         } catch (IOException e) {
  66.             e.printStackTrace();
  67.         }
  68.     }
  69.    
  70.    
  71.     @Override
  72.     public int onStartCommand(Intent intent,  int flags, int startId) {
  73.         // Get data from previous activity
  74.             Bundle extras    = intent.getExtras();
  75.            
  76.             String messageType = (String) extras.get("messageType");
  77.             deviceType         = (String) extras.get("devicetype");
  78.            
  79.             if (messageType.equals(StaticValues.MESSAGE_START_SERVICE)) {
  80.                 messageHandler       = (Messenger) extras.get("MESSENGER");
  81.                
  82.                 sendMessageToActivity(StaticValues.MESSAGE_ADD_MESSENGER, StaticValues.NOSTRING); // Send messenger to activity
  83.                 sendMessageToActivity(StaticValues.MESSAGE_SERVICE_LOADED, StaticValues.NOSTRING); // Service loaded
  84.                
  85.                 getUdpMessages();
  86.                 shouldThisServiceRun();
  87.                
  88.             } else if (messageType.equals(StaticValues.MESSAGE_PASS_TO_SERVICE)) {
  89.                 String message       = (String) extras.get("message");
  90.                 String sendTo        = (String) extras.get("sendTo");
  91.                 sendMessageToClients(sendTo, null, message);
  92.             }
  93.        
  94.            
  95.         return Service.START_NOT_STICKY;
  96.     }
  97.    
  98.    
  99.    
  100.     /*
  101.      * Get messages from UI
  102.      */
  103.    
  104.     static class IncomingHandler extends Handler {
  105.         @Override
  106.         public void handleMessage(Message incomingMessage) {
  107.             String stringMessage = (String)incomingMessage.obj;
  108.            
  109.             if (stringMessage.equals(StaticValues.MESSAGE_NUMBER_TAKEN))
  110.            
  111.             System.out.println("Message from UI: " + stringMessage);
  112.         }
  113.     }
  114.    
  115.    
  116.     /*
  117.      * Send messages to UI
  118.      */
  119.     public void sendMessageToActivity(String messageType, String messageString) {
  120.        
  121.         try {
  122.             Message message = Message.obtain();
  123.             if (messageType.equals(StaticValues.MESSAGE_ADD_MESSENGER)) {
  124.                 message.obj = new Messenger(messageHandlerIn);
  125.             } else {
  126.                 message.obj = messageType + StaticValues.MESSAGE_DELIMITER + messageString;
  127.             }
  128.             messageHandler.send(message);
  129.            
  130.         } catch (RemoteException e) {
  131.             e.printStackTrace();
  132.         }
  133.     }
  134.    
  135.    
  136.    
  137.    
  138.     /*
  139.      * Get UDP messages from clients
  140.      */
  141.    
  142.     private InetAddress clientIP;
  143.     private String message, clientDevice;
  144.     private String[] splittedMessages;
  145.     private DBHandler db;
  146.    
  147.     public void getUdpMessages() {
  148.         new Thread(new Runnable() {
  149.             public void run() {
  150.                
  151.                     try {
  152.                         while(sp.getBoolean(StaticValues.SERVER_RUNNING, false)) { 
  153.                             // Message from client received
  154.                            
  155.                                 socketIn.receive(packetIn);
  156.                                 message          = new String(packetIn.getData(), packetIn.getOffset(), packetIn.getLength());
  157.                                  
  158.                             // Split message
  159.                                 splittedMessages = message.split(StaticValues.MESSAGE_DELIMITER);
  160.                                
  161.                             // Connection request - add client to arraylist
  162.                                 if (splittedMessages[0].equals(StaticValues.MESSAGE_UDP_REQUEST)) {
  163.                                     clientIP     = packetIn.getAddress();
  164.                                     clientDevice = splittedMessages[1];
  165.                                    
  166.                                     Client client = new Client(clientIP, clientDevice);
  167.                                     clients.add(client);
  168.                                     sendMessageToClients(StaticValues.SENDTO_IP, client.ipAdress, StaticValues.MESSAGE_UDP_CONFIRMED); // confirmation on the request
  169.  
  170.                                     // send all categories to client
  171.                                         String messageOut;
  172.                                         int isVisible = 1;
  173.                                         for (Category category : db.getAllCategories()) {
  174.                                             if (category.visible) {
  175.                                                 isVisible = 1;
  176.                                             } else {
  177.                                                 isVisible = 0;
  178.                                             }
  179.                                            
  180.                                             messageOut = StaticValues.MESSAGE_ADD_CATEGORY + StaticValues.MESSAGE_DELIMITER + category.id + StaticValues.MESSAGE_DELIMITER + category.title + StaticValues.MESSAGE_DELIMITER + isVisible;
  181.                                             sendMessageToClients(StaticValues.SENDTO_IP, client.ipAdress, messageOut); // confirmation on the request
  182.                                         }
  183.                                
  184.                                         sendMessageToClients(StaticValues.SENDTO_IP, client.ipAdress, StaticValues.MESSAGE_ADD_CATEGORY_TO_GUI); // confirmation on the request
  185.  
  186.                                    
  187.                             // Number taken by client
  188.                                 } else if (splittedMessages[0].equals(StaticValues.MESSAGE_NUMBER_TAKEN)) {
  189.                                     System.out.println("SOMEONE TOOK A NUMBER");
  190.                                     sendMessageToActivity(StaticValues.MESSAGE_SHOW_TOAST, "Someone took a number man!");
  191.                                 }
  192.                         }
  193.        
  194.                     } catch (SocketException e) {
  195.                         e.printStackTrace();
  196.                     } catch (IOException e) {
  197.                         e.printStackTrace();
  198.                     }
  199.                
  200.             }
  201.           }).start();
  202.     }
  203.    
  204.    
  205.  
  206.     /*
  207.      * Outgoing messages to clients
  208.      * sendTo = send the message to who? (ip/all/specific devices)
  209.      */
  210.     public void sendMessageToClients(String sendTo, InetAddress ipAdress, String message) {
  211.         try {
  212.             // Send to all clients
  213.                 if (sendTo.equals(StaticValues.SENDTO_ALL)) {
  214.                
  215.             // Send to specific IP adress
  216.                 } else if (sendTo.equals(StaticValues.SENDTO_IP)) {
  217.                     bufOut    = message.getBytes();
  218.                     packetOut = new DatagramPacket(bufOut, bufOut.length, ipAdress, StaticValues.PORT_TOCLIENT);
  219.                     socketOut.send(packetOut);     
  220.                    
  221.             // Send to all "take number" devices
  222.                 } else if (sendTo.equals(StaticValues.SENDTO_DEVICES_TAKENUMBER)) {
  223.                    
  224.                 }
  225.            
  226.         } catch (IOException e) {
  227.             e.printStackTrace();
  228.         }
  229.     }
  230.    
  231.    
  232.    
  233.    
  234.    
  235.     /*
  236.      * Checks if the Service still should be running
  237.      */
  238.    
  239.     public void shouldThisServiceRun() {
  240.         new Thread(new Runnable() {
  241.             public void run() {
  242.                            
  243.                 while(sp.getBoolean(StaticValues.SERVER_RUNNING, false)) {
  244.                     try {
  245.                         // Send message to UI
  246.                         Thread.sleep(200);
  247.                     } catch (InterruptedException e) {
  248.                         e.printStackTrace();
  249.                         }
  250.                 }
  251.                 // Closing the service
  252.                 stopThisService();
  253.                
  254.             }
  255.           }).start();
  256.     }
  257.    
  258.    
  259.    
  260.     public void stopThisService() {
  261.         spEditor.putBoolean(StaticValues.SERVER_RUNNING, false);
  262.         spEditor.putBoolean(StaticValues.CLIENT_RUNNING, false);
  263.         spEditor.commit();
  264.         socketIn.close();
  265.         socketOut.close();
  266.         stopSelf();
  267.     }
  268.    
  269.    
  270.    
  271.     /*
  272.      * Overrides
  273.      */
  274.    
  275.     public void onDestroy() {
  276.         super.onDestroy();
  277.         // stopThisService();
  278.     }
  279.    
  280.     @Override
  281.     public IBinder onBind(Intent arg0) {
  282.         System.out.println("onBind");
  283.         return activityMessenger.getBinder();
  284.     }
  285.  
  286. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement