Advertisement
Guest User

ServerService

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