addParameter(Arguments params)方法,这样在具体消息中直接重写这个方法,来添加具体的参数。是不是很方便?^_^,具体协议还需要实现的两个方法分别是:getLabel和doTest。第一个方法时用于报告显示的请求名字,一般定义为消息名字+“Label”就OKay。第二个方法就是我们重点重写的方法,这里再贴段代码,是一个具体消息的实现:
1 package tea.client; 2 3 import com.google.protobuf.InvalidProtocolBufferException; 4 import com.google.protobuf.MessageLite; 5 import tea.client.network.BaseSample; 6 import tea.common.network.ClientMessage; 7 import tea.common.network.RPC.HeartBeat_C2S; 8 import tea.common.network.RPC.HeartBeat_S2C; 9 10 /** 11 * @author Teaey 12 * @creation 2012-8-24 13 */ 14 public class HeartBeatSample extends BaseSample 15 { 16 @Override 17 public MessageLite doTest() throws InvalidProtocolBufferException 18 { 19 HeartBeat_C2S.Builder request = HeartBeat_C2S.newBuilder(); 20 request.setTimestamp(System.currentTimeMillis()); 21 ClientMessage cm = new ClientMessage(); 22 cm.setContent(request.build().toByteArray()); 23 cm.setName("HeartBeat"); 24 ClientMessage sm = client.sendWaitBack(cm); 25 HeartBeat_S2C response = HeartBeat_S2C.parseFrom(sm.getContent()); 26 return response; 27 } 28 @Override 29 public String getLabel() 30 { 31 return "HeartBeatSample"; 32 } 33 } |
可以看到doTest的工作就是封装请求,并拿到父类的client发送,然后返回响应(send方式返回null),Okay,大功告成。