WiFiP2pServerTask.java 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package de.tudarmstadt.informatik.hostage.sync.wifi_direct;
  2. import android.util.Log;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.ObjectInputStream;
  6. import java.io.ObjectOutputStream;
  7. import java.io.OutputStream;
  8. import java.net.ServerSocket;
  9. import java.net.Socket;
  10. /**
  11. * Created by Julien on 07.01.2015.
  12. */
  13. public class WiFiP2pServerTask extends BackgroundTask {
  14. private ServerSocket serverSocket;
  15. @Override
  16. public void interrupt(boolean b){
  17. super.interrupt(b);
  18. if (b && this.serverSocket != null) {
  19. try {
  20. this.serverSocket.close();
  21. } catch (IOException e) {
  22. Log.e("WiFiP2pServerTask", e.getMessage());
  23. }
  24. }
  25. }
  26. public WiFiP2pServerTask(BackgroundTaskCompletionListener l){
  27. super(l);
  28. }
  29. @Override
  30. public boolean performInBackground(){
  31. while (!this.isInterrupted()){
  32. try {
  33. this.serverSocket = new ServerSocket(8988);
  34. Log.d("WiFiP2pServerTask", "Server: Socket opened");
  35. Socket client = this.serverSocket.accept();
  36. Log.d("WiFiP2pServerTask", "Server: connection done");
  37. this.handleConnection(client, this.serverSocket);
  38. client.close();
  39. serverSocket.close();
  40. return true;
  41. } catch (ClassNotFoundException e){
  42. e.printStackTrace();
  43. Log.e("WiFiP2pServerTask", e.getMessage());
  44. return false;
  45. } catch (IOException e) {
  46. e.printStackTrace();
  47. Log.e("WiFiP2pServerTask", e.getMessage());
  48. return false;
  49. }
  50. }
  51. return true;
  52. }
  53. private void handleConnection(Socket client, ServerSocket server) throws IOException, ClassNotFoundException {
  54. OutputStream os = client.getOutputStream();
  55. ObjectOutputStream oos = new ObjectOutputStream(os);
  56. oos.flush();
  57. InputStream is = client.getInputStream();
  58. ObjectInputStream ois = new ObjectInputStream(is);
  59. Object obj = ois.readObject();
  60. while (obj != null && obj instanceof WiFiP2pSerializableObject) {
  61. WiFiP2pSerializableObject receivedObj = ( WiFiP2pSerializableObject) obj;
  62. obj = null;
  63. WiFiP2pSerializableObject toSend = this.handleReceivedObject(receivedObj);
  64. if (toSend != null) {
  65. oos.writeObject(toSend);
  66. oos.flush();
  67. oos.reset();
  68. }
  69. try {
  70. obj = ois.readObject();
  71. }catch (IOException e){
  72. // IF NULL WAS TRANSMITTED
  73. obj = null;
  74. }
  75. }
  76. oos.close();
  77. os.close();
  78. ois.close();
  79. is.close();
  80. }
  81. public WiFiP2pSerializableObject handleReceivedObject(WiFiP2pSerializableObject receivedObj){
  82. return null;
  83. }
  84. }