@Override
    public RpcResponse serve(ServiceRequestContext ctx, RpcRequest call) throws Exception {
        final int colonPos = call.method().indexOf(':');
        final String method;
        final String serviceName;
        if (colonPos < 0) {
            serviceName = "";
            method = call.method();
        } else {
            serviceName = call.method().substring(0, colonPos);
            method = call.method().substring(colonPos + 1);
        }

        // Ensure that such a service exists.
        final ThriftServiceEntry e = entries.get(serviceName);
        if (e != null) {
            // Ensure that such a method exists.
            final ThriftFunction f = e.metadata.function(method);
            if (f != null) {
                if (f.implementation() != null) {
                    final CompletableRpcResponse reply = new CompletableRpcResponse();
                    invoke(ctx, f.implementation(), f, call.params(), reply);
                    return reply;
                }
                // Should never reach here because of the way ThriftServiceEntry is created
                return RpcResponse.ofFailure(new TApplicationException(
                        TApplicationException.UNKNOWN, "null implementation: " + call.method()));
            }
        }
        return RpcResponse.ofFailure(new TApplicationException(
                TApplicationException.UNKNOWN_METHOD, "unknown method: " + call.method()));
    }
Returns the information about the Thrift services being served.

@return a {@link Map} whose key is a service name, which could be an empty string if this service
        is not multiplexed
thrift/thrift0.21/src/main/java/com/linecorp/armeria/server/thrift/ThriftCallService.java