1 /* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.rpc_performance; 18 19 import android.app.Service; 20 import android.content.Intent; 21 import android.os.Binder; 22 import android.os.Debug; 23 import android.os.IBinder; 24 import android.util.Log; 25 import android.net.LocalServerSocket; 26 import android.net.LocalSocket; 27 28 import java.io.IOException; 29 import java.io.InputStream; 30 import java.io.OutputStream; 31 32 public class MiscService extends Service { 33 34 public static final String SOCKET_NAME = "play-misc-service"; 35 private static final String TAG = "MiscService"; 36 37 private LocalServerSocket mServerSocket = null; 38 39 @Override public void onCreate() { 40 Log.v(TAG, "onCreate"); 41 try { 42 mServerSocket = new LocalServerSocket(SOCKET_NAME); 43 } catch (IOException e) { 44 Log.v(TAG, "in onCreate, making server socket: " + e); 45 return; 46 } 47 48 Thread t = new Thread() { 49 @Override public void run() { 50 LocalSocket socket = null; 51 while (true) { 52 try { 53 Log.v(TAG, "Waiting for connection..."); 54 socket = mServerSocket.accept(); 55 Log.v(TAG, "Got socket: " + socket); 56 if (socket != null) { 57 startEchoThread(socket); 58 } else { 59 return; // socket shutdown? 60 } 61 } catch (IOException e) { 62 Log.v(TAG, "in accept: " + e); 63 } 64 } 65 } 66 }; 67 t.start(); 68 } 69 70 private void startEchoThread(final LocalSocket socket) { 71 Thread t = new Thread() { 72 @Override public void run() { 73 try { 74 InputStream is = socket.getInputStream(); 75 OutputStream os = socket.getOutputStream(); 76 while (true) { 77 int byteRead = is.read(); 78 if (byteRead < 0) { 79 return; // EOF. 80 } 81 os.write(byteRead); 82 } 83 } catch (IOException e) { 84 Log.v(TAG, "in echo thread loop: " + e); 85 } 86 } 87 }; 88 t.start(); 89 } 90 91 @Override public IBinder onBind(Intent intent) { 92 Log.v(TAG, "onBind"); 93 return mBinder; 94 } 95 96 private final IService.Stub mBinder = new IService.Stub() { 97 public String pingString(String v) { 98 return v; 99 } 100 public void pingVoid() { 101 } 102 public void startTracing(String name) { 103 Debug.startMethodTracing(name); 104 } 105 public void stopTracing() { 106 Debug.stopMethodTracing(); 107 } 108 }; 109 } 110