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