1 module kissrpc.IDL.kissidlInterface;
2 
3 import kissrpc.IDL.kissidlMessage;
4 import kissrpc.IDL.kissidlService;
5 
6 import kissrpc.RpcRequest;
7 import kissrpc.RpcClientImpl;
8 import kissrpc.RpcClient;
9 import kissrpc.RpcResponse;
10 import kissrpc.Unit;
11 import flatbuffers;
12 import kissrpc.IDL.flatbuffer.kissidl;
13 
14 abstract class RpcAddressBookInterface{ 
15 
16 	this(RpcClient rpClient){ 
17 		rpImpl = new RpcClientImpl!(RpcAddressBookService)(rpClient); 
18 	}
19 
20 	Contacts getContactListInterface(const AccountName accountName, const RPC_PACKAGE_COMPRESS_TYPE compressType, const int secondsTimeOut, const size_t funcId = 712866408){
21 
22 		auto builder = new FlatBufferBuilder(512);
23 
24 		//input flatbuffer code for AccountNameFB class
25 
26 
27 
28 
29 				auto accountNamePos = AccountNameFB.createAccountNameFB(builder, builder.createString(accountName.name), accountName.count, );
30 
31 
32 		builder.finish(accountNamePos);
33 
34 		auto req = new RpcRequest(compressType, secondsTimeOut);
35 
36 		req.push(builder.sizedByteArray);
37 
38 		RpcResponse resp = rpImpl.syncCall(req, RPC_PACKAGE_PROTOCOL.TPP_FLAT_BUF, funcId);
39 
40 		if(resp.getStatus == RESPONSE_STATUS.RS_OK){
41 
42 			ubyte[] flatBufBytes;
43 			resp.pop(flatBufBytes);
44 
45 			auto ret_ContactsFB = ContactsFB.getRootAsContactsFB(new ByteBuffer(flatBufBytes));
46 			Contacts ret_Contacts;
47 
48 			//input flatbuffer code for ContactsFB class
49 
50 
51 
52 
53 				ret_Contacts.number = ret_ContactsFB.number;
54 		foreach(userInfoList; ret_ContactsFB.userInfoList){
55 
56 			UserInfo userInfoTmp;
57 			userInfoTmp.name = userInfoList.name;
58 			userInfoTmp.age = userInfoList.age;
59 			userInfoTmp.widget = userInfoList.widget;
60 			ret_Contacts.userInfoList ~= userInfoTmp;
61 		}
62 
63 
64 
65 			return ret_Contacts;
66 		}else{
67 			throw new Exception("rpc sync call error, function:" ~ RpcBindFunctionMap[funcId]);
68 		}
69 	}
70 
71 
72 	alias RpcgetContactListCallback = void delegate(Contacts);
73 
74 	void getContactListInterface(const AccountName accountName, RpcgetContactListCallback rpcCallback, const RPC_PACKAGE_COMPRESS_TYPE compressType, const int secondsTimeOut, const size_t funcId = 712866408){
75 
76 		auto builder = new FlatBufferBuilder(512);
77 		//input flatbuffer code for AccountNameFB class
78 
79 
80 
81 
82 				auto accountNamePos = AccountNameFB.createAccountNameFB(builder, builder.createString(accountName.name), accountName.count, );
83 
84 
85 		builder.finish(accountNamePos);
86 		auto req = new RpcRequest(compressType, secondsTimeOut);
87 
88 		req.push(builder.sizedByteArray);
89 
90 		rpImpl.asyncCall(req, delegate(RpcResponse resp){
91 
92 			if(resp.getStatus == RESPONSE_STATUS.RS_OK){
93 
94 				ubyte[] flatBufBytes;
95 				Contacts ret_Contacts;
96 
97 				resp.pop(flatBufBytes);
98 
99 				auto ret_ContactsFB = ContactsFB.getRootAsContactsFB(new ByteBuffer(flatBufBytes));
100 				//input flatbuffer code for ContactsFB class
101 
102 
103 
104 
105 				ret_Contacts.number = ret_ContactsFB.number;
106 		foreach(userInfoList; ret_ContactsFB.userInfoList){
107 
108 			UserInfo userInfoTmp;
109 			userInfoTmp.name = userInfoList.name;
110 			userInfoTmp.age = userInfoList.age;
111 			userInfoTmp.widget = userInfoList.widget;
112 			ret_Contacts.userInfoList ~= userInfoTmp;
113 		}
114 
115 
116 
117 				rpcCallback(ret_Contacts);
118 			}else{
119 				throw new Exception("rpc sync call error, function:" ~ RpcBindFunctionMap[funcId]);
120 			}}, RPC_PACKAGE_PROTOCOL.TPP_FLAT_BUF, funcId);
121 	}
122 
123 
124 	RpcClientImpl!(RpcAddressBookService) rpImpl;
125 }
126 
127