Home | History | Annotate | Download | only in rpc_performance
      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