mirror of https://github.com/grpc/grpc.git
Add helper function for getting endpoint binder in Java (#27598)
Also update the server side URI scheme to use path instead of authority See gRFC L85-core-binder-transport.md for more detailspull/27651/head
parent
b8e01f73a0
commit
f58f903a4f
8 changed files with 98 additions and 34 deletions
@ -1,28 +1,25 @@ |
||||
package io.grpc.binder.cpp.exampleserver; |
||||
|
||||
import android.app.Service; |
||||
import android.os.IBinder; |
||||
import android.content.Intent; |
||||
import android.os.IBinder; |
||||
import io.grpc.binder.cpp.GrpcCppServerBuilder; |
||||
|
||||
/** Exposes gRPC services running in the main process */ |
||||
public final class ExportedEndpointService extends Service { |
||||
private final IBinder binder; |
||||
|
||||
static { |
||||
System.loadLibrary("app"); |
||||
} |
||||
|
||||
public ExportedEndpointService() { |
||||
init_grpc_server(); |
||||
binder = get_endpoint_binder(); |
||||
} |
||||
|
||||
@Override |
||||
public IBinder onBind(Intent intent) { |
||||
return binder; |
||||
// The argument should match the URI passed into grpc::ServerBuilder::AddListeningPort
|
||||
return GrpcCppServerBuilder.GetEndpointBinder("binder:example.service"); |
||||
} |
||||
|
||||
public native void init_grpc_server(); |
||||
|
||||
public native IBinder get_endpoint_binder(); |
||||
} |
||||
|
@ -0,0 +1,38 @@ |
||||
// Copyright 2021 gRPC authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package io.grpc.binder.cpp; |
||||
|
||||
import android.os.IBinder; |
||||
import android.util.Log; |
||||
|
||||
/* EXPERIMENTAL. Provides a interface to get endpoint binder from C++ */ |
||||
public class GrpcCppServerBuilder { |
||||
private static final String logTag = "GrpcCppServerBuilder"; |
||||
|
||||
public static IBinder GetEndpointBinder(String uri) { |
||||
String scheme = "binder:"; |
||||
if (uri.startsWith(scheme)) { |
||||
String path = uri.substring(scheme.length()); |
||||
// TODO(mingcl): Consider if we would like to make sure the path only contain valid
|
||||
// characters here
|
||||
return GetEndpointBinderInternal(path); |
||||
} else { |
||||
Log.e(logTag, "URI " + uri + " does not start with 'binder:'"); |
||||
return null; |
||||
} |
||||
} |
||||
|
||||
private static native IBinder GetEndpointBinderInternal(String conn_id); |
||||
} |
Loading…
Reference in new issue