1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements. See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership. The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the
7  * "License"); you may not use this file except in compliance
8  * with the License. You may obtain a copy of the License at
9  *
10  *   http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied. See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  */
19 package org.apache.thrift;
20 
21 import org.apache.thrift.async.AsyncMethodCallback;
22 import org.apache.thrift.protocol.TMessage;
23 import org.apache.thrift.protocol.TProtocol;
24 import org.apache.thrift.server.AbstractNonblockingServer;
25 
26 public abstract class AsyncProcessFunction<I, T extends TBase, R> {
27     final String methodName;
28 
AsyncProcessFunction(String methodName)29     public AsyncProcessFunction(String methodName) {
30         this.methodName = methodName;
31     }
32 
isOneway()33     protected abstract boolean isOneway();
34 
start(I iface, T args, AsyncMethodCallback<R> resultHandler)35     public abstract void start(I iface, T args, AsyncMethodCallback<R> resultHandler) throws TException;
36 
getEmptyArgsInstance()37     public abstract T getEmptyArgsInstance();
38 
getResultHandler(final AbstractNonblockingServer.AsyncFrameBuffer fb, int seqid)39     public abstract AsyncMethodCallback<R> getResultHandler(final AbstractNonblockingServer.AsyncFrameBuffer fb, int seqid);
40 
getMethodName()41     public String getMethodName() {
42         return methodName;
43     }
44 
sendResponse(final AbstractNonblockingServer.AsyncFrameBuffer fb, final TSerializable result, final byte type, final int seqid)45     public void sendResponse(final AbstractNonblockingServer.AsyncFrameBuffer fb, final TSerializable result, final byte type, final int seqid) throws TException {
46         TProtocol oprot = fb.getOutputProtocol();
47 
48         oprot.writeMessageBegin(new TMessage(getMethodName(), type, seqid));
49         result.write(oprot);
50         oprot.writeMessageEnd();
51         oprot.getTransport().flush();
52 
53         fb.responseReady();
54     }
55 }
56