소스 검색

WxAdoInterface改成静态库(因为protobuf传递给dll时,在dll内部分配内存,返回到exe时就被释放了。)

Jeff 6 년 전
부모
커밋
b2c1b851f8

+ 3 - 3
mysql.sql

@@ -21,12 +21,12 @@ SET FOREIGN_KEY_CHECKS=0;
 DROP TABLE IF EXISTS `customer`;
 CREATE TABLE `customer` (
   `csr_id` varchar(16) NOT NULL COMMENT '用户id',
-  `csr_name` varchar(255) DEFAULT NULL COMMENT '用户姓名或昵称',
+  `csr_name` varchar(255) DEFAULT '' COMMENT '用户姓名或昵称',
   `csr_phone` varchar(16) NOT NULL COMMENT '用户电话',
   `csr_gender` bit(1) NOT NULL COMMENT '用户性别',
   `csr_password` varchar(32) NOT NULL COMMENT '用户密码',
-  `csr_old_phone` varchar(16) DEFAULT NULL COMMENT '用户旧手机(换手机)',
-  `csr_vcode` varchar(32) DEFAULT NULL COMMENT '用户验证码(用于忘记密码)',
+  `csr_old_phone` varchar(16) DEFAULT '' COMMENT '用户旧手机(换手机)',
+  `csr_vcode` varchar(32) DEFAULT '' COMMENT '用户验证码(用于忘记密码)',
   `vcode_expiry_time` datetime DEFAULT NULL COMMENT '验证码有效时间',
   `enable` bit(1) DEFAULT 0 COMMENT '启用\禁用',
   PRIMARY KEY (`csr_id`)

+ 6 - 0
source/hook/WeChats/WeChats.vcproj

@@ -45,6 +45,7 @@
 			<Tool
 				Name="VCCLCompilerTool"
 				Optimization="0"
+				AdditionalIncludeDirectories="..\Include"
 				PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG"
 				MinimalRebuild="true"
 				BasicRuntimeChecks="3"
@@ -67,7 +68,9 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
+				AdditionalDependencies="libprotobuf.lib libprotobuf-lite.lib libprotoc.lib"
 				LinkIncremental="2"
+				AdditionalLibraryDirectories="..\lib;"
 				UACExecutionLevel="2"
 				GenerateDebugInformation="true"
 				SubSystem="2"
@@ -126,6 +129,7 @@
 				Name="VCCLCompilerTool"
 				Optimization="2"
 				EnableIntrinsicFunctions="true"
+				AdditionalIncludeDirectories="..\Include"
 				PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"
 				MinimalRebuild="false"
 				RuntimeLibrary="2"
@@ -148,7 +152,9 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
+				AdditionalDependencies="libprotobuf.lib libprotobuf-lite.lib libprotoc.lib"
 				LinkIncremental="1"
+				AdditionalLibraryDirectories="..\lib;"
 				UACExecutionLevel="2"
 				GenerateDebugInformation="true"
 				SubSystem="2"

+ 6 - 5
source/hook/WeChats/WeChats.vcxproj

@@ -61,7 +61,7 @@
     </Midl>
     <ClCompile>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;PROTOBUF_USE_DLLS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <MinimalRebuild>true</MinimalRebuild>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
@@ -69,6 +69,7 @@
       <WarningLevel>Level3</WarningLevel>
       <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
       <AdditionalIncludeDirectories>..\Include</AdditionalIncludeDirectories>
+      <DisableSpecificWarnings>4018;4065;4146;4244;4251;4267;4305;4307;4309;4334;4355;4506;4800;4996</DisableSpecificWarnings>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -81,7 +82,7 @@
       <SubSystem>Windows</SubSystem>
       <TargetMachine>MachineX86</TargetMachine>
       <AdditionalLibraryDirectories>..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <AdditionalDependencies>libprotobuf.lib;libprotobuf-lite.lib;libprotoc.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>libprotobufd.lib;libprotobuf-lited.lib;libprotocd.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -93,7 +94,7 @@
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;PROTOBUF_USE_DLLS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <MinimalRebuild>false</MinimalRebuild>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
       <FunctionLevelLinking>true</FunctionLevelLinking>
@@ -119,7 +120,7 @@
     </Link>
   </ItemDefinitionGroup>
   <ItemGroup>
-    <ClCompile Include="..\pb\login.pb.cc">
+    <ClCompile Include="..\pb\msg.pb.cc">
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
     </ClCompile>
@@ -133,7 +134,7 @@
     <ClCompile Include="WeChatsDlg.cpp" />
   </ItemGroup>
   <ItemGroup>
-    <ClInclude Include="..\pb\login.pb.h" />
+    <ClInclude Include="..\pb\msg.pb.h" />
     <ClInclude Include="Global.h" />
     <ClInclude Include="IClient.h" />
     <ClInclude Include="InjectInterface.h" />

+ 4 - 4
source/hook/WeChats/WeChats.vcxproj.filters

@@ -33,7 +33,7 @@
     <ClCompile Include="WeChatsDlg.cpp">
       <Filter>源文件</Filter>
     </ClCompile>
-    <ClCompile Include="..\pb\login.pb.cc">
+    <ClCompile Include="..\pb\msg.pb.cc">
       <Filter>pb</Filter>
     </ClCompile>
   </ItemGroup>
@@ -62,12 +62,12 @@
     <ClInclude Include="WeChatsDlg.h">
       <Filter>头文件</Filter>
     </ClInclude>
-    <ClInclude Include="..\pb\login.pb.h">
-      <Filter>pb</Filter>
-    </ClInclude>
     <ClInclude Include="IClient.h">
       <Filter>头文件</Filter>
     </ClInclude>
+    <ClInclude Include="..\pb\msg.pb.h">
+      <Filter>pb</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <Image Include="res\WeChats.ico">

+ 1 - 1
source/hook/WxAdoInterface/Global.cpp

@@ -6,7 +6,7 @@
 #include <shlwapi.h>
 #pragma comment(lib,"shlwapi.lib")
 
-namespace Global
+namespace WxAdoGlobal
 {
 
 	TCHAR g_szModulePath[MAX_PATH] = _T("");			// Èí¼þĿ¼;

+ 1 - 1
source/hook/WxAdoInterface/Global.h

@@ -18,7 +18,7 @@
 #define DB_SW_CONN_WITHOUT_PORT		_T("Provider=sqloledb;Data Source=%s;Initial Catalog=%s;Trusted_Connection=yes;")
 #define DB_SW_CONN_WITHOUT_PORT2	_T("Provider=sqloledb;Data Source=%s;Initial Catalog=%d;Trusted_Connection=yes;")
 #endif
-namespace Global
+namespace WxAdoGlobal
 {
 	extern TCHAR g_szModulePath[MAX_PATH];			// Èí¼þĿ¼;
 	extern TCHAR g_szModuleFileName[MAX_PATH];		// Èí¼þÃû³Æ;

+ 23 - 45
source/hook/WxAdoInterface/WxAdoImpl.cpp

@@ -2,7 +2,7 @@
 #include "WxAdoImpl.h"
 #include "Global.h"
 #include "WxAdoPool.h"
-
+#include "table.pb.h"
 
 #define GETDBPTR(dwTimeOut) \
 pAdoObj pObj = NULL;\
@@ -20,11 +20,12 @@ enum UserLogInStatus
 CWxAdoImpl* CWxAdoImpl::m_pInstance = NULL;
 CWxAdoImpl::CWxAdoImpl(void):m_nRef(0),m_nObjRef(0)
 {
-
+	//::CoInitialize(NULL);//初始化COM环境
 }
 
 CWxAdoImpl::~CWxAdoImpl(void)
 {
+	//::CoUninitialize();
 }
 
 ULONG CWxAdoImpl::AddRef()
@@ -306,7 +307,7 @@ BOOL CWxAdoImpl::ExecuteSQL( IN LPCTSTR lpExcuteSQL, IN CONST DWORD &dwTimeOut /
 		_bstr_t bstrSource(e.Source());
 		_bstr_t bstrDescription(e.Description());
 		SolveDBError(e.Error(), pObj);
-		Global::WriteTextLog(_T("SQL出错:%08lx,%s,%s,%s"), e.Error(), e.ErrorMessage(), (TCHAR*)bstrSource, (TCHAR*)bstrDescription);
+		WxAdoGlobal::WriteTextLog(_T("SQL出错:%08lx,%s,%s,%s"), e.Error(), e.ErrorMessage(), (TCHAR*)bstrSource, (TCHAR*)bstrDescription);
 		return FALSE;
 	}
 
@@ -341,48 +342,25 @@ BOOL CWxAdoImpl::IsUserExist( IN LPCTSTR lpPhone, IN LPCTSTR lpPassword, OUT LPV
 		pObj->pCommand->CommandText = _bstr_t(strSql);
 		// 执行SQL语句,返回记录集
 		_RecordsetPtr rst = pObj->pCommand->Execute(NULL, NULL, adCmdText);
-		while(!rst->adoEOF)
+		tb_customer &customer = *(tb_customer*)lpOutUserInfo;
+		if(!rst->adoEOF)
 		{
-			#ifdef _DEBUG
-			CString strCustomerId;
- 			strCustomerId = rst->GetCollect(_T("csr_id")).bstrVal;
- 			OutputDebugString(strCustomerId);OutputDebugString(_T("\n"));
-
-			CString strCustomerName;
-			strCustomerName = rst->GetCollect(_T("csr_name")).bstrVal;
-			OutputDebugString(strCustomerName);OutputDebugString(_T("\n"));
-
-			CString strPhone;
-			strPhone = rst->GetCollect(_T("csr_phone")).bstrVal;
-			OutputDebugString(strPhone);OutputDebugString(_T("\n"));
-
-			BOOL bGender;
-			bGender = rst->GetCollect(_T("csr_gender")).boolVal == VARIANT_TRUE ? TRUE : FALSE;
-			OutputDebugString(bGender ? _T("男") : _T("女"));OutputDebugString(_T("\n"));
-
-			CString strPassword;
-			strPassword = rst->GetCollect(_T("csr_password")).bstrVal;
-			OutputDebugString(strPassword);OutputDebugString(_T("\n"));
-
-			CString strOldPhone;
-			strOldPhone = rst->GetCollect(_T("csr_old_phone")).bstrVal;
-			OutputDebugString(strOldPhone);OutputDebugString(_T("\n"));
-
-			CString strVCode;
-			strVCode = rst->GetCollect(_T("csr_vcode")).bstrVal;
-			OutputDebugString(strVCode);OutputDebugString(_T("\n"));
-
-			CString strDate;
-			COleDateTime dt(rst->GetCollect(_T("vcode_expiry_time")));
-			strVCode = dt.Format(_T("%Y-%m-%d %H:%M:%S"));
-			OutputDebugString(strDate);OutputDebugString(_T("\n"));
-
-			BOOL bEnable;
-			bEnable = rst->GetCollect(_T("enable")).boolVal == VARIANT_TRUE ? TRUE : FALSE;
-			OutputDebugString(bEnable ? _T("启用") : _T("禁用"));OutputDebugString(_T("\n"));
-
-			#endif
-			rst->MoveNext();
+			customer.set_customer_id(_bstr_t(rst->GetCollect(_T("csr_id")).bstrVal));
+			customer.set_customer_name(_bstr_t(rst->GetCollect(_T("csr_name")).bstrVal));
+			customer.set_customer_gender(rst->GetCollect(_T("csr_gender")).boolVal == VARIANT_TRUE ? TRUE : FALSE);
+			customer.set_customer_password(_bstr_t(rst->GetCollect(_T("csr_password")).bstrVal));
+			customer.set_customer_phone(_bstr_t(rst->GetCollect(_T("csr_phone")).bstrVal));
+			customer.set_customer_old_phone(_bstr_t(rst->GetCollect(_T("csr_old_phone")).bstrVal));
+			customer.set_customer_vcode(_bstr_t(rst->GetCollect(_T("csr_vcode")).bstrVal));
+			_variant_t var = rst->GetCollect(_T("vcode_expiry_time"));
+			if (var.vt == VT_EMPTY || var.vt == VT_NULL)
+				customer.set_customer_vcode_expiry_time(_T(""));
+			else
+			{
+				COleDateTime dt(var);
+				customer.set_customer_vcode_expiry_time(dt.Format(_T("%Y-%m-%d %H:%M:%S")));
+			}
+			customer.set_customer_enable(rst->GetCollect(_T("enable")).boolVal == VARIANT_TRUE ? TRUE : FALSE);
 		}
 		rst->Close();
 	}
@@ -391,7 +369,7 @@ BOOL CWxAdoImpl::IsUserExist( IN LPCTSTR lpPhone, IN LPCTSTR lpPassword, OUT LPV
 		_bstr_t bstrSource(e.Source());
 		_bstr_t bstrDescription(e.Description());
 		SolveDBError(e.Error(), pObj);
-		Global::WriteTextLog(_T("SQL出错:%08lx,%s,%s,%s"), e.Error(), e.ErrorMessage(), (TCHAR*)bstrSource, (TCHAR*)bstrDescription);
+		WxAdoGlobal::WriteTextLog(_T("SQL出错:%08lx,%s,%s,%s"), e.Error(), e.ErrorMessage(), (TCHAR*)bstrSource, (TCHAR*)bstrDescription);
 		return FALSE;
 	}
 

+ 1 - 1
source/hook/WxAdoInterface/WxAdoImpl.h

@@ -24,7 +24,7 @@
 #pragma once
 
 
-class AFX_EXT_CLASS CWxAdoImpl:public IWxAdoInterface
+class /*AFX_EXT_CLASS*/ CWxAdoImpl:public IWxAdoInterface
 {
 	CWxAdoImpl(void);
 public:

+ 20 - 3
source/hook/WxAdoInterface/WxAdoInterface.vcxproj

@@ -27,14 +27,14 @@
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
     <PlatformToolset>v141</PlatformToolset>
     <CharacterSet>MultiByte</CharacterSet>
     <UseOfMfc>Dynamic</UseOfMfc>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <ConfigurationType>StaticLibrary</ConfigurationType>
     <UseDebugLibraries>false</UseDebugLibraries>
     <PlatformToolset>v141</PlatformToolset>
     <WholeProgramOptimization>true</WholeProgramOptimization>
@@ -96,11 +96,19 @@
       <WarningLevel>Level3</WarningLevel>
       <Optimization>Disabled</Optimization>
       <SDLCheck>true</SDLCheck>
-      <PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;_USRDLL;_AFXEXT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\Include;..\pb;</AdditionalIncludeDirectories>
+      <InlineFunctionExpansion>Default</InlineFunctionExpansion>
+      <DisableSpecificWarnings>4018;4065;4146;4244;4251;4267;4305;4307;4309;4334;4355;4506;4800;4996</DisableSpecificWarnings>
+      <CompileAs>Default</CompileAs>
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
       <ModuleDefinitionFile>.\WxAdoInterface.def</ModuleDefinitionFile>
+      <AdditionalLibraryDirectories>..\lib;</AdditionalLibraryDirectories>
+      <AdditionalDependencies>libprotobufd.lib;libprotobuf-lited.lib;libprotocd.lib;gmock_main.lib;gmock.lib;msvcprtd.lib;mfcs140d.lib</AdditionalDependencies>
+      <IgnoreSpecificDefaultLibraries>mfcs140d.lib;msvcprtd.lib</IgnoreSpecificDefaultLibraries>
     </Link>
     <Midl>
       <MkTypLibCompatible>false</MkTypLibCompatible>
@@ -146,12 +154,16 @@
       <IntrinsicFunctions>true</IntrinsicFunctions>
       <SDLCheck>true</SDLCheck>
       <PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;_USRDLL;_AFXEXT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>..\Include;..\pb;</AdditionalIncludeDirectories>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
       <ModuleDefinitionFile>.\WxAdoInterface.def</ModuleDefinitionFile>
+      <AdditionalLibraryDirectories>..\lib;</AdditionalLibraryDirectories>
+      <AdditionalDependencies>msvcprt.lib;mfcs140.lib;libprotobuf.lib;libprotobuf-lite.lib;libprotoc.lib;</AdditionalDependencies>
+      <IgnoreSpecificDefaultLibraries>mfcs140.lib;msvcprt.lib</IgnoreSpecificDefaultLibraries>
     </Link>
     <Midl>
       <MkTypLibCompatible>false</MkTypLibCompatible>
@@ -193,6 +205,10 @@
     </ResourceCompile>
   </ItemDefinitionGroup>
   <ItemGroup>
+    <ClCompile Include="..\pb\table.pb.cc">
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
+    </ClCompile>
     <ClCompile Include="WxAdoImpl.cpp" />
     <ClCompile Include="WxAdoPool.cpp" />
     <ClCompile Include="Global.cpp" />
@@ -209,6 +225,7 @@
     <None Include="WxAdoInterface.def" />
   </ItemGroup>
   <ItemGroup>
+    <ClInclude Include="..\pb\table.pb.h" />
     <ClInclude Include="CritSection.h" />
     <ClInclude Include="WxAdoImpl.h" />
     <ClInclude Include="WxAdoPool.h" />

+ 9 - 0
source/hook/WxAdoInterface/WxAdoInterface.vcxproj.filters

@@ -13,6 +13,9 @@
       <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
       <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
     </Filter>
+    <Filter Include="pb">
+      <UniqueIdentifier>{f4d1c9bf-1bc3-426d-82e2-303d865b93cf}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="WxAdoInterface.cpp">
@@ -30,6 +33,9 @@
     <ClCompile Include="WxAdoImpl.cpp">
       <Filter>源文件</Filter>
     </ClCompile>
+    <ClCompile Include="..\pb\table.pb.cc">
+      <Filter>pb</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <None Include="WxAdoInterface.def">
@@ -70,6 +76,9 @@
     <ClInclude Include="WxAdoImpl.h">
       <Filter>头文件</Filter>
     </ClInclude>
+    <ClInclude Include="..\pb\table.pb.h">
+      <Filter>pb</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ResourceCompile Include="WxAdoInterface.rc">

+ 6 - 3
source/hook/WxAdoInterface/WxAdoPool.cpp

@@ -14,6 +14,8 @@ CWxAdoPool::CWxAdoPool()
 	m_bNeedExit = FALSE;
 	m_bNeedStop = FALSE;
 	m_bNeedConnection = FALSE;
+
+	::CoInitialize(NULL);//初始化COM环境
 }
 
 CWxAdoPool::~CWxAdoPool()
@@ -24,6 +26,7 @@ CWxAdoPool::~CWxAdoPool()
 	m_strDBSource.Empty();
 	m_strPassWord.Empty();
 	DestroyAllDBConnections();
+	::CoUninitialize();
 }
 
 DWORD CWxAdoPool::InitializePool(IN LPCTSTR lpDBType, IN LPCTSTR lpDBSource, IN CONST DWORD &dwDBPort, IN LPCTSTR lpDBAccount, IN LPCTSTR lpPassWord, IN LPCTSTR lpDBName, IN CONST INT &nMinConn /* = 1 */, IN CONST INT &nMaxConn /* = 5 */)
@@ -162,7 +165,7 @@ pAdoObj CWxAdoPool::GetAConnection( IN CONST DWORD &dwTimeOut /* = 1000 */ )
 					//bGetIdl = TRUE;
 					m_listBusyConnections._push_back(pConnection);
 					InterlockedIncrement(&m_nObjRef);	//增加引用计数;
-					Global::WriteTextLog(_T("创建连接对象:共有 %d 个"), m_nObjRef);
+					WxAdoGlobal::WriteTextLog(_T("创建连接对象:共有 %d 个"), m_nObjRef);
 					break;
 				}
 			}
@@ -173,7 +176,7 @@ pAdoObj CWxAdoPool::GetAConnection( IN CONST DWORD &dwTimeOut /* = 1000 */ )
 			Sleep(0);
 			// 超时,则结束返回NULL;
 			if ( (GetTickCount() - dwTime) >= dwTimeOut){
-				Global::WriteTextLog(_T("获取连接对象超时"));
+				WxAdoGlobal::WriteTextLog(_T("获取连接对象超时"));
 				break;
 			}
 		}
@@ -266,7 +269,7 @@ pAdoObj CWxAdoPool::InitAConnection()
 		if (pObj)
 			delete pObj;
 		pObj = NULL;
-		Global::WriteTextLog(_T("SQL连接串:%08lx,%s,%s,%s"), e.Error(), e.ErrorMessage(), (TCHAR*)bstrSource, (TCHAR*)bstrDescription);
+		WxAdoGlobal::WriteTextLog(_T("SQL连接串:%08lx,%s,%s,%s"), e.Error(), e.ErrorMessage(), (TCHAR*)bstrSource, (TCHAR*)bstrDescription);
 	}
 
 	return pObj;

+ 1 - 0
source/hook/WxAdoInterface/stdafx.h

@@ -36,6 +36,7 @@
 #include <afxcmn.h>                     // MFC 对 Windows 公共控件的支持
 #endif // _AFX_NO_AFXCMN_SUPPORT
 
+#include "table.pb.h"
 
 // Ado//由于MFC封装的ODBC不太好用;
 #import "C:\Program Files\Common Files\System\ado\msado15.dll" rename_namespace("ADOCG") rename("EOF", "adoEOF")

+ 5 - 2
source/hook/WxService/WxService.cpp

@@ -34,7 +34,10 @@ void CALLBACK WorkStart()
 	}
 
 #ifdef _DEBUG
-	g_pAdoPool->IsUserExist(_T("15089231318"), _T("123456"), NULL);
+	tb_customer customer;
+	TCHAR szMax[MAX_PATH] = {0};
+	TString str;
+	g_pAdoPool->IsUserExist(_T("15089231318"), _T("123456"), (LPVOID)&customer);
 #endif
 
 	WinService::GetDebugPriv();
@@ -89,7 +92,7 @@ int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
 			return 0;
 		}
 
-#if _DEBUG
+#ifdef _DEBUG
 		WorkStart();
 		system("pause");
 		WorkEndof();

+ 35 - 1
source/hook/WxService/WxService.vcproj

@@ -42,7 +42,8 @@
 			<Tool
 				Name="VCCLCompilerTool"
 				Optimization="0"
-				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+				AdditionalIncludeDirectories="..\Include"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;PROTOBUF_USE_DLLS"
 				MinimalRebuild="true"
 				BasicRuntimeChecks="3"
 				RuntimeLibrary="3"
@@ -61,7 +62,9 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
+				AdditionalDependencies="libprotobuf.lib libprotobuf-lite.lib libprotoc.lib"
 				LinkIncremental="2"
+				AdditionalLibraryDirectories="..\lib;"
 				GenerateDebugInformation="true"
 				SubSystem="1"
 				TargetMachine="1"
@@ -116,6 +119,7 @@
 				Name="VCCLCompilerTool"
 				Optimization="2"
 				EnableIntrinsicFunctions="true"
+				AdditionalIncludeDirectories="..\Include"
 				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
 				RuntimeLibrary="2"
 				EnableFunctionLevelLinking="true"
@@ -134,7 +138,9 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
+				AdditionalDependencies="libprotobuf.lib libprotobuf-lite.lib libprotoc.lib"
 				LinkIncremental="1"
+				AdditionalLibraryDirectories="..\lib;"
 				GenerateDebugInformation="true"
 				SubSystem="1"
 				OptimizeReferences="2"
@@ -269,6 +275,34 @@
 				>
 			</File>
 		</Filter>
+		<Filter
+			Name="pb"
+			>
+			<File
+				RelativePath="..\pb\login.pb.cc"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						UsePrecompiledHeader="0"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						UsePrecompiledHeader="0"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\pb\login.pb.h"
+				>
+			</File>
+		</Filter>
 		<File
 			RelativePath=".\ReadMe.txt"
 			>

+ 12 - 6
source/hook/WxService/WxService.vcxproj

@@ -56,28 +56,29 @@
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
       <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;PROTOBUF_USE_DLLS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <MinimalRebuild>true</MinimalRebuild>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
       <PrecompiledHeader>Use</PrecompiledHeader>
       <WarningLevel>Level3</WarningLevel>
       <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
-      <AdditionalIncludeDirectories>..\Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>..\Include;..\pb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <DisableSpecificWarnings>4018;4065;4146;4244;4251;4267;4305;4307;4309;4334;4355;4506;4800;4996</DisableSpecificWarnings>
     </ClCompile>
     <Link>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <SubSystem>Console</SubSystem>
       <TargetMachine>MachineX86</TargetMachine>
       <AdditionalLibraryDirectories>..\lib;</AdditionalLibraryDirectories>
-      <AdditionalDependencies>libprotobuf.lib;libprotobuf-lite.lib;libprotoc.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>libprotobufd.lib;libprotobuf-lited.lib;libprotocd.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;PROTOBUF_USE_DLLS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <PrecompiledHeader>Use</PrecompiledHeader>
@@ -96,7 +97,11 @@
     </Link>
   </ItemDefinitionGroup>
   <ItemGroup>
-    <ClCompile Include="..\pb\login.pb.cc">
+    <ClCompile Include="..\pb\msg.pb.cc">
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
+      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
+    </ClCompile>
+    <ClCompile Include="..\pb\table.pb.cc">
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
     </ClCompile>
@@ -110,7 +115,8 @@
     <ClCompile Include="WxService.cpp" />
   </ItemGroup>
   <ItemGroup>
-    <ClInclude Include="..\pb\login.pb.h" />
+    <ClInclude Include="..\pb\msg.pb.h" />
+    <ClInclude Include="..\pb\table.pb.h" />
     <ClInclude Include="Global.h" />
     <ClInclude Include="MainProcess.h" />
     <ClInclude Include="MTVERIFY.H" />

+ 8 - 2
source/hook/WxService/WxService.vcxproj.filters

@@ -36,7 +36,10 @@
     <ClCompile Include="WinService.cpp">
       <Filter>Common</Filter>
     </ClCompile>
-    <ClCompile Include="..\pb\login.pb.cc">
+    <ClCompile Include="..\pb\msg.pb.cc">
+      <Filter>pb</Filter>
+    </ClCompile>
+    <ClCompile Include="..\pb\table.pb.cc">
       <Filter>pb</Filter>
     </ClCompile>
   </ItemGroup>
@@ -65,7 +68,10 @@
     <ClInclude Include="WinService.h">
       <Filter>Common</Filter>
     </ClInclude>
-    <ClInclude Include="..\pb\login.pb.h">
+    <ClInclude Include="..\pb\msg.pb.h">
+      <Filter>pb</Filter>
+    </ClInclude>
+    <ClInclude Include="..\pb\table.pb.h">
       <Filter>pb</Filter>
     </ClInclude>
   </ItemGroup>

+ 14 - 2
source/hook/WxService/stdafx.cpp

@@ -10,7 +10,9 @@ HMODULE g_hpool = NULL;
 IWxAdoInterface* g_pAdoPool = NULL;
 typedef IWxAdoInterface* (*CREATEINSTANCE)();
 BOOL CreatePoolInstance()
-{   //¼ÓÔØ¶¯Ì¬¿â
+{   
+#ifdef _DLL_
+	//¼ÓÔØ¶¯Ì¬¿â
 	g_hpool = (HMODULE)LoadLibrary(_T("WxAdoInterface.dll"));
 	if (g_hpool == NULL)
 	{
@@ -21,12 +23,15 @@ BOOL CreatePoolInstance()
 
 	CREATEINSTANCE CreaetInstance = (CREATEINSTANCE)GetProcAddress(g_hpool, "CreateWxAdoPoolInstance");
 	g_pAdoPool = CreaetInstance();
-
+#else
+	g_pAdoPool = CWxAdoImpl::GetInstance();
+#endif
 	return (g_pAdoPool == NULL) ? FALSE : TRUE;
 }
 
 void FreelyfzodbcLibrary()
 {
+#ifdef _DLL_
 	if (g_hpool)
 	{
 		g_pAdoPool->ReleasePool();
@@ -36,4 +41,11 @@ void FreelyfzodbcLibrary()
 
 	g_hpool = NULL;
 	g_pAdoPool = NULL;
+#else
+	if (g_pAdoPool)
+	{
+		g_pAdoPool->ReleasePool();
+		g_pAdoPool->Release();
+	}
+#endif
 }

+ 3 - 0
source/hook/WxService/stdafx.h

@@ -34,6 +34,9 @@
 //#include "../lzmalib/LzmaLib.h"
 //#include "../lzmalib/Types.h"
 
+#include "table.pb.h"
+#include "msg.pb.h"
+
 #ifdef _DEBUG
 #pragma comment(lib,"WxAdoInterface.lib")
 //#pragma comment(lib,"../lzmalib/LzmaLib_D.lib")

+ 966 - 0
source/hook/pb/msg.pb.cc

@@ -0,0 +1,966 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: msg.proto
+
+#include "msg.pb.h"
+
+#include <algorithm>
+
+#include <google/protobuf/stubs/common.h>
+#include <google/protobuf/stubs/port.h>
+#include <google/protobuf/io/coded_stream.h>
+#include <google/protobuf/wire_format_lite_inl.h>
+#include <google/protobuf/descriptor.h>
+#include <google/protobuf/generated_message_reflection.h>
+#include <google/protobuf/reflection_ops.h>
+#include <google/protobuf/wire_format.h>
+// This is a temporary google only hack
+#ifdef GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS
+#include "third_party/protobuf/version.h"
+#endif
+// @@protoc_insertion_point(includes)
+
+class msg_loginDefaultTypeInternal {
+ public:
+  ::google::protobuf::internal::ExplicitlyConstructed<msg_login>
+      _instance;
+} _msg_login_default_instance_;
+class msg_registerDefaultTypeInternal {
+ public:
+  ::google::protobuf::internal::ExplicitlyConstructed<msg_register>
+      _instance;
+} _msg_register_default_instance_;
+namespace protobuf_msg_2eproto {
+static void InitDefaultsmsg_login() {
+  GOOGLE_PROTOBUF_VERIFY_VERSION;
+
+  {
+    void* ptr = &::_msg_login_default_instance_;
+    new (ptr) ::msg_login();
+    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
+  }
+  ::msg_login::InitAsDefaultInstance();
+}
+
+::google::protobuf::internal::SCCInfo<0> scc_info_msg_login =
+    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsmsg_login}, {}};
+
+static void InitDefaultsmsg_register() {
+  GOOGLE_PROTOBUF_VERIFY_VERSION;
+
+  {
+    void* ptr = &::_msg_register_default_instance_;
+    new (ptr) ::msg_register();
+    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
+  }
+  ::msg_register::InitAsDefaultInstance();
+}
+
+::google::protobuf::internal::SCCInfo<0> scc_info_msg_register =
+    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsmsg_register}, {}};
+
+void InitDefaults() {
+  ::google::protobuf::internal::InitSCC(&scc_info_msg_login.base);
+  ::google::protobuf::internal::InitSCC(&scc_info_msg_register.base);
+}
+
+::google::protobuf::Metadata file_level_metadata[2];
+
+const ::google::protobuf::uint32 TableStruct::offsets[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
+  ~0u,  // no _has_bits_
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::msg_login, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::msg_login, phone_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::msg_login, passwrod_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::msg_login, system_),
+  ~0u,  // no _has_bits_
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::msg_register, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::msg_register, phone_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::msg_register, name_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::msg_register, gender_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::msg_register, passwrod_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::msg_register, vcode_),
+};
+static const ::google::protobuf::internal::MigrationSchema schemas[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
+  { 0, -1, sizeof(::msg_login)},
+  { 8, -1, sizeof(::msg_register)},
+};
+
+static ::google::protobuf::Message const * const file_default_instances[] = {
+  reinterpret_cast<const ::google::protobuf::Message*>(&::_msg_login_default_instance_),
+  reinterpret_cast<const ::google::protobuf::Message*>(&::_msg_register_default_instance_),
+};
+
+void protobuf_AssignDescriptors() {
+  AddDescriptors();
+  AssignDescriptors(
+      "msg.proto", schemas, file_default_instances, TableStruct::offsets,
+      file_level_metadata, NULL, NULL);
+}
+
+void protobuf_AssignDescriptorsOnce() {
+  static ::google::protobuf::internal::once_flag once;
+  ::google::protobuf::internal::call_once(once, protobuf_AssignDescriptors);
+}
+
+void protobuf_RegisterTypes(const ::std::string&) GOOGLE_PROTOBUF_ATTRIBUTE_COLD;
+void protobuf_RegisterTypes(const ::std::string&) {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::internal::RegisterAllTypes(file_level_metadata, 2);
+}
+
+void AddDescriptorsImpl() {
+  InitDefaults();
+  static const char descriptor[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
+      "\n\tmsg.proto\"<\n\tmsg_login\022\r\n\005phone\030\001 \001(\t\022"
+      "\020\n\010passwrod\030\002 \001(\t\022\016\n\006system\030\003 \001(\t\"\\\n\014msg"
+      "_register\022\r\n\005phone\030\001 \001(\t\022\014\n\004name\030\002 \001(\t\022\016"
+      "\n\006gender\030\003 \001(\010\022\020\n\010passwrod\030\004 \001(\t\022\r\n\005vcod"
+      "e\030\005 \001(\tb\006proto3"
+  };
+  ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
+      descriptor, 175);
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
+    "msg.proto", &protobuf_RegisterTypes);
+}
+
+void AddDescriptors() {
+  static ::google::protobuf::internal::once_flag once;
+  ::google::protobuf::internal::call_once(once, AddDescriptorsImpl);
+}
+// Force AddDescriptors() to be called at dynamic initialization time.
+struct StaticDescriptorInitializer {
+  StaticDescriptorInitializer() {
+    AddDescriptors();
+  }
+} static_descriptor_initializer;
+}  // namespace protobuf_msg_2eproto
+
+// ===================================================================
+
+void msg_login::InitAsDefaultInstance() {
+}
+#if !defined(_MSC_VER) || _MSC_VER >= 1900
+const int msg_login::kPhoneFieldNumber;
+const int msg_login::kPasswrodFieldNumber;
+const int msg_login::kSystemFieldNumber;
+#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
+
+msg_login::msg_login()
+  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
+  ::google::protobuf::internal::InitSCC(
+      &protobuf_msg_2eproto::scc_info_msg_login.base);
+  SharedCtor();
+  // @@protoc_insertion_point(constructor:msg_login)
+}
+msg_login::msg_login(const msg_login& from)
+  : ::google::protobuf::Message(),
+      _internal_metadata_(NULL) {
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  phone_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.phone().size() > 0) {
+    phone_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.phone_);
+  }
+  passwrod_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.passwrod().size() > 0) {
+    passwrod_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.passwrod_);
+  }
+  system_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.system().size() > 0) {
+    system_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.system_);
+  }
+  // @@protoc_insertion_point(copy_constructor:msg_login)
+}
+
+void msg_login::SharedCtor() {
+  phone_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  passwrod_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  system_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+
+msg_login::~msg_login() {
+  // @@protoc_insertion_point(destructor:msg_login)
+  SharedDtor();
+}
+
+void msg_login::SharedDtor() {
+  phone_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  passwrod_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  system_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+
+void msg_login::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+const ::google::protobuf::Descriptor* msg_login::descriptor() {
+  ::protobuf_msg_2eproto::protobuf_AssignDescriptorsOnce();
+  return ::protobuf_msg_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
+}
+
+const msg_login& msg_login::default_instance() {
+  ::google::protobuf::internal::InitSCC(&protobuf_msg_2eproto::scc_info_msg_login.base);
+  return *internal_default_instance();
+}
+
+
+void msg_login::Clear() {
+// @@protoc_insertion_point(message_clear_start:msg_login)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  phone_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  passwrod_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  system_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  _internal_metadata_.Clear();
+}
+
+bool msg_login::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
+  ::google::protobuf::uint32 tag;
+  // @@protoc_insertion_point(parse_start:msg_login)
+  for (;;) {
+    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
+    tag = p.first;
+    if (!p.second) goto handle_unusual;
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // string phone = 1;
+      case 1: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_phone()));
+          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+            this->phone().data(), static_cast<int>(this->phone().length()),
+            ::google::protobuf::internal::WireFormatLite::PARSE,
+            "msg_login.phone"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // string passwrod = 2;
+      case 2: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_passwrod()));
+          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+            this->passwrod().data(), static_cast<int>(this->passwrod().length()),
+            ::google::protobuf::internal::WireFormatLite::PARSE,
+            "msg_login.passwrod"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // string system = 3;
+      case 3: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_system()));
+          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+            this->system().data(), static_cast<int>(this->system().length()),
+            ::google::protobuf::internal::WireFormatLite::PARSE,
+            "msg_login.system"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      default: {
+      handle_unusual:
+        if (tag == 0) {
+          goto success;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, _internal_metadata_.mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+success:
+  // @@protoc_insertion_point(parse_success:msg_login)
+  return true;
+failure:
+  // @@protoc_insertion_point(parse_failure:msg_login)
+  return false;
+#undef DO_
+}
+
+void msg_login::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // @@protoc_insertion_point(serialize_start:msg_login)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // string phone = 1;
+  if (this->phone().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->phone().data(), static_cast<int>(this->phone().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "msg_login.phone");
+    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
+      1, this->phone(), output);
+  }
+
+  // string passwrod = 2;
+  if (this->passwrod().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->passwrod().data(), static_cast<int>(this->passwrod().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "msg_login.passwrod");
+    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
+      2, this->passwrod(), output);
+  }
+
+  // string system = 3;
+  if (this->system().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->system().data(), static_cast<int>(this->system().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "msg_login.system");
+    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
+      3, this->system(), output);
+  }
+
+  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
+  }
+  // @@protoc_insertion_point(serialize_end:msg_login)
+}
+
+::google::protobuf::uint8* msg_login::InternalSerializeWithCachedSizesToArray(
+    bool deterministic, ::google::protobuf::uint8* target) const {
+  (void)deterministic; // Unused
+  // @@protoc_insertion_point(serialize_to_array_start:msg_login)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // string phone = 1;
+  if (this->phone().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->phone().data(), static_cast<int>(this->phone().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "msg_login.phone");
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        1, this->phone(), target);
+  }
+
+  // string passwrod = 2;
+  if (this->passwrod().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->passwrod().data(), static_cast<int>(this->passwrod().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "msg_login.passwrod");
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        2, this->passwrod(), target);
+  }
+
+  // string system = 3;
+  if (this->system().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->system().data(), static_cast<int>(this->system().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "msg_login.system");
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        3, this->system(), target);
+  }
+
+  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:msg_login)
+  return target;
+}
+
+size_t msg_login::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:msg_login)
+  size_t total_size = 0;
+
+  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
+  }
+  // string phone = 1;
+  if (this->phone().size() > 0) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::StringSize(
+        this->phone());
+  }
+
+  // string passwrod = 2;
+  if (this->passwrod().size() > 0) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::StringSize(
+        this->passwrod());
+  }
+
+  // string system = 3;
+  if (this->system().size() > 0) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::StringSize(
+        this->system());
+  }
+
+  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
+  SetCachedSize(cached_size);
+  return total_size;
+}
+
+void msg_login::MergeFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_merge_from_start:msg_login)
+  GOOGLE_DCHECK_NE(&from, this);
+  const msg_login* source =
+      ::google::protobuf::internal::DynamicCastToGenerated<const msg_login>(
+          &from);
+  if (source == NULL) {
+  // @@protoc_insertion_point(generalized_merge_from_cast_fail:msg_login)
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+  // @@protoc_insertion_point(generalized_merge_from_cast_success:msg_login)
+    MergeFrom(*source);
+  }
+}
+
+void msg_login::MergeFrom(const msg_login& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:msg_login)
+  GOOGLE_DCHECK_NE(&from, this);
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (from.phone().size() > 0) {
+
+    phone_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.phone_);
+  }
+  if (from.passwrod().size() > 0) {
+
+    passwrod_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.passwrod_);
+  }
+  if (from.system().size() > 0) {
+
+    system_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.system_);
+  }
+}
+
+void msg_login::CopyFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_copy_from_start:msg_login)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void msg_login::CopyFrom(const msg_login& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:msg_login)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool msg_login::IsInitialized() const {
+  return true;
+}
+
+void msg_login::Swap(msg_login* other) {
+  if (other == this) return;
+  InternalSwap(other);
+}
+void msg_login::InternalSwap(msg_login* other) {
+  using std::swap;
+  phone_.Swap(&other->phone_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  passwrod_.Swap(&other->passwrod_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  system_.Swap(&other->system_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  _internal_metadata_.Swap(&other->_internal_metadata_);
+}
+
+::google::protobuf::Metadata msg_login::GetMetadata() const {
+  protobuf_msg_2eproto::protobuf_AssignDescriptorsOnce();
+  return ::protobuf_msg_2eproto::file_level_metadata[kIndexInFileMessages];
+}
+
+
+// ===================================================================
+
+void msg_register::InitAsDefaultInstance() {
+}
+#if !defined(_MSC_VER) || _MSC_VER >= 1900
+const int msg_register::kPhoneFieldNumber;
+const int msg_register::kNameFieldNumber;
+const int msg_register::kGenderFieldNumber;
+const int msg_register::kPasswrodFieldNumber;
+const int msg_register::kVcodeFieldNumber;
+#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
+
+msg_register::msg_register()
+  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
+  ::google::protobuf::internal::InitSCC(
+      &protobuf_msg_2eproto::scc_info_msg_register.base);
+  SharedCtor();
+  // @@protoc_insertion_point(constructor:msg_register)
+}
+msg_register::msg_register(const msg_register& from)
+  : ::google::protobuf::Message(),
+      _internal_metadata_(NULL) {
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  phone_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.phone().size() > 0) {
+    phone_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.phone_);
+  }
+  name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.name().size() > 0) {
+    name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.name_);
+  }
+  passwrod_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.passwrod().size() > 0) {
+    passwrod_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.passwrod_);
+  }
+  vcode_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.vcode().size() > 0) {
+    vcode_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.vcode_);
+  }
+  gender_ = from.gender_;
+  // @@protoc_insertion_point(copy_constructor:msg_register)
+}
+
+void msg_register::SharedCtor() {
+  phone_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  passwrod_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  vcode_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  gender_ = false;
+}
+
+msg_register::~msg_register() {
+  // @@protoc_insertion_point(destructor:msg_register)
+  SharedDtor();
+}
+
+void msg_register::SharedDtor() {
+  phone_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  name_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  passwrod_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  vcode_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+
+void msg_register::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+const ::google::protobuf::Descriptor* msg_register::descriptor() {
+  ::protobuf_msg_2eproto::protobuf_AssignDescriptorsOnce();
+  return ::protobuf_msg_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
+}
+
+const msg_register& msg_register::default_instance() {
+  ::google::protobuf::internal::InitSCC(&protobuf_msg_2eproto::scc_info_msg_register.base);
+  return *internal_default_instance();
+}
+
+
+void msg_register::Clear() {
+// @@protoc_insertion_point(message_clear_start:msg_register)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  phone_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  passwrod_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  vcode_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  gender_ = false;
+  _internal_metadata_.Clear();
+}
+
+bool msg_register::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
+  ::google::protobuf::uint32 tag;
+  // @@protoc_insertion_point(parse_start:msg_register)
+  for (;;) {
+    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
+    tag = p.first;
+    if (!p.second) goto handle_unusual;
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // string phone = 1;
+      case 1: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_phone()));
+          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+            this->phone().data(), static_cast<int>(this->phone().length()),
+            ::google::protobuf::internal::WireFormatLite::PARSE,
+            "msg_register.phone"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // string name = 2;
+      case 2: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_name()));
+          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+            this->name().data(), static_cast<int>(this->name().length()),
+            ::google::protobuf::internal::WireFormatLite::PARSE,
+            "msg_register.name"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // bool gender = 3;
+      case 3: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(24u /* 24 & 0xFF */)) {
+
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
+                 input, &gender_)));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // string passwrod = 4;
+      case 4: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(34u /* 34 & 0xFF */)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_passwrod()));
+          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+            this->passwrod().data(), static_cast<int>(this->passwrod().length()),
+            ::google::protobuf::internal::WireFormatLite::PARSE,
+            "msg_register.passwrod"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // string vcode = 5;
+      case 5: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(42u /* 42 & 0xFF */)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_vcode()));
+          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+            this->vcode().data(), static_cast<int>(this->vcode().length()),
+            ::google::protobuf::internal::WireFormatLite::PARSE,
+            "msg_register.vcode"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      default: {
+      handle_unusual:
+        if (tag == 0) {
+          goto success;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, _internal_metadata_.mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+success:
+  // @@protoc_insertion_point(parse_success:msg_register)
+  return true;
+failure:
+  // @@protoc_insertion_point(parse_failure:msg_register)
+  return false;
+#undef DO_
+}
+
+void msg_register::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // @@protoc_insertion_point(serialize_start:msg_register)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // string phone = 1;
+  if (this->phone().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->phone().data(), static_cast<int>(this->phone().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "msg_register.phone");
+    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
+      1, this->phone(), output);
+  }
+
+  // string name = 2;
+  if (this->name().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->name().data(), static_cast<int>(this->name().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "msg_register.name");
+    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
+      2, this->name(), output);
+  }
+
+  // bool gender = 3;
+  if (this->gender() != 0) {
+    ::google::protobuf::internal::WireFormatLite::WriteBool(3, this->gender(), output);
+  }
+
+  // string passwrod = 4;
+  if (this->passwrod().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->passwrod().data(), static_cast<int>(this->passwrod().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "msg_register.passwrod");
+    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
+      4, this->passwrod(), output);
+  }
+
+  // string vcode = 5;
+  if (this->vcode().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->vcode().data(), static_cast<int>(this->vcode().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "msg_register.vcode");
+    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
+      5, this->vcode(), output);
+  }
+
+  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
+  }
+  // @@protoc_insertion_point(serialize_end:msg_register)
+}
+
+::google::protobuf::uint8* msg_register::InternalSerializeWithCachedSizesToArray(
+    bool deterministic, ::google::protobuf::uint8* target) const {
+  (void)deterministic; // Unused
+  // @@protoc_insertion_point(serialize_to_array_start:msg_register)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // string phone = 1;
+  if (this->phone().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->phone().data(), static_cast<int>(this->phone().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "msg_register.phone");
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        1, this->phone(), target);
+  }
+
+  // string name = 2;
+  if (this->name().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->name().data(), static_cast<int>(this->name().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "msg_register.name");
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        2, this->name(), target);
+  }
+
+  // bool gender = 3;
+  if (this->gender() != 0) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(3, this->gender(), target);
+  }
+
+  // string passwrod = 4;
+  if (this->passwrod().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->passwrod().data(), static_cast<int>(this->passwrod().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "msg_register.passwrod");
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        4, this->passwrod(), target);
+  }
+
+  // string vcode = 5;
+  if (this->vcode().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->vcode().data(), static_cast<int>(this->vcode().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "msg_register.vcode");
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        5, this->vcode(), target);
+  }
+
+  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:msg_register)
+  return target;
+}
+
+size_t msg_register::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:msg_register)
+  size_t total_size = 0;
+
+  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
+  }
+  // string phone = 1;
+  if (this->phone().size() > 0) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::StringSize(
+        this->phone());
+  }
+
+  // string name = 2;
+  if (this->name().size() > 0) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::StringSize(
+        this->name());
+  }
+
+  // string passwrod = 4;
+  if (this->passwrod().size() > 0) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::StringSize(
+        this->passwrod());
+  }
+
+  // string vcode = 5;
+  if (this->vcode().size() > 0) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::StringSize(
+        this->vcode());
+  }
+
+  // bool gender = 3;
+  if (this->gender() != 0) {
+    total_size += 1 + 1;
+  }
+
+  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
+  SetCachedSize(cached_size);
+  return total_size;
+}
+
+void msg_register::MergeFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_merge_from_start:msg_register)
+  GOOGLE_DCHECK_NE(&from, this);
+  const msg_register* source =
+      ::google::protobuf::internal::DynamicCastToGenerated<const msg_register>(
+          &from);
+  if (source == NULL) {
+  // @@protoc_insertion_point(generalized_merge_from_cast_fail:msg_register)
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+  // @@protoc_insertion_point(generalized_merge_from_cast_success:msg_register)
+    MergeFrom(*source);
+  }
+}
+
+void msg_register::MergeFrom(const msg_register& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:msg_register)
+  GOOGLE_DCHECK_NE(&from, this);
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (from.phone().size() > 0) {
+
+    phone_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.phone_);
+  }
+  if (from.name().size() > 0) {
+
+    name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.name_);
+  }
+  if (from.passwrod().size() > 0) {
+
+    passwrod_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.passwrod_);
+  }
+  if (from.vcode().size() > 0) {
+
+    vcode_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.vcode_);
+  }
+  if (from.gender() != 0) {
+    set_gender(from.gender());
+  }
+}
+
+void msg_register::CopyFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_copy_from_start:msg_register)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void msg_register::CopyFrom(const msg_register& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:msg_register)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool msg_register::IsInitialized() const {
+  return true;
+}
+
+void msg_register::Swap(msg_register* other) {
+  if (other == this) return;
+  InternalSwap(other);
+}
+void msg_register::InternalSwap(msg_register* other) {
+  using std::swap;
+  phone_.Swap(&other->phone_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  name_.Swap(&other->name_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  passwrod_.Swap(&other->passwrod_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  vcode_.Swap(&other->vcode_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  swap(gender_, other->gender_);
+  _internal_metadata_.Swap(&other->_internal_metadata_);
+}
+
+::google::protobuf::Metadata msg_register::GetMetadata() const {
+  protobuf_msg_2eproto::protobuf_AssignDescriptorsOnce();
+  return ::protobuf_msg_2eproto::file_level_metadata[kIndexInFileMessages];
+}
+
+
+// @@protoc_insertion_point(namespace_scope)
+namespace google {
+namespace protobuf {
+template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::msg_login* Arena::CreateMaybeMessage< ::msg_login >(Arena* arena) {
+  return Arena::CreateInternal< ::msg_login >(arena);
+}
+template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::msg_register* Arena::CreateMaybeMessage< ::msg_register >(Arena* arena) {
+  return Arena::CreateInternal< ::msg_register >(arena);
+}
+}  // namespace protobuf
+}  // namespace google
+
+// @@protoc_insertion_point(global_scope)

+ 776 - 0
source/hook/pb/msg.pb.h

@@ -0,0 +1,776 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: msg.proto
+
+#ifndef PROTOBUF_INCLUDED_msg_2eproto
+#define PROTOBUF_INCLUDED_msg_2eproto
+
+#include <string>
+
+#include <google/protobuf/stubs/common.h>
+
+#if GOOGLE_PROTOBUF_VERSION < 3006001
+#error This file was generated by a newer version of protoc which is
+#error incompatible with your Protocol Buffer headers.  Please update
+#error your headers.
+#endif
+#if 3006001 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION
+#error This file was generated by an older version of protoc which is
+#error incompatible with your Protocol Buffer headers.  Please
+#error regenerate this file with a newer version of protoc.
+#endif
+
+#include <google/protobuf/io/coded_stream.h>
+#include <google/protobuf/arena.h>
+#include <google/protobuf/arenastring.h>
+#include <google/protobuf/generated_message_table_driven.h>
+#include <google/protobuf/generated_message_util.h>
+#include <google/protobuf/inlined_string_field.h>
+#include <google/protobuf/metadata.h>
+#include <google/protobuf/message.h>
+#include <google/protobuf/repeated_field.h>  // IWYU pragma: export
+#include <google/protobuf/extension_set.h>  // IWYU pragma: export
+#include <google/protobuf/unknown_field_set.h>
+// @@protoc_insertion_point(includes)
+#define PROTOBUF_INTERNAL_EXPORT_protobuf_msg_2eproto 
+
+namespace protobuf_msg_2eproto {
+// Internal implementation detail -- do not use these members.
+struct TableStruct {
+  static const ::google::protobuf::internal::ParseTableField entries[];
+  static const ::google::protobuf::internal::AuxillaryParseTableField aux[];
+  static const ::google::protobuf::internal::ParseTable schema[2];
+  static const ::google::protobuf::internal::FieldMetadata field_metadata[];
+  static const ::google::protobuf::internal::SerializationTable serialization_table[];
+  static const ::google::protobuf::uint32 offsets[];
+};
+void AddDescriptors();
+}  // namespace protobuf_msg_2eproto
+class msg_login;
+class msg_loginDefaultTypeInternal;
+extern msg_loginDefaultTypeInternal _msg_login_default_instance_;
+class msg_register;
+class msg_registerDefaultTypeInternal;
+extern msg_registerDefaultTypeInternal _msg_register_default_instance_;
+namespace google {
+namespace protobuf {
+template<> ::msg_login* Arena::CreateMaybeMessage<::msg_login>(Arena*);
+template<> ::msg_register* Arena::CreateMaybeMessage<::msg_register>(Arena*);
+}  // namespace protobuf
+}  // namespace google
+
+// ===================================================================
+
+class msg_login : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:msg_login) */ {
+ public:
+  msg_login();
+  virtual ~msg_login();
+
+  msg_login(const msg_login& from);
+
+  inline msg_login& operator=(const msg_login& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  #if LANG_CXX11
+  msg_login(msg_login&& from) noexcept
+    : msg_login() {
+    *this = ::std::move(from);
+  }
+
+  inline msg_login& operator=(msg_login&& from) noexcept {
+    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
+      if (this != &from) InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+  #endif
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const msg_login& default_instance();
+
+  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
+  static inline const msg_login* internal_default_instance() {
+    return reinterpret_cast<const msg_login*>(
+               &_msg_login_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    0;
+
+  void Swap(msg_login* other);
+  friend void swap(msg_login& a, msg_login& b) {
+    a.Swap(&b);
+  }
+
+  // implements Message ----------------------------------------------
+
+  inline msg_login* New() const final {
+    return CreateMaybeMessage<msg_login>(NULL);
+  }
+
+  msg_login* New(::google::protobuf::Arena* arena) const final {
+    return CreateMaybeMessage<msg_login>(arena);
+  }
+  void CopyFrom(const ::google::protobuf::Message& from) final;
+  void MergeFrom(const ::google::protobuf::Message& from) final;
+  void CopyFrom(const msg_login& from);
+  void MergeFrom(const msg_login& from);
+  void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input) final;
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const final;
+  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
+      bool deterministic, ::google::protobuf::uint8* target) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(msg_login* other);
+  private:
+  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
+    return NULL;
+  }
+  inline void* MaybeArenaPtr() const {
+    return NULL;
+  }
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  // string phone = 1;
+  void clear_phone();
+  static const int kPhoneFieldNumber = 1;
+  const ::std::string& phone() const;
+  void set_phone(const ::std::string& value);
+  #if LANG_CXX11
+  void set_phone(::std::string&& value);
+  #endif
+  void set_phone(const char* value);
+  void set_phone(const char* value, size_t size);
+  ::std::string* mutable_phone();
+  ::std::string* release_phone();
+  void set_allocated_phone(::std::string* phone);
+
+  // string passwrod = 2;
+  void clear_passwrod();
+  static const int kPasswrodFieldNumber = 2;
+  const ::std::string& passwrod() const;
+  void set_passwrod(const ::std::string& value);
+  #if LANG_CXX11
+  void set_passwrod(::std::string&& value);
+  #endif
+  void set_passwrod(const char* value);
+  void set_passwrod(const char* value, size_t size);
+  ::std::string* mutable_passwrod();
+  ::std::string* release_passwrod();
+  void set_allocated_passwrod(::std::string* passwrod);
+
+  // string system = 3;
+  void clear_system();
+  static const int kSystemFieldNumber = 3;
+  const ::std::string& system() const;
+  void set_system(const ::std::string& value);
+  #if LANG_CXX11
+  void set_system(::std::string&& value);
+  #endif
+  void set_system(const char* value);
+  void set_system(const char* value, size_t size);
+  ::std::string* mutable_system();
+  ::std::string* release_system();
+  void set_allocated_system(::std::string* system);
+
+  // @@protoc_insertion_point(class_scope:msg_login)
+ private:
+
+  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
+  ::google::protobuf::internal::ArenaStringPtr phone_;
+  ::google::protobuf::internal::ArenaStringPtr passwrod_;
+  ::google::protobuf::internal::ArenaStringPtr system_;
+  mutable ::google::protobuf::internal::CachedSize _cached_size_;
+  friend struct ::protobuf_msg_2eproto::TableStruct;
+};
+// -------------------------------------------------------------------
+
+class msg_register : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:msg_register) */ {
+ public:
+  msg_register();
+  virtual ~msg_register();
+
+  msg_register(const msg_register& from);
+
+  inline msg_register& operator=(const msg_register& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  #if LANG_CXX11
+  msg_register(msg_register&& from) noexcept
+    : msg_register() {
+    *this = ::std::move(from);
+  }
+
+  inline msg_register& operator=(msg_register&& from) noexcept {
+    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
+      if (this != &from) InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+  #endif
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const msg_register& default_instance();
+
+  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
+  static inline const msg_register* internal_default_instance() {
+    return reinterpret_cast<const msg_register*>(
+               &_msg_register_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    1;
+
+  void Swap(msg_register* other);
+  friend void swap(msg_register& a, msg_register& b) {
+    a.Swap(&b);
+  }
+
+  // implements Message ----------------------------------------------
+
+  inline msg_register* New() const final {
+    return CreateMaybeMessage<msg_register>(NULL);
+  }
+
+  msg_register* New(::google::protobuf::Arena* arena) const final {
+    return CreateMaybeMessage<msg_register>(arena);
+  }
+  void CopyFrom(const ::google::protobuf::Message& from) final;
+  void MergeFrom(const ::google::protobuf::Message& from) final;
+  void CopyFrom(const msg_register& from);
+  void MergeFrom(const msg_register& from);
+  void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input) final;
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const final;
+  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
+      bool deterministic, ::google::protobuf::uint8* target) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(msg_register* other);
+  private:
+  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
+    return NULL;
+  }
+  inline void* MaybeArenaPtr() const {
+    return NULL;
+  }
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  // string phone = 1;
+  void clear_phone();
+  static const int kPhoneFieldNumber = 1;
+  const ::std::string& phone() const;
+  void set_phone(const ::std::string& value);
+  #if LANG_CXX11
+  void set_phone(::std::string&& value);
+  #endif
+  void set_phone(const char* value);
+  void set_phone(const char* value, size_t size);
+  ::std::string* mutable_phone();
+  ::std::string* release_phone();
+  void set_allocated_phone(::std::string* phone);
+
+  // string name = 2;
+  void clear_name();
+  static const int kNameFieldNumber = 2;
+  const ::std::string& name() const;
+  void set_name(const ::std::string& value);
+  #if LANG_CXX11
+  void set_name(::std::string&& value);
+  #endif
+  void set_name(const char* value);
+  void set_name(const char* value, size_t size);
+  ::std::string* mutable_name();
+  ::std::string* release_name();
+  void set_allocated_name(::std::string* name);
+
+  // string passwrod = 4;
+  void clear_passwrod();
+  static const int kPasswrodFieldNumber = 4;
+  const ::std::string& passwrod() const;
+  void set_passwrod(const ::std::string& value);
+  #if LANG_CXX11
+  void set_passwrod(::std::string&& value);
+  #endif
+  void set_passwrod(const char* value);
+  void set_passwrod(const char* value, size_t size);
+  ::std::string* mutable_passwrod();
+  ::std::string* release_passwrod();
+  void set_allocated_passwrod(::std::string* passwrod);
+
+  // string vcode = 5;
+  void clear_vcode();
+  static const int kVcodeFieldNumber = 5;
+  const ::std::string& vcode() const;
+  void set_vcode(const ::std::string& value);
+  #if LANG_CXX11
+  void set_vcode(::std::string&& value);
+  #endif
+  void set_vcode(const char* value);
+  void set_vcode(const char* value, size_t size);
+  ::std::string* mutable_vcode();
+  ::std::string* release_vcode();
+  void set_allocated_vcode(::std::string* vcode);
+
+  // bool gender = 3;
+  void clear_gender();
+  static const int kGenderFieldNumber = 3;
+  bool gender() const;
+  void set_gender(bool value);
+
+  // @@protoc_insertion_point(class_scope:msg_register)
+ private:
+
+  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
+  ::google::protobuf::internal::ArenaStringPtr phone_;
+  ::google::protobuf::internal::ArenaStringPtr name_;
+  ::google::protobuf::internal::ArenaStringPtr passwrod_;
+  ::google::protobuf::internal::ArenaStringPtr vcode_;
+  bool gender_;
+  mutable ::google::protobuf::internal::CachedSize _cached_size_;
+  friend struct ::protobuf_msg_2eproto::TableStruct;
+};
+// ===================================================================
+
+
+// ===================================================================
+
+#ifdef __GNUC__
+  #pragma GCC diagnostic push
+  #pragma GCC diagnostic ignored "-Wstrict-aliasing"
+#endif  // __GNUC__
+// msg_login
+
+// string phone = 1;
+inline void msg_login::clear_phone() {
+  phone_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline const ::std::string& msg_login::phone() const {
+  // @@protoc_insertion_point(field_get:msg_login.phone)
+  return phone_.GetNoArena();
+}
+inline void msg_login::set_phone(const ::std::string& value) {
+  
+  phone_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:msg_login.phone)
+}
+#if LANG_CXX11
+inline void msg_login::set_phone(::std::string&& value) {
+  
+  phone_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:msg_login.phone)
+}
+#endif
+inline void msg_login::set_phone(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  
+  phone_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:msg_login.phone)
+}
+inline void msg_login::set_phone(const char* value, size_t size) {
+  
+  phone_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:msg_login.phone)
+}
+inline ::std::string* msg_login::mutable_phone() {
+  
+  // @@protoc_insertion_point(field_mutable:msg_login.phone)
+  return phone_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* msg_login::release_phone() {
+  // @@protoc_insertion_point(field_release:msg_login.phone)
+  
+  return phone_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void msg_login::set_allocated_phone(::std::string* phone) {
+  if (phone != NULL) {
+    
+  } else {
+    
+  }
+  phone_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), phone);
+  // @@protoc_insertion_point(field_set_allocated:msg_login.phone)
+}
+
+// string passwrod = 2;
+inline void msg_login::clear_passwrod() {
+  passwrod_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline const ::std::string& msg_login::passwrod() const {
+  // @@protoc_insertion_point(field_get:msg_login.passwrod)
+  return passwrod_.GetNoArena();
+}
+inline void msg_login::set_passwrod(const ::std::string& value) {
+  
+  passwrod_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:msg_login.passwrod)
+}
+#if LANG_CXX11
+inline void msg_login::set_passwrod(::std::string&& value) {
+  
+  passwrod_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:msg_login.passwrod)
+}
+#endif
+inline void msg_login::set_passwrod(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  
+  passwrod_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:msg_login.passwrod)
+}
+inline void msg_login::set_passwrod(const char* value, size_t size) {
+  
+  passwrod_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:msg_login.passwrod)
+}
+inline ::std::string* msg_login::mutable_passwrod() {
+  
+  // @@protoc_insertion_point(field_mutable:msg_login.passwrod)
+  return passwrod_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* msg_login::release_passwrod() {
+  // @@protoc_insertion_point(field_release:msg_login.passwrod)
+  
+  return passwrod_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void msg_login::set_allocated_passwrod(::std::string* passwrod) {
+  if (passwrod != NULL) {
+    
+  } else {
+    
+  }
+  passwrod_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), passwrod);
+  // @@protoc_insertion_point(field_set_allocated:msg_login.passwrod)
+}
+
+// string system = 3;
+inline void msg_login::clear_system() {
+  system_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline const ::std::string& msg_login::system() const {
+  // @@protoc_insertion_point(field_get:msg_login.system)
+  return system_.GetNoArena();
+}
+inline void msg_login::set_system(const ::std::string& value) {
+  
+  system_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:msg_login.system)
+}
+#if LANG_CXX11
+inline void msg_login::set_system(::std::string&& value) {
+  
+  system_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:msg_login.system)
+}
+#endif
+inline void msg_login::set_system(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  
+  system_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:msg_login.system)
+}
+inline void msg_login::set_system(const char* value, size_t size) {
+  
+  system_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:msg_login.system)
+}
+inline ::std::string* msg_login::mutable_system() {
+  
+  // @@protoc_insertion_point(field_mutable:msg_login.system)
+  return system_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* msg_login::release_system() {
+  // @@protoc_insertion_point(field_release:msg_login.system)
+  
+  return system_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void msg_login::set_allocated_system(::std::string* system) {
+  if (system != NULL) {
+    
+  } else {
+    
+  }
+  system_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), system);
+  // @@protoc_insertion_point(field_set_allocated:msg_login.system)
+}
+
+// -------------------------------------------------------------------
+
+// msg_register
+
+// string phone = 1;
+inline void msg_register::clear_phone() {
+  phone_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline const ::std::string& msg_register::phone() const {
+  // @@protoc_insertion_point(field_get:msg_register.phone)
+  return phone_.GetNoArena();
+}
+inline void msg_register::set_phone(const ::std::string& value) {
+  
+  phone_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:msg_register.phone)
+}
+#if LANG_CXX11
+inline void msg_register::set_phone(::std::string&& value) {
+  
+  phone_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:msg_register.phone)
+}
+#endif
+inline void msg_register::set_phone(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  
+  phone_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:msg_register.phone)
+}
+inline void msg_register::set_phone(const char* value, size_t size) {
+  
+  phone_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:msg_register.phone)
+}
+inline ::std::string* msg_register::mutable_phone() {
+  
+  // @@protoc_insertion_point(field_mutable:msg_register.phone)
+  return phone_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* msg_register::release_phone() {
+  // @@protoc_insertion_point(field_release:msg_register.phone)
+  
+  return phone_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void msg_register::set_allocated_phone(::std::string* phone) {
+  if (phone != NULL) {
+    
+  } else {
+    
+  }
+  phone_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), phone);
+  // @@protoc_insertion_point(field_set_allocated:msg_register.phone)
+}
+
+// string name = 2;
+inline void msg_register::clear_name() {
+  name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline const ::std::string& msg_register::name() const {
+  // @@protoc_insertion_point(field_get:msg_register.name)
+  return name_.GetNoArena();
+}
+inline void msg_register::set_name(const ::std::string& value) {
+  
+  name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:msg_register.name)
+}
+#if LANG_CXX11
+inline void msg_register::set_name(::std::string&& value) {
+  
+  name_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:msg_register.name)
+}
+#endif
+inline void msg_register::set_name(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  
+  name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:msg_register.name)
+}
+inline void msg_register::set_name(const char* value, size_t size) {
+  
+  name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:msg_register.name)
+}
+inline ::std::string* msg_register::mutable_name() {
+  
+  // @@protoc_insertion_point(field_mutable:msg_register.name)
+  return name_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* msg_register::release_name() {
+  // @@protoc_insertion_point(field_release:msg_register.name)
+  
+  return name_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void msg_register::set_allocated_name(::std::string* name) {
+  if (name != NULL) {
+    
+  } else {
+    
+  }
+  name_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), name);
+  // @@protoc_insertion_point(field_set_allocated:msg_register.name)
+}
+
+// bool gender = 3;
+inline void msg_register::clear_gender() {
+  gender_ = false;
+}
+inline bool msg_register::gender() const {
+  // @@protoc_insertion_point(field_get:msg_register.gender)
+  return gender_;
+}
+inline void msg_register::set_gender(bool value) {
+  
+  gender_ = value;
+  // @@protoc_insertion_point(field_set:msg_register.gender)
+}
+
+// string passwrod = 4;
+inline void msg_register::clear_passwrod() {
+  passwrod_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline const ::std::string& msg_register::passwrod() const {
+  // @@protoc_insertion_point(field_get:msg_register.passwrod)
+  return passwrod_.GetNoArena();
+}
+inline void msg_register::set_passwrod(const ::std::string& value) {
+  
+  passwrod_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:msg_register.passwrod)
+}
+#if LANG_CXX11
+inline void msg_register::set_passwrod(::std::string&& value) {
+  
+  passwrod_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:msg_register.passwrod)
+}
+#endif
+inline void msg_register::set_passwrod(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  
+  passwrod_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:msg_register.passwrod)
+}
+inline void msg_register::set_passwrod(const char* value, size_t size) {
+  
+  passwrod_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:msg_register.passwrod)
+}
+inline ::std::string* msg_register::mutable_passwrod() {
+  
+  // @@protoc_insertion_point(field_mutable:msg_register.passwrod)
+  return passwrod_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* msg_register::release_passwrod() {
+  // @@protoc_insertion_point(field_release:msg_register.passwrod)
+  
+  return passwrod_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void msg_register::set_allocated_passwrod(::std::string* passwrod) {
+  if (passwrod != NULL) {
+    
+  } else {
+    
+  }
+  passwrod_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), passwrod);
+  // @@protoc_insertion_point(field_set_allocated:msg_register.passwrod)
+}
+
+// string vcode = 5;
+inline void msg_register::clear_vcode() {
+  vcode_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline const ::std::string& msg_register::vcode() const {
+  // @@protoc_insertion_point(field_get:msg_register.vcode)
+  return vcode_.GetNoArena();
+}
+inline void msg_register::set_vcode(const ::std::string& value) {
+  
+  vcode_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:msg_register.vcode)
+}
+#if LANG_CXX11
+inline void msg_register::set_vcode(::std::string&& value) {
+  
+  vcode_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:msg_register.vcode)
+}
+#endif
+inline void msg_register::set_vcode(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  
+  vcode_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:msg_register.vcode)
+}
+inline void msg_register::set_vcode(const char* value, size_t size) {
+  
+  vcode_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:msg_register.vcode)
+}
+inline ::std::string* msg_register::mutable_vcode() {
+  
+  // @@protoc_insertion_point(field_mutable:msg_register.vcode)
+  return vcode_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* msg_register::release_vcode() {
+  // @@protoc_insertion_point(field_release:msg_register.vcode)
+  
+  return vcode_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void msg_register::set_allocated_vcode(::std::string* vcode) {
+  if (vcode != NULL) {
+    
+  } else {
+    
+  }
+  vcode_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), vcode);
+  // @@protoc_insertion_point(field_set_allocated:msg_register.vcode)
+}
+
+#ifdef __GNUC__
+  #pragma GCC diagnostic pop
+#endif  // __GNUC__
+// -------------------------------------------------------------------
+
+
+// @@protoc_insertion_point(namespace_scope)
+
+
+// @@protoc_insertion_point(global_scope)
+
+#endif  // PROTOBUF_INCLUDED_msg_2eproto

+ 2879 - 0
source/hook/pb/table.pb.cc

@@ -0,0 +1,2879 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: table.proto
+
+#include "table.pb.h"
+
+#include <algorithm>
+
+#include <google/protobuf/stubs/common.h>
+#include <google/protobuf/stubs/port.h>
+#include <google/protobuf/io/coded_stream.h>
+#include <google/protobuf/wire_format_lite_inl.h>
+#include <google/protobuf/descriptor.h>
+#include <google/protobuf/generated_message_reflection.h>
+#include <google/protobuf/reflection_ops.h>
+#include <google/protobuf/wire_format.h>
+// This is a temporary google only hack
+#ifdef GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS
+#include "third_party/protobuf/version.h"
+#endif
+// @@protoc_insertion_point(includes)
+
+namespace protobuf_table_2eproto {
+extern PROTOBUF_INTERNAL_EXPORT_protobuf_table_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_tb_customer;
+extern PROTOBUF_INTERNAL_EXPORT_protobuf_table_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_tb_reply;
+extern PROTOBUF_INTERNAL_EXPORT_protobuf_table_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_tb_type;
+}  // namespace protobuf_table_2eproto
+class tb_customerDefaultTypeInternal {
+ public:
+  ::google::protobuf::internal::ExplicitlyConstructed<tb_customer>
+      _instance;
+} _tb_customer_default_instance_;
+class tb_typeDefaultTypeInternal {
+ public:
+  ::google::protobuf::internal::ExplicitlyConstructed<tb_type>
+      _instance;
+} _tb_type_default_instance_;
+class tb_replyDefaultTypeInternal {
+ public:
+  ::google::protobuf::internal::ExplicitlyConstructed<tb_reply>
+      _instance;
+} _tb_reply_default_instance_;
+class rec_customerDefaultTypeInternal {
+ public:
+  ::google::protobuf::internal::ExplicitlyConstructed<rec_customer>
+      _instance;
+} _rec_customer_default_instance_;
+class rec_typeDefaultTypeInternal {
+ public:
+  ::google::protobuf::internal::ExplicitlyConstructed<rec_type>
+      _instance;
+} _rec_type_default_instance_;
+class rec_replyDefaultTypeInternal {
+ public:
+  ::google::protobuf::internal::ExplicitlyConstructed<rec_reply>
+      _instance;
+} _rec_reply_default_instance_;
+class viewDefaultTypeInternal {
+ public:
+  ::google::protobuf::internal::ExplicitlyConstructed<view>
+      _instance;
+} _view_default_instance_;
+namespace protobuf_table_2eproto {
+static void InitDefaultstb_customer() {
+  GOOGLE_PROTOBUF_VERIFY_VERSION;
+
+  {
+    void* ptr = &::_tb_customer_default_instance_;
+    new (ptr) ::tb_customer();
+    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
+  }
+  ::tb_customer::InitAsDefaultInstance();
+}
+
+::google::protobuf::internal::SCCInfo<0> scc_info_tb_customer =
+    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultstb_customer}, {}};
+
+static void InitDefaultstb_type() {
+  GOOGLE_PROTOBUF_VERIFY_VERSION;
+
+  {
+    void* ptr = &::_tb_type_default_instance_;
+    new (ptr) ::tb_type();
+    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
+  }
+  ::tb_type::InitAsDefaultInstance();
+}
+
+::google::protobuf::internal::SCCInfo<0> scc_info_tb_type =
+    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultstb_type}, {}};
+
+static void InitDefaultstb_reply() {
+  GOOGLE_PROTOBUF_VERIFY_VERSION;
+
+  {
+    void* ptr = &::_tb_reply_default_instance_;
+    new (ptr) ::tb_reply();
+    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
+  }
+  ::tb_reply::InitAsDefaultInstance();
+}
+
+::google::protobuf::internal::SCCInfo<0> scc_info_tb_reply =
+    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultstb_reply}, {}};
+
+static void InitDefaultsrec_customer() {
+  GOOGLE_PROTOBUF_VERIFY_VERSION;
+
+  {
+    void* ptr = &::_rec_customer_default_instance_;
+    new (ptr) ::rec_customer();
+    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
+  }
+  ::rec_customer::InitAsDefaultInstance();
+}
+
+::google::protobuf::internal::SCCInfo<1> scc_info_rec_customer =
+    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsrec_customer}, {
+      &protobuf_table_2eproto::scc_info_tb_customer.base,}};
+
+static void InitDefaultsrec_type() {
+  GOOGLE_PROTOBUF_VERIFY_VERSION;
+
+  {
+    void* ptr = &::_rec_type_default_instance_;
+    new (ptr) ::rec_type();
+    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
+  }
+  ::rec_type::InitAsDefaultInstance();
+}
+
+::google::protobuf::internal::SCCInfo<1> scc_info_rec_type =
+    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsrec_type}, {
+      &protobuf_table_2eproto::scc_info_tb_type.base,}};
+
+static void InitDefaultsrec_reply() {
+  GOOGLE_PROTOBUF_VERIFY_VERSION;
+
+  {
+    void* ptr = &::_rec_reply_default_instance_;
+    new (ptr) ::rec_reply();
+    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
+  }
+  ::rec_reply::InitAsDefaultInstance();
+}
+
+::google::protobuf::internal::SCCInfo<1> scc_info_rec_reply =
+    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsrec_reply}, {
+      &protobuf_table_2eproto::scc_info_tb_reply.base,}};
+
+static void InitDefaultsview() {
+  GOOGLE_PROTOBUF_VERIFY_VERSION;
+
+  {
+    void* ptr = &::_view_default_instance_;
+    new (ptr) ::view();
+    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
+  }
+  ::view::InitAsDefaultInstance();
+}
+
+::google::protobuf::internal::SCCInfo<0> scc_info_view =
+    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsview}, {}};
+
+void InitDefaults() {
+  ::google::protobuf::internal::InitSCC(&scc_info_tb_customer.base);
+  ::google::protobuf::internal::InitSCC(&scc_info_tb_type.base);
+  ::google::protobuf::internal::InitSCC(&scc_info_tb_reply.base);
+  ::google::protobuf::internal::InitSCC(&scc_info_rec_customer.base);
+  ::google::protobuf::internal::InitSCC(&scc_info_rec_type.base);
+  ::google::protobuf::internal::InitSCC(&scc_info_rec_reply.base);
+  ::google::protobuf::internal::InitSCC(&scc_info_view.base);
+}
+
+::google::protobuf::Metadata file_level_metadata[7];
+
+const ::google::protobuf::uint32 TableStruct::offsets[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
+  ~0u,  // no _has_bits_
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::tb_customer, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::tb_customer, customer_id_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::tb_customer, customer_name_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::tb_customer, customer_gender_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::tb_customer, customer_phone_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::tb_customer, customer_password_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::tb_customer, customer_old_phone_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::tb_customer, customer_vcode_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::tb_customer, customer_vcode_expiry_time_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::tb_customer, customer_enable_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::tb_customer, customer_gen_time_),
+  ~0u,  // no _has_bits_
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::tb_type, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::tb_type, customer_id_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::tb_type, type_id_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::tb_type, type_name_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::tb_type, type_gen_time_),
+  ~0u,  // no _has_bits_
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::tb_reply, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::tb_reply, customer_id_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::tb_reply, type_id_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::tb_reply, reply_id_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::tb_reply, reply_name_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::tb_reply, reply_content_),
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::tb_reply, reply_gen_time_),
+  ~0u,  // no _has_bits_
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::rec_customer, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::rec_customer, customers_),
+  ~0u,  // no _has_bits_
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::rec_type, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::rec_type, types_),
+  ~0u,  // no _has_bits_
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::rec_reply, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::rec_reply, replys_),
+  ~0u,  // no _has_bits_
+  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::view, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+};
+static const ::google::protobuf::internal::MigrationSchema schemas[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
+  { 0, -1, sizeof(::tb_customer)},
+  { 15, -1, sizeof(::tb_type)},
+  { 24, -1, sizeof(::tb_reply)},
+  { 35, -1, sizeof(::rec_customer)},
+  { 41, -1, sizeof(::rec_type)},
+  { 47, -1, sizeof(::rec_reply)},
+  { 53, -1, sizeof(::view)},
+};
+
+static ::google::protobuf::Message const * const file_default_instances[] = {
+  reinterpret_cast<const ::google::protobuf::Message*>(&::_tb_customer_default_instance_),
+  reinterpret_cast<const ::google::protobuf::Message*>(&::_tb_type_default_instance_),
+  reinterpret_cast<const ::google::protobuf::Message*>(&::_tb_reply_default_instance_),
+  reinterpret_cast<const ::google::protobuf::Message*>(&::_rec_customer_default_instance_),
+  reinterpret_cast<const ::google::protobuf::Message*>(&::_rec_type_default_instance_),
+  reinterpret_cast<const ::google::protobuf::Message*>(&::_rec_reply_default_instance_),
+  reinterpret_cast<const ::google::protobuf::Message*>(&::_view_default_instance_),
+};
+
+void protobuf_AssignDescriptors() {
+  AddDescriptors();
+  AssignDescriptors(
+      "table.proto", schemas, file_default_instances, TableStruct::offsets,
+      file_level_metadata, NULL, NULL);
+}
+
+void protobuf_AssignDescriptorsOnce() {
+  static ::google::protobuf::internal::once_flag once;
+  ::google::protobuf::internal::call_once(once, protobuf_AssignDescriptors);
+}
+
+void protobuf_RegisterTypes(const ::std::string&) GOOGLE_PROTOBUF_ATTRIBUTE_COLD;
+void protobuf_RegisterTypes(const ::std::string&) {
+  protobuf_AssignDescriptorsOnce();
+  ::google::protobuf::internal::RegisterAllTypes(file_level_metadata, 7);
+}
+
+void AddDescriptorsImpl() {
+  InitDefaults();
+  static const char descriptor[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
+      "\n\013table.proto\"\221\002\n\013tb_customer\022\023\n\013custome"
+      "r_id\030\001 \001(\t\022\025\n\rcustomer_name\030\002 \001(\t\022\027\n\017cus"
+      "tomer_gender\030\003 \001(\010\022\026\n\016customer_phone\030\004 \001"
+      "(\t\022\031\n\021customer_password\030\005 \001(\t\022\032\n\022custome"
+      "r_old_phone\030\006 \001(\t\022\026\n\016customer_vcode\030\007 \001("
+      "\t\022\"\n\032customer_vcode_expiry_time\030\010 \001(\t\022\027\n"
+      "\017customer_enable\030\t \001(\010\022\031\n\021customer_gen_t"
+      "ime\030\n \001(\t\"Y\n\007tb_type\022\023\n\013customer_id\030\001 \001("
+      "\t\022\017\n\007type_id\030\002 \001(\t\022\021\n\ttype_name\030\003 \001(\t\022\025\n"
+      "\rtype_gen_time\030\004 \001(\t\"\205\001\n\010tb_reply\022\023\n\013cus"
+      "tomer_id\030\001 \001(\t\022\017\n\007type_id\030\002 \001(\t\022\020\n\010reply"
+      "_id\030\003 \001(\t\022\022\n\nreply_name\030\004 \001(\t\022\025\n\rreply_c"
+      "ontent\030\005 \001(\t\022\026\n\016reply_gen_time\030\006 \001(\t\"/\n\014"
+      "rec_customer\022\037\n\tcustomers\030\001 \003(\0132\014.tb_cus"
+      "tomer\"#\n\010rec_type\022\027\n\005types\030\001 \003(\0132\010.tb_ty"
+      "pe\"&\n\trec_reply\022\031\n\006replys\030\001 \003(\0132\t.tb_rep"
+      "ly\"\006\n\004viewb\006proto3"
+  };
+  ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
+      descriptor, 658);
+  ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
+    "table.proto", &protobuf_RegisterTypes);
+}
+
+void AddDescriptors() {
+  static ::google::protobuf::internal::once_flag once;
+  ::google::protobuf::internal::call_once(once, AddDescriptorsImpl);
+}
+// Force AddDescriptors() to be called at dynamic initialization time.
+struct StaticDescriptorInitializer {
+  StaticDescriptorInitializer() {
+    AddDescriptors();
+  }
+} static_descriptor_initializer;
+}  // namespace protobuf_table_2eproto
+
+// ===================================================================
+
+void tb_customer::InitAsDefaultInstance() {
+}
+#if !defined(_MSC_VER) || _MSC_VER >= 1900
+const int tb_customer::kCustomerIdFieldNumber;
+const int tb_customer::kCustomerNameFieldNumber;
+const int tb_customer::kCustomerGenderFieldNumber;
+const int tb_customer::kCustomerPhoneFieldNumber;
+const int tb_customer::kCustomerPasswordFieldNumber;
+const int tb_customer::kCustomerOldPhoneFieldNumber;
+const int tb_customer::kCustomerVcodeFieldNumber;
+const int tb_customer::kCustomerVcodeExpiryTimeFieldNumber;
+const int tb_customer::kCustomerEnableFieldNumber;
+const int tb_customer::kCustomerGenTimeFieldNumber;
+#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
+
+tb_customer::tb_customer()
+  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
+  ::google::protobuf::internal::InitSCC(
+      &protobuf_table_2eproto::scc_info_tb_customer.base);
+  SharedCtor();
+  // @@protoc_insertion_point(constructor:tb_customer)
+}
+tb_customer::tb_customer(const tb_customer& from)
+  : ::google::protobuf::Message(),
+      _internal_metadata_(NULL) {
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  customer_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.customer_id().size() > 0) {
+    customer_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.customer_id_);
+  }
+  customer_name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.customer_name().size() > 0) {
+    customer_name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.customer_name_);
+  }
+  customer_phone_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.customer_phone().size() > 0) {
+    customer_phone_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.customer_phone_);
+  }
+  customer_password_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.customer_password().size() > 0) {
+    customer_password_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.customer_password_);
+  }
+  customer_old_phone_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.customer_old_phone().size() > 0) {
+    customer_old_phone_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.customer_old_phone_);
+  }
+  customer_vcode_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.customer_vcode().size() > 0) {
+    customer_vcode_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.customer_vcode_);
+  }
+  customer_vcode_expiry_time_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.customer_vcode_expiry_time().size() > 0) {
+    customer_vcode_expiry_time_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.customer_vcode_expiry_time_);
+  }
+  customer_gen_time_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.customer_gen_time().size() > 0) {
+    customer_gen_time_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.customer_gen_time_);
+  }
+  ::memcpy(&customer_gender_, &from.customer_gender_,
+    static_cast<size_t>(reinterpret_cast<char*>(&customer_enable_) -
+    reinterpret_cast<char*>(&customer_gender_)) + sizeof(customer_enable_));
+  // @@protoc_insertion_point(copy_constructor:tb_customer)
+}
+
+void tb_customer::SharedCtor() {
+  customer_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  customer_name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  customer_phone_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  customer_password_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  customer_old_phone_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  customer_vcode_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  customer_vcode_expiry_time_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  customer_gen_time_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  ::memset(&customer_gender_, 0, static_cast<size_t>(
+      reinterpret_cast<char*>(&customer_enable_) -
+      reinterpret_cast<char*>(&customer_gender_)) + sizeof(customer_enable_));
+}
+
+tb_customer::~tb_customer() {
+  // @@protoc_insertion_point(destructor:tb_customer)
+  SharedDtor();
+}
+
+void tb_customer::SharedDtor() {
+  customer_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  customer_name_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  customer_phone_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  customer_password_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  customer_old_phone_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  customer_vcode_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  customer_vcode_expiry_time_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  customer_gen_time_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+
+void tb_customer::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+const ::google::protobuf::Descriptor* tb_customer::descriptor() {
+  ::protobuf_table_2eproto::protobuf_AssignDescriptorsOnce();
+  return ::protobuf_table_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
+}
+
+const tb_customer& tb_customer::default_instance() {
+  ::google::protobuf::internal::InitSCC(&protobuf_table_2eproto::scc_info_tb_customer.base);
+  return *internal_default_instance();
+}
+
+
+void tb_customer::Clear() {
+// @@protoc_insertion_point(message_clear_start:tb_customer)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  customer_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  customer_name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  customer_phone_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  customer_password_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  customer_old_phone_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  customer_vcode_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  customer_vcode_expiry_time_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  customer_gen_time_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  ::memset(&customer_gender_, 0, static_cast<size_t>(
+      reinterpret_cast<char*>(&customer_enable_) -
+      reinterpret_cast<char*>(&customer_gender_)) + sizeof(customer_enable_));
+  _internal_metadata_.Clear();
+}
+
+bool tb_customer::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
+  ::google::protobuf::uint32 tag;
+  // @@protoc_insertion_point(parse_start:tb_customer)
+  for (;;) {
+    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
+    tag = p.first;
+    if (!p.second) goto handle_unusual;
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // string customer_id = 1;
+      case 1: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_customer_id()));
+          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+            this->customer_id().data(), static_cast<int>(this->customer_id().length()),
+            ::google::protobuf::internal::WireFormatLite::PARSE,
+            "tb_customer.customer_id"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // string customer_name = 2;
+      case 2: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_customer_name()));
+          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+            this->customer_name().data(), static_cast<int>(this->customer_name().length()),
+            ::google::protobuf::internal::WireFormatLite::PARSE,
+            "tb_customer.customer_name"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // bool customer_gender = 3;
+      case 3: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(24u /* 24 & 0xFF */)) {
+
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
+                 input, &customer_gender_)));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // string customer_phone = 4;
+      case 4: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(34u /* 34 & 0xFF */)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_customer_phone()));
+          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+            this->customer_phone().data(), static_cast<int>(this->customer_phone().length()),
+            ::google::protobuf::internal::WireFormatLite::PARSE,
+            "tb_customer.customer_phone"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // string customer_password = 5;
+      case 5: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(42u /* 42 & 0xFF */)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_customer_password()));
+          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+            this->customer_password().data(), static_cast<int>(this->customer_password().length()),
+            ::google::protobuf::internal::WireFormatLite::PARSE,
+            "tb_customer.customer_password"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // string customer_old_phone = 6;
+      case 6: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(50u /* 50 & 0xFF */)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_customer_old_phone()));
+          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+            this->customer_old_phone().data(), static_cast<int>(this->customer_old_phone().length()),
+            ::google::protobuf::internal::WireFormatLite::PARSE,
+            "tb_customer.customer_old_phone"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // string customer_vcode = 7;
+      case 7: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(58u /* 58 & 0xFF */)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_customer_vcode()));
+          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+            this->customer_vcode().data(), static_cast<int>(this->customer_vcode().length()),
+            ::google::protobuf::internal::WireFormatLite::PARSE,
+            "tb_customer.customer_vcode"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // string customer_vcode_expiry_time = 8;
+      case 8: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(66u /* 66 & 0xFF */)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_customer_vcode_expiry_time()));
+          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+            this->customer_vcode_expiry_time().data(), static_cast<int>(this->customer_vcode_expiry_time().length()),
+            ::google::protobuf::internal::WireFormatLite::PARSE,
+            "tb_customer.customer_vcode_expiry_time"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // bool customer_enable = 9;
+      case 9: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(72u /* 72 & 0xFF */)) {
+
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
+                 input, &customer_enable_)));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // string customer_gen_time = 10;
+      case 10: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(82u /* 82 & 0xFF */)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_customer_gen_time()));
+          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+            this->customer_gen_time().data(), static_cast<int>(this->customer_gen_time().length()),
+            ::google::protobuf::internal::WireFormatLite::PARSE,
+            "tb_customer.customer_gen_time"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      default: {
+      handle_unusual:
+        if (tag == 0) {
+          goto success;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, _internal_metadata_.mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+success:
+  // @@protoc_insertion_point(parse_success:tb_customer)
+  return true;
+failure:
+  // @@protoc_insertion_point(parse_failure:tb_customer)
+  return false;
+#undef DO_
+}
+
+void tb_customer::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // @@protoc_insertion_point(serialize_start:tb_customer)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // string customer_id = 1;
+  if (this->customer_id().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->customer_id().data(), static_cast<int>(this->customer_id().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_customer.customer_id");
+    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
+      1, this->customer_id(), output);
+  }
+
+  // string customer_name = 2;
+  if (this->customer_name().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->customer_name().data(), static_cast<int>(this->customer_name().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_customer.customer_name");
+    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
+      2, this->customer_name(), output);
+  }
+
+  // bool customer_gender = 3;
+  if (this->customer_gender() != 0) {
+    ::google::protobuf::internal::WireFormatLite::WriteBool(3, this->customer_gender(), output);
+  }
+
+  // string customer_phone = 4;
+  if (this->customer_phone().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->customer_phone().data(), static_cast<int>(this->customer_phone().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_customer.customer_phone");
+    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
+      4, this->customer_phone(), output);
+  }
+
+  // string customer_password = 5;
+  if (this->customer_password().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->customer_password().data(), static_cast<int>(this->customer_password().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_customer.customer_password");
+    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
+      5, this->customer_password(), output);
+  }
+
+  // string customer_old_phone = 6;
+  if (this->customer_old_phone().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->customer_old_phone().data(), static_cast<int>(this->customer_old_phone().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_customer.customer_old_phone");
+    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
+      6, this->customer_old_phone(), output);
+  }
+
+  // string customer_vcode = 7;
+  if (this->customer_vcode().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->customer_vcode().data(), static_cast<int>(this->customer_vcode().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_customer.customer_vcode");
+    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
+      7, this->customer_vcode(), output);
+  }
+
+  // string customer_vcode_expiry_time = 8;
+  if (this->customer_vcode_expiry_time().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->customer_vcode_expiry_time().data(), static_cast<int>(this->customer_vcode_expiry_time().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_customer.customer_vcode_expiry_time");
+    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
+      8, this->customer_vcode_expiry_time(), output);
+  }
+
+  // bool customer_enable = 9;
+  if (this->customer_enable() != 0) {
+    ::google::protobuf::internal::WireFormatLite::WriteBool(9, this->customer_enable(), output);
+  }
+
+  // string customer_gen_time = 10;
+  if (this->customer_gen_time().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->customer_gen_time().data(), static_cast<int>(this->customer_gen_time().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_customer.customer_gen_time");
+    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
+      10, this->customer_gen_time(), output);
+  }
+
+  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
+  }
+  // @@protoc_insertion_point(serialize_end:tb_customer)
+}
+
+::google::protobuf::uint8* tb_customer::InternalSerializeWithCachedSizesToArray(
+    bool deterministic, ::google::protobuf::uint8* target) const {
+  (void)deterministic; // Unused
+  // @@protoc_insertion_point(serialize_to_array_start:tb_customer)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // string customer_id = 1;
+  if (this->customer_id().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->customer_id().data(), static_cast<int>(this->customer_id().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_customer.customer_id");
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        1, this->customer_id(), target);
+  }
+
+  // string customer_name = 2;
+  if (this->customer_name().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->customer_name().data(), static_cast<int>(this->customer_name().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_customer.customer_name");
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        2, this->customer_name(), target);
+  }
+
+  // bool customer_gender = 3;
+  if (this->customer_gender() != 0) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(3, this->customer_gender(), target);
+  }
+
+  // string customer_phone = 4;
+  if (this->customer_phone().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->customer_phone().data(), static_cast<int>(this->customer_phone().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_customer.customer_phone");
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        4, this->customer_phone(), target);
+  }
+
+  // string customer_password = 5;
+  if (this->customer_password().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->customer_password().data(), static_cast<int>(this->customer_password().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_customer.customer_password");
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        5, this->customer_password(), target);
+  }
+
+  // string customer_old_phone = 6;
+  if (this->customer_old_phone().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->customer_old_phone().data(), static_cast<int>(this->customer_old_phone().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_customer.customer_old_phone");
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        6, this->customer_old_phone(), target);
+  }
+
+  // string customer_vcode = 7;
+  if (this->customer_vcode().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->customer_vcode().data(), static_cast<int>(this->customer_vcode().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_customer.customer_vcode");
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        7, this->customer_vcode(), target);
+  }
+
+  // string customer_vcode_expiry_time = 8;
+  if (this->customer_vcode_expiry_time().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->customer_vcode_expiry_time().data(), static_cast<int>(this->customer_vcode_expiry_time().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_customer.customer_vcode_expiry_time");
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        8, this->customer_vcode_expiry_time(), target);
+  }
+
+  // bool customer_enable = 9;
+  if (this->customer_enable() != 0) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(9, this->customer_enable(), target);
+  }
+
+  // string customer_gen_time = 10;
+  if (this->customer_gen_time().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->customer_gen_time().data(), static_cast<int>(this->customer_gen_time().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_customer.customer_gen_time");
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        10, this->customer_gen_time(), target);
+  }
+
+  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:tb_customer)
+  return target;
+}
+
+size_t tb_customer::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:tb_customer)
+  size_t total_size = 0;
+
+  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
+  }
+  // string customer_id = 1;
+  if (this->customer_id().size() > 0) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::StringSize(
+        this->customer_id());
+  }
+
+  // string customer_name = 2;
+  if (this->customer_name().size() > 0) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::StringSize(
+        this->customer_name());
+  }
+
+  // string customer_phone = 4;
+  if (this->customer_phone().size() > 0) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::StringSize(
+        this->customer_phone());
+  }
+
+  // string customer_password = 5;
+  if (this->customer_password().size() > 0) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::StringSize(
+        this->customer_password());
+  }
+
+  // string customer_old_phone = 6;
+  if (this->customer_old_phone().size() > 0) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::StringSize(
+        this->customer_old_phone());
+  }
+
+  // string customer_vcode = 7;
+  if (this->customer_vcode().size() > 0) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::StringSize(
+        this->customer_vcode());
+  }
+
+  // string customer_vcode_expiry_time = 8;
+  if (this->customer_vcode_expiry_time().size() > 0) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::StringSize(
+        this->customer_vcode_expiry_time());
+  }
+
+  // string customer_gen_time = 10;
+  if (this->customer_gen_time().size() > 0) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::StringSize(
+        this->customer_gen_time());
+  }
+
+  // bool customer_gender = 3;
+  if (this->customer_gender() != 0) {
+    total_size += 1 + 1;
+  }
+
+  // bool customer_enable = 9;
+  if (this->customer_enable() != 0) {
+    total_size += 1 + 1;
+  }
+
+  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
+  SetCachedSize(cached_size);
+  return total_size;
+}
+
+void tb_customer::MergeFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_merge_from_start:tb_customer)
+  GOOGLE_DCHECK_NE(&from, this);
+  const tb_customer* source =
+      ::google::protobuf::internal::DynamicCastToGenerated<const tb_customer>(
+          &from);
+  if (source == NULL) {
+  // @@protoc_insertion_point(generalized_merge_from_cast_fail:tb_customer)
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+  // @@protoc_insertion_point(generalized_merge_from_cast_success:tb_customer)
+    MergeFrom(*source);
+  }
+}
+
+void tb_customer::MergeFrom(const tb_customer& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:tb_customer)
+  GOOGLE_DCHECK_NE(&from, this);
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (from.customer_id().size() > 0) {
+
+    customer_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.customer_id_);
+  }
+  if (from.customer_name().size() > 0) {
+
+    customer_name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.customer_name_);
+  }
+  if (from.customer_phone().size() > 0) {
+
+    customer_phone_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.customer_phone_);
+  }
+  if (from.customer_password().size() > 0) {
+
+    customer_password_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.customer_password_);
+  }
+  if (from.customer_old_phone().size() > 0) {
+
+    customer_old_phone_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.customer_old_phone_);
+  }
+  if (from.customer_vcode().size() > 0) {
+
+    customer_vcode_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.customer_vcode_);
+  }
+  if (from.customer_vcode_expiry_time().size() > 0) {
+
+    customer_vcode_expiry_time_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.customer_vcode_expiry_time_);
+  }
+  if (from.customer_gen_time().size() > 0) {
+
+    customer_gen_time_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.customer_gen_time_);
+  }
+  if (from.customer_gender() != 0) {
+    set_customer_gender(from.customer_gender());
+  }
+  if (from.customer_enable() != 0) {
+    set_customer_enable(from.customer_enable());
+  }
+}
+
+void tb_customer::CopyFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_copy_from_start:tb_customer)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void tb_customer::CopyFrom(const tb_customer& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:tb_customer)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool tb_customer::IsInitialized() const {
+  return true;
+}
+
+void tb_customer::Swap(tb_customer* other) {
+  if (other == this) return;
+  InternalSwap(other);
+}
+void tb_customer::InternalSwap(tb_customer* other) {
+  using std::swap;
+  customer_id_.Swap(&other->customer_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  customer_name_.Swap(&other->customer_name_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  customer_phone_.Swap(&other->customer_phone_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  customer_password_.Swap(&other->customer_password_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  customer_old_phone_.Swap(&other->customer_old_phone_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  customer_vcode_.Swap(&other->customer_vcode_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  customer_vcode_expiry_time_.Swap(&other->customer_vcode_expiry_time_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  customer_gen_time_.Swap(&other->customer_gen_time_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  swap(customer_gender_, other->customer_gender_);
+  swap(customer_enable_, other->customer_enable_);
+  _internal_metadata_.Swap(&other->_internal_metadata_);
+}
+
+::google::protobuf::Metadata tb_customer::GetMetadata() const {
+  protobuf_table_2eproto::protobuf_AssignDescriptorsOnce();
+  return ::protobuf_table_2eproto::file_level_metadata[kIndexInFileMessages];
+}
+
+
+// ===================================================================
+
+void tb_type::InitAsDefaultInstance() {
+}
+#if !defined(_MSC_VER) || _MSC_VER >= 1900
+const int tb_type::kCustomerIdFieldNumber;
+const int tb_type::kTypeIdFieldNumber;
+const int tb_type::kTypeNameFieldNumber;
+const int tb_type::kTypeGenTimeFieldNumber;
+#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
+
+tb_type::tb_type()
+  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
+  ::google::protobuf::internal::InitSCC(
+      &protobuf_table_2eproto::scc_info_tb_type.base);
+  SharedCtor();
+  // @@protoc_insertion_point(constructor:tb_type)
+}
+tb_type::tb_type(const tb_type& from)
+  : ::google::protobuf::Message(),
+      _internal_metadata_(NULL) {
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  customer_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.customer_id().size() > 0) {
+    customer_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.customer_id_);
+  }
+  type_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.type_id().size() > 0) {
+    type_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.type_id_);
+  }
+  type_name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.type_name().size() > 0) {
+    type_name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.type_name_);
+  }
+  type_gen_time_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.type_gen_time().size() > 0) {
+    type_gen_time_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.type_gen_time_);
+  }
+  // @@protoc_insertion_point(copy_constructor:tb_type)
+}
+
+void tb_type::SharedCtor() {
+  customer_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  type_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  type_name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  type_gen_time_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+
+tb_type::~tb_type() {
+  // @@protoc_insertion_point(destructor:tb_type)
+  SharedDtor();
+}
+
+void tb_type::SharedDtor() {
+  customer_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  type_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  type_name_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  type_gen_time_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+
+void tb_type::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+const ::google::protobuf::Descriptor* tb_type::descriptor() {
+  ::protobuf_table_2eproto::protobuf_AssignDescriptorsOnce();
+  return ::protobuf_table_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
+}
+
+const tb_type& tb_type::default_instance() {
+  ::google::protobuf::internal::InitSCC(&protobuf_table_2eproto::scc_info_tb_type.base);
+  return *internal_default_instance();
+}
+
+
+void tb_type::Clear() {
+// @@protoc_insertion_point(message_clear_start:tb_type)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  customer_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  type_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  type_name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  type_gen_time_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  _internal_metadata_.Clear();
+}
+
+bool tb_type::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
+  ::google::protobuf::uint32 tag;
+  // @@protoc_insertion_point(parse_start:tb_type)
+  for (;;) {
+    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
+    tag = p.first;
+    if (!p.second) goto handle_unusual;
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // string customer_id = 1;
+      case 1: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_customer_id()));
+          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+            this->customer_id().data(), static_cast<int>(this->customer_id().length()),
+            ::google::protobuf::internal::WireFormatLite::PARSE,
+            "tb_type.customer_id"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // string type_id = 2;
+      case 2: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_type_id()));
+          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+            this->type_id().data(), static_cast<int>(this->type_id().length()),
+            ::google::protobuf::internal::WireFormatLite::PARSE,
+            "tb_type.type_id"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // string type_name = 3;
+      case 3: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_type_name()));
+          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+            this->type_name().data(), static_cast<int>(this->type_name().length()),
+            ::google::protobuf::internal::WireFormatLite::PARSE,
+            "tb_type.type_name"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // string type_gen_time = 4;
+      case 4: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(34u /* 34 & 0xFF */)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_type_gen_time()));
+          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+            this->type_gen_time().data(), static_cast<int>(this->type_gen_time().length()),
+            ::google::protobuf::internal::WireFormatLite::PARSE,
+            "tb_type.type_gen_time"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      default: {
+      handle_unusual:
+        if (tag == 0) {
+          goto success;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, _internal_metadata_.mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+success:
+  // @@protoc_insertion_point(parse_success:tb_type)
+  return true;
+failure:
+  // @@protoc_insertion_point(parse_failure:tb_type)
+  return false;
+#undef DO_
+}
+
+void tb_type::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // @@protoc_insertion_point(serialize_start:tb_type)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // string customer_id = 1;
+  if (this->customer_id().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->customer_id().data(), static_cast<int>(this->customer_id().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_type.customer_id");
+    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
+      1, this->customer_id(), output);
+  }
+
+  // string type_id = 2;
+  if (this->type_id().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->type_id().data(), static_cast<int>(this->type_id().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_type.type_id");
+    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
+      2, this->type_id(), output);
+  }
+
+  // string type_name = 3;
+  if (this->type_name().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->type_name().data(), static_cast<int>(this->type_name().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_type.type_name");
+    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
+      3, this->type_name(), output);
+  }
+
+  // string type_gen_time = 4;
+  if (this->type_gen_time().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->type_gen_time().data(), static_cast<int>(this->type_gen_time().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_type.type_gen_time");
+    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
+      4, this->type_gen_time(), output);
+  }
+
+  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
+  }
+  // @@protoc_insertion_point(serialize_end:tb_type)
+}
+
+::google::protobuf::uint8* tb_type::InternalSerializeWithCachedSizesToArray(
+    bool deterministic, ::google::protobuf::uint8* target) const {
+  (void)deterministic; // Unused
+  // @@protoc_insertion_point(serialize_to_array_start:tb_type)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // string customer_id = 1;
+  if (this->customer_id().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->customer_id().data(), static_cast<int>(this->customer_id().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_type.customer_id");
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        1, this->customer_id(), target);
+  }
+
+  // string type_id = 2;
+  if (this->type_id().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->type_id().data(), static_cast<int>(this->type_id().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_type.type_id");
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        2, this->type_id(), target);
+  }
+
+  // string type_name = 3;
+  if (this->type_name().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->type_name().data(), static_cast<int>(this->type_name().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_type.type_name");
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        3, this->type_name(), target);
+  }
+
+  // string type_gen_time = 4;
+  if (this->type_gen_time().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->type_gen_time().data(), static_cast<int>(this->type_gen_time().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_type.type_gen_time");
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        4, this->type_gen_time(), target);
+  }
+
+  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:tb_type)
+  return target;
+}
+
+size_t tb_type::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:tb_type)
+  size_t total_size = 0;
+
+  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
+  }
+  // string customer_id = 1;
+  if (this->customer_id().size() > 0) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::StringSize(
+        this->customer_id());
+  }
+
+  // string type_id = 2;
+  if (this->type_id().size() > 0) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::StringSize(
+        this->type_id());
+  }
+
+  // string type_name = 3;
+  if (this->type_name().size() > 0) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::StringSize(
+        this->type_name());
+  }
+
+  // string type_gen_time = 4;
+  if (this->type_gen_time().size() > 0) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::StringSize(
+        this->type_gen_time());
+  }
+
+  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
+  SetCachedSize(cached_size);
+  return total_size;
+}
+
+void tb_type::MergeFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_merge_from_start:tb_type)
+  GOOGLE_DCHECK_NE(&from, this);
+  const tb_type* source =
+      ::google::protobuf::internal::DynamicCastToGenerated<const tb_type>(
+          &from);
+  if (source == NULL) {
+  // @@protoc_insertion_point(generalized_merge_from_cast_fail:tb_type)
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+  // @@protoc_insertion_point(generalized_merge_from_cast_success:tb_type)
+    MergeFrom(*source);
+  }
+}
+
+void tb_type::MergeFrom(const tb_type& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:tb_type)
+  GOOGLE_DCHECK_NE(&from, this);
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (from.customer_id().size() > 0) {
+
+    customer_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.customer_id_);
+  }
+  if (from.type_id().size() > 0) {
+
+    type_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.type_id_);
+  }
+  if (from.type_name().size() > 0) {
+
+    type_name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.type_name_);
+  }
+  if (from.type_gen_time().size() > 0) {
+
+    type_gen_time_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.type_gen_time_);
+  }
+}
+
+void tb_type::CopyFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_copy_from_start:tb_type)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void tb_type::CopyFrom(const tb_type& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:tb_type)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool tb_type::IsInitialized() const {
+  return true;
+}
+
+void tb_type::Swap(tb_type* other) {
+  if (other == this) return;
+  InternalSwap(other);
+}
+void tb_type::InternalSwap(tb_type* other) {
+  using std::swap;
+  customer_id_.Swap(&other->customer_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  type_id_.Swap(&other->type_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  type_name_.Swap(&other->type_name_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  type_gen_time_.Swap(&other->type_gen_time_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  _internal_metadata_.Swap(&other->_internal_metadata_);
+}
+
+::google::protobuf::Metadata tb_type::GetMetadata() const {
+  protobuf_table_2eproto::protobuf_AssignDescriptorsOnce();
+  return ::protobuf_table_2eproto::file_level_metadata[kIndexInFileMessages];
+}
+
+
+// ===================================================================
+
+void tb_reply::InitAsDefaultInstance() {
+}
+#if !defined(_MSC_VER) || _MSC_VER >= 1900
+const int tb_reply::kCustomerIdFieldNumber;
+const int tb_reply::kTypeIdFieldNumber;
+const int tb_reply::kReplyIdFieldNumber;
+const int tb_reply::kReplyNameFieldNumber;
+const int tb_reply::kReplyContentFieldNumber;
+const int tb_reply::kReplyGenTimeFieldNumber;
+#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
+
+tb_reply::tb_reply()
+  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
+  ::google::protobuf::internal::InitSCC(
+      &protobuf_table_2eproto::scc_info_tb_reply.base);
+  SharedCtor();
+  // @@protoc_insertion_point(constructor:tb_reply)
+}
+tb_reply::tb_reply(const tb_reply& from)
+  : ::google::protobuf::Message(),
+      _internal_metadata_(NULL) {
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  customer_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.customer_id().size() > 0) {
+    customer_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.customer_id_);
+  }
+  type_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.type_id().size() > 0) {
+    type_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.type_id_);
+  }
+  reply_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.reply_id().size() > 0) {
+    reply_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.reply_id_);
+  }
+  reply_name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.reply_name().size() > 0) {
+    reply_name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.reply_name_);
+  }
+  reply_content_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.reply_content().size() > 0) {
+    reply_content_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.reply_content_);
+  }
+  reply_gen_time_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.reply_gen_time().size() > 0) {
+    reply_gen_time_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.reply_gen_time_);
+  }
+  // @@protoc_insertion_point(copy_constructor:tb_reply)
+}
+
+void tb_reply::SharedCtor() {
+  customer_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  type_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  reply_id_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  reply_name_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  reply_content_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  reply_gen_time_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+
+tb_reply::~tb_reply() {
+  // @@protoc_insertion_point(destructor:tb_reply)
+  SharedDtor();
+}
+
+void tb_reply::SharedDtor() {
+  customer_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  type_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  reply_id_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  reply_name_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  reply_content_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  reply_gen_time_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+
+void tb_reply::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+const ::google::protobuf::Descriptor* tb_reply::descriptor() {
+  ::protobuf_table_2eproto::protobuf_AssignDescriptorsOnce();
+  return ::protobuf_table_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
+}
+
+const tb_reply& tb_reply::default_instance() {
+  ::google::protobuf::internal::InitSCC(&protobuf_table_2eproto::scc_info_tb_reply.base);
+  return *internal_default_instance();
+}
+
+
+void tb_reply::Clear() {
+// @@protoc_insertion_point(message_clear_start:tb_reply)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  customer_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  type_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  reply_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  reply_name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  reply_content_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  reply_gen_time_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  _internal_metadata_.Clear();
+}
+
+bool tb_reply::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
+  ::google::protobuf::uint32 tag;
+  // @@protoc_insertion_point(parse_start:tb_reply)
+  for (;;) {
+    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
+    tag = p.first;
+    if (!p.second) goto handle_unusual;
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // string customer_id = 1;
+      case 1: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_customer_id()));
+          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+            this->customer_id().data(), static_cast<int>(this->customer_id().length()),
+            ::google::protobuf::internal::WireFormatLite::PARSE,
+            "tb_reply.customer_id"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // string type_id = 2;
+      case 2: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_type_id()));
+          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+            this->type_id().data(), static_cast<int>(this->type_id().length()),
+            ::google::protobuf::internal::WireFormatLite::PARSE,
+            "tb_reply.type_id"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // string reply_id = 3;
+      case 3: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_reply_id()));
+          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+            this->reply_id().data(), static_cast<int>(this->reply_id().length()),
+            ::google::protobuf::internal::WireFormatLite::PARSE,
+            "tb_reply.reply_id"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // string reply_name = 4;
+      case 4: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(34u /* 34 & 0xFF */)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_reply_name()));
+          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+            this->reply_name().data(), static_cast<int>(this->reply_name().length()),
+            ::google::protobuf::internal::WireFormatLite::PARSE,
+            "tb_reply.reply_name"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // string reply_content = 5;
+      case 5: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(42u /* 42 & 0xFF */)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_reply_content()));
+          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+            this->reply_content().data(), static_cast<int>(this->reply_content().length()),
+            ::google::protobuf::internal::WireFormatLite::PARSE,
+            "tb_reply.reply_content"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // string reply_gen_time = 6;
+      case 6: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(50u /* 50 & 0xFF */)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_reply_gen_time()));
+          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+            this->reply_gen_time().data(), static_cast<int>(this->reply_gen_time().length()),
+            ::google::protobuf::internal::WireFormatLite::PARSE,
+            "tb_reply.reply_gen_time"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      default: {
+      handle_unusual:
+        if (tag == 0) {
+          goto success;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, _internal_metadata_.mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+success:
+  // @@protoc_insertion_point(parse_success:tb_reply)
+  return true;
+failure:
+  // @@protoc_insertion_point(parse_failure:tb_reply)
+  return false;
+#undef DO_
+}
+
+void tb_reply::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // @@protoc_insertion_point(serialize_start:tb_reply)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // string customer_id = 1;
+  if (this->customer_id().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->customer_id().data(), static_cast<int>(this->customer_id().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_reply.customer_id");
+    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
+      1, this->customer_id(), output);
+  }
+
+  // string type_id = 2;
+  if (this->type_id().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->type_id().data(), static_cast<int>(this->type_id().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_reply.type_id");
+    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
+      2, this->type_id(), output);
+  }
+
+  // string reply_id = 3;
+  if (this->reply_id().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->reply_id().data(), static_cast<int>(this->reply_id().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_reply.reply_id");
+    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
+      3, this->reply_id(), output);
+  }
+
+  // string reply_name = 4;
+  if (this->reply_name().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->reply_name().data(), static_cast<int>(this->reply_name().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_reply.reply_name");
+    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
+      4, this->reply_name(), output);
+  }
+
+  // string reply_content = 5;
+  if (this->reply_content().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->reply_content().data(), static_cast<int>(this->reply_content().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_reply.reply_content");
+    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
+      5, this->reply_content(), output);
+  }
+
+  // string reply_gen_time = 6;
+  if (this->reply_gen_time().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->reply_gen_time().data(), static_cast<int>(this->reply_gen_time().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_reply.reply_gen_time");
+    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
+      6, this->reply_gen_time(), output);
+  }
+
+  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
+  }
+  // @@protoc_insertion_point(serialize_end:tb_reply)
+}
+
+::google::protobuf::uint8* tb_reply::InternalSerializeWithCachedSizesToArray(
+    bool deterministic, ::google::protobuf::uint8* target) const {
+  (void)deterministic; // Unused
+  // @@protoc_insertion_point(serialize_to_array_start:tb_reply)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // string customer_id = 1;
+  if (this->customer_id().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->customer_id().data(), static_cast<int>(this->customer_id().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_reply.customer_id");
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        1, this->customer_id(), target);
+  }
+
+  // string type_id = 2;
+  if (this->type_id().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->type_id().data(), static_cast<int>(this->type_id().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_reply.type_id");
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        2, this->type_id(), target);
+  }
+
+  // string reply_id = 3;
+  if (this->reply_id().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->reply_id().data(), static_cast<int>(this->reply_id().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_reply.reply_id");
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        3, this->reply_id(), target);
+  }
+
+  // string reply_name = 4;
+  if (this->reply_name().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->reply_name().data(), static_cast<int>(this->reply_name().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_reply.reply_name");
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        4, this->reply_name(), target);
+  }
+
+  // string reply_content = 5;
+  if (this->reply_content().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->reply_content().data(), static_cast<int>(this->reply_content().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_reply.reply_content");
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        5, this->reply_content(), target);
+  }
+
+  // string reply_gen_time = 6;
+  if (this->reply_gen_time().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->reply_gen_time().data(), static_cast<int>(this->reply_gen_time().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "tb_reply.reply_gen_time");
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        6, this->reply_gen_time(), target);
+  }
+
+  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:tb_reply)
+  return target;
+}
+
+size_t tb_reply::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:tb_reply)
+  size_t total_size = 0;
+
+  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
+  }
+  // string customer_id = 1;
+  if (this->customer_id().size() > 0) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::StringSize(
+        this->customer_id());
+  }
+
+  // string type_id = 2;
+  if (this->type_id().size() > 0) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::StringSize(
+        this->type_id());
+  }
+
+  // string reply_id = 3;
+  if (this->reply_id().size() > 0) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::StringSize(
+        this->reply_id());
+  }
+
+  // string reply_name = 4;
+  if (this->reply_name().size() > 0) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::StringSize(
+        this->reply_name());
+  }
+
+  // string reply_content = 5;
+  if (this->reply_content().size() > 0) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::StringSize(
+        this->reply_content());
+  }
+
+  // string reply_gen_time = 6;
+  if (this->reply_gen_time().size() > 0) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::StringSize(
+        this->reply_gen_time());
+  }
+
+  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
+  SetCachedSize(cached_size);
+  return total_size;
+}
+
+void tb_reply::MergeFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_merge_from_start:tb_reply)
+  GOOGLE_DCHECK_NE(&from, this);
+  const tb_reply* source =
+      ::google::protobuf::internal::DynamicCastToGenerated<const tb_reply>(
+          &from);
+  if (source == NULL) {
+  // @@protoc_insertion_point(generalized_merge_from_cast_fail:tb_reply)
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+  // @@protoc_insertion_point(generalized_merge_from_cast_success:tb_reply)
+    MergeFrom(*source);
+  }
+}
+
+void tb_reply::MergeFrom(const tb_reply& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:tb_reply)
+  GOOGLE_DCHECK_NE(&from, this);
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (from.customer_id().size() > 0) {
+
+    customer_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.customer_id_);
+  }
+  if (from.type_id().size() > 0) {
+
+    type_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.type_id_);
+  }
+  if (from.reply_id().size() > 0) {
+
+    reply_id_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.reply_id_);
+  }
+  if (from.reply_name().size() > 0) {
+
+    reply_name_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.reply_name_);
+  }
+  if (from.reply_content().size() > 0) {
+
+    reply_content_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.reply_content_);
+  }
+  if (from.reply_gen_time().size() > 0) {
+
+    reply_gen_time_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.reply_gen_time_);
+  }
+}
+
+void tb_reply::CopyFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_copy_from_start:tb_reply)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void tb_reply::CopyFrom(const tb_reply& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:tb_reply)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool tb_reply::IsInitialized() const {
+  return true;
+}
+
+void tb_reply::Swap(tb_reply* other) {
+  if (other == this) return;
+  InternalSwap(other);
+}
+void tb_reply::InternalSwap(tb_reply* other) {
+  using std::swap;
+  customer_id_.Swap(&other->customer_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  type_id_.Swap(&other->type_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  reply_id_.Swap(&other->reply_id_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  reply_name_.Swap(&other->reply_name_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  reply_content_.Swap(&other->reply_content_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  reply_gen_time_.Swap(&other->reply_gen_time_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  _internal_metadata_.Swap(&other->_internal_metadata_);
+}
+
+::google::protobuf::Metadata tb_reply::GetMetadata() const {
+  protobuf_table_2eproto::protobuf_AssignDescriptorsOnce();
+  return ::protobuf_table_2eproto::file_level_metadata[kIndexInFileMessages];
+}
+
+
+// ===================================================================
+
+void rec_customer::InitAsDefaultInstance() {
+}
+#if !defined(_MSC_VER) || _MSC_VER >= 1900
+const int rec_customer::kCustomersFieldNumber;
+#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
+
+rec_customer::rec_customer()
+  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
+  ::google::protobuf::internal::InitSCC(
+      &protobuf_table_2eproto::scc_info_rec_customer.base);
+  SharedCtor();
+  // @@protoc_insertion_point(constructor:rec_customer)
+}
+rec_customer::rec_customer(const rec_customer& from)
+  : ::google::protobuf::Message(),
+      _internal_metadata_(NULL),
+      customers_(from.customers_) {
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  // @@protoc_insertion_point(copy_constructor:rec_customer)
+}
+
+void rec_customer::SharedCtor() {
+}
+
+rec_customer::~rec_customer() {
+  // @@protoc_insertion_point(destructor:rec_customer)
+  SharedDtor();
+}
+
+void rec_customer::SharedDtor() {
+}
+
+void rec_customer::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+const ::google::protobuf::Descriptor* rec_customer::descriptor() {
+  ::protobuf_table_2eproto::protobuf_AssignDescriptorsOnce();
+  return ::protobuf_table_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
+}
+
+const rec_customer& rec_customer::default_instance() {
+  ::google::protobuf::internal::InitSCC(&protobuf_table_2eproto::scc_info_rec_customer.base);
+  return *internal_default_instance();
+}
+
+
+void rec_customer::Clear() {
+// @@protoc_insertion_point(message_clear_start:rec_customer)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  customers_.Clear();
+  _internal_metadata_.Clear();
+}
+
+bool rec_customer::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
+  ::google::protobuf::uint32 tag;
+  // @@protoc_insertion_point(parse_start:rec_customer)
+  for (;;) {
+    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
+    tag = p.first;
+    if (!p.second) goto handle_unusual;
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // repeated .tb_customer customers = 1;
+      case 1: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
+                input, add_customers()));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      default: {
+      handle_unusual:
+        if (tag == 0) {
+          goto success;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, _internal_metadata_.mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+success:
+  // @@protoc_insertion_point(parse_success:rec_customer)
+  return true;
+failure:
+  // @@protoc_insertion_point(parse_failure:rec_customer)
+  return false;
+#undef DO_
+}
+
+void rec_customer::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // @@protoc_insertion_point(serialize_start:rec_customer)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // repeated .tb_customer customers = 1;
+  for (unsigned int i = 0,
+      n = static_cast<unsigned int>(this->customers_size()); i < n; i++) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      1,
+      this->customers(static_cast<int>(i)),
+      output);
+  }
+
+  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
+  }
+  // @@protoc_insertion_point(serialize_end:rec_customer)
+}
+
+::google::protobuf::uint8* rec_customer::InternalSerializeWithCachedSizesToArray(
+    bool deterministic, ::google::protobuf::uint8* target) const {
+  (void)deterministic; // Unused
+  // @@protoc_insertion_point(serialize_to_array_start:rec_customer)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // repeated .tb_customer customers = 1;
+  for (unsigned int i = 0,
+      n = static_cast<unsigned int>(this->customers_size()); i < n; i++) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      InternalWriteMessageToArray(
+        1, this->customers(static_cast<int>(i)), deterministic, target);
+  }
+
+  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:rec_customer)
+  return target;
+}
+
+size_t rec_customer::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:rec_customer)
+  size_t total_size = 0;
+
+  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
+  }
+  // repeated .tb_customer customers = 1;
+  {
+    unsigned int count = static_cast<unsigned int>(this->customers_size());
+    total_size += 1UL * count;
+    for (unsigned int i = 0; i < count; i++) {
+      total_size +=
+        ::google::protobuf::internal::WireFormatLite::MessageSize(
+          this->customers(static_cast<int>(i)));
+    }
+  }
+
+  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
+  SetCachedSize(cached_size);
+  return total_size;
+}
+
+void rec_customer::MergeFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_merge_from_start:rec_customer)
+  GOOGLE_DCHECK_NE(&from, this);
+  const rec_customer* source =
+      ::google::protobuf::internal::DynamicCastToGenerated<const rec_customer>(
+          &from);
+  if (source == NULL) {
+  // @@protoc_insertion_point(generalized_merge_from_cast_fail:rec_customer)
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+  // @@protoc_insertion_point(generalized_merge_from_cast_success:rec_customer)
+    MergeFrom(*source);
+  }
+}
+
+void rec_customer::MergeFrom(const rec_customer& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:rec_customer)
+  GOOGLE_DCHECK_NE(&from, this);
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  customers_.MergeFrom(from.customers_);
+}
+
+void rec_customer::CopyFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_copy_from_start:rec_customer)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void rec_customer::CopyFrom(const rec_customer& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:rec_customer)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool rec_customer::IsInitialized() const {
+  return true;
+}
+
+void rec_customer::Swap(rec_customer* other) {
+  if (other == this) return;
+  InternalSwap(other);
+}
+void rec_customer::InternalSwap(rec_customer* other) {
+  using std::swap;
+  CastToBase(&customers_)->InternalSwap(CastToBase(&other->customers_));
+  _internal_metadata_.Swap(&other->_internal_metadata_);
+}
+
+::google::protobuf::Metadata rec_customer::GetMetadata() const {
+  protobuf_table_2eproto::protobuf_AssignDescriptorsOnce();
+  return ::protobuf_table_2eproto::file_level_metadata[kIndexInFileMessages];
+}
+
+
+// ===================================================================
+
+void rec_type::InitAsDefaultInstance() {
+}
+#if !defined(_MSC_VER) || _MSC_VER >= 1900
+const int rec_type::kTypesFieldNumber;
+#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
+
+rec_type::rec_type()
+  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
+  ::google::protobuf::internal::InitSCC(
+      &protobuf_table_2eproto::scc_info_rec_type.base);
+  SharedCtor();
+  // @@protoc_insertion_point(constructor:rec_type)
+}
+rec_type::rec_type(const rec_type& from)
+  : ::google::protobuf::Message(),
+      _internal_metadata_(NULL),
+      types_(from.types_) {
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  // @@protoc_insertion_point(copy_constructor:rec_type)
+}
+
+void rec_type::SharedCtor() {
+}
+
+rec_type::~rec_type() {
+  // @@protoc_insertion_point(destructor:rec_type)
+  SharedDtor();
+}
+
+void rec_type::SharedDtor() {
+}
+
+void rec_type::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+const ::google::protobuf::Descriptor* rec_type::descriptor() {
+  ::protobuf_table_2eproto::protobuf_AssignDescriptorsOnce();
+  return ::protobuf_table_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
+}
+
+const rec_type& rec_type::default_instance() {
+  ::google::protobuf::internal::InitSCC(&protobuf_table_2eproto::scc_info_rec_type.base);
+  return *internal_default_instance();
+}
+
+
+void rec_type::Clear() {
+// @@protoc_insertion_point(message_clear_start:rec_type)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  types_.Clear();
+  _internal_metadata_.Clear();
+}
+
+bool rec_type::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
+  ::google::protobuf::uint32 tag;
+  // @@protoc_insertion_point(parse_start:rec_type)
+  for (;;) {
+    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
+    tag = p.first;
+    if (!p.second) goto handle_unusual;
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // repeated .tb_type types = 1;
+      case 1: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
+                input, add_types()));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      default: {
+      handle_unusual:
+        if (tag == 0) {
+          goto success;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, _internal_metadata_.mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+success:
+  // @@protoc_insertion_point(parse_success:rec_type)
+  return true;
+failure:
+  // @@protoc_insertion_point(parse_failure:rec_type)
+  return false;
+#undef DO_
+}
+
+void rec_type::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // @@protoc_insertion_point(serialize_start:rec_type)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // repeated .tb_type types = 1;
+  for (unsigned int i = 0,
+      n = static_cast<unsigned int>(this->types_size()); i < n; i++) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      1,
+      this->types(static_cast<int>(i)),
+      output);
+  }
+
+  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
+  }
+  // @@protoc_insertion_point(serialize_end:rec_type)
+}
+
+::google::protobuf::uint8* rec_type::InternalSerializeWithCachedSizesToArray(
+    bool deterministic, ::google::protobuf::uint8* target) const {
+  (void)deterministic; // Unused
+  // @@protoc_insertion_point(serialize_to_array_start:rec_type)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // repeated .tb_type types = 1;
+  for (unsigned int i = 0,
+      n = static_cast<unsigned int>(this->types_size()); i < n; i++) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      InternalWriteMessageToArray(
+        1, this->types(static_cast<int>(i)), deterministic, target);
+  }
+
+  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:rec_type)
+  return target;
+}
+
+size_t rec_type::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:rec_type)
+  size_t total_size = 0;
+
+  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
+  }
+  // repeated .tb_type types = 1;
+  {
+    unsigned int count = static_cast<unsigned int>(this->types_size());
+    total_size += 1UL * count;
+    for (unsigned int i = 0; i < count; i++) {
+      total_size +=
+        ::google::protobuf::internal::WireFormatLite::MessageSize(
+          this->types(static_cast<int>(i)));
+    }
+  }
+
+  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
+  SetCachedSize(cached_size);
+  return total_size;
+}
+
+void rec_type::MergeFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_merge_from_start:rec_type)
+  GOOGLE_DCHECK_NE(&from, this);
+  const rec_type* source =
+      ::google::protobuf::internal::DynamicCastToGenerated<const rec_type>(
+          &from);
+  if (source == NULL) {
+  // @@protoc_insertion_point(generalized_merge_from_cast_fail:rec_type)
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+  // @@protoc_insertion_point(generalized_merge_from_cast_success:rec_type)
+    MergeFrom(*source);
+  }
+}
+
+void rec_type::MergeFrom(const rec_type& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:rec_type)
+  GOOGLE_DCHECK_NE(&from, this);
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  types_.MergeFrom(from.types_);
+}
+
+void rec_type::CopyFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_copy_from_start:rec_type)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void rec_type::CopyFrom(const rec_type& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:rec_type)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool rec_type::IsInitialized() const {
+  return true;
+}
+
+void rec_type::Swap(rec_type* other) {
+  if (other == this) return;
+  InternalSwap(other);
+}
+void rec_type::InternalSwap(rec_type* other) {
+  using std::swap;
+  CastToBase(&types_)->InternalSwap(CastToBase(&other->types_));
+  _internal_metadata_.Swap(&other->_internal_metadata_);
+}
+
+::google::protobuf::Metadata rec_type::GetMetadata() const {
+  protobuf_table_2eproto::protobuf_AssignDescriptorsOnce();
+  return ::protobuf_table_2eproto::file_level_metadata[kIndexInFileMessages];
+}
+
+
+// ===================================================================
+
+void rec_reply::InitAsDefaultInstance() {
+}
+#if !defined(_MSC_VER) || _MSC_VER >= 1900
+const int rec_reply::kReplysFieldNumber;
+#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
+
+rec_reply::rec_reply()
+  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
+  ::google::protobuf::internal::InitSCC(
+      &protobuf_table_2eproto::scc_info_rec_reply.base);
+  SharedCtor();
+  // @@protoc_insertion_point(constructor:rec_reply)
+}
+rec_reply::rec_reply(const rec_reply& from)
+  : ::google::protobuf::Message(),
+      _internal_metadata_(NULL),
+      replys_(from.replys_) {
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  // @@protoc_insertion_point(copy_constructor:rec_reply)
+}
+
+void rec_reply::SharedCtor() {
+}
+
+rec_reply::~rec_reply() {
+  // @@protoc_insertion_point(destructor:rec_reply)
+  SharedDtor();
+}
+
+void rec_reply::SharedDtor() {
+}
+
+void rec_reply::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+const ::google::protobuf::Descriptor* rec_reply::descriptor() {
+  ::protobuf_table_2eproto::protobuf_AssignDescriptorsOnce();
+  return ::protobuf_table_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
+}
+
+const rec_reply& rec_reply::default_instance() {
+  ::google::protobuf::internal::InitSCC(&protobuf_table_2eproto::scc_info_rec_reply.base);
+  return *internal_default_instance();
+}
+
+
+void rec_reply::Clear() {
+// @@protoc_insertion_point(message_clear_start:rec_reply)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  replys_.Clear();
+  _internal_metadata_.Clear();
+}
+
+bool rec_reply::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
+  ::google::protobuf::uint32 tag;
+  // @@protoc_insertion_point(parse_start:rec_reply)
+  for (;;) {
+    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
+    tag = p.first;
+    if (!p.second) goto handle_unusual;
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // repeated .tb_reply replys = 1;
+      case 1: {
+        if (static_cast< ::google::protobuf::uint8>(tag) ==
+            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
+                input, add_replys()));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      default: {
+      handle_unusual:
+        if (tag == 0) {
+          goto success;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, _internal_metadata_.mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+success:
+  // @@protoc_insertion_point(parse_success:rec_reply)
+  return true;
+failure:
+  // @@protoc_insertion_point(parse_failure:rec_reply)
+  return false;
+#undef DO_
+}
+
+void rec_reply::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // @@protoc_insertion_point(serialize_start:rec_reply)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // repeated .tb_reply replys = 1;
+  for (unsigned int i = 0,
+      n = static_cast<unsigned int>(this->replys_size()); i < n; i++) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      1,
+      this->replys(static_cast<int>(i)),
+      output);
+  }
+
+  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
+  }
+  // @@protoc_insertion_point(serialize_end:rec_reply)
+}
+
+::google::protobuf::uint8* rec_reply::InternalSerializeWithCachedSizesToArray(
+    bool deterministic, ::google::protobuf::uint8* target) const {
+  (void)deterministic; // Unused
+  // @@protoc_insertion_point(serialize_to_array_start:rec_reply)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // repeated .tb_reply replys = 1;
+  for (unsigned int i = 0,
+      n = static_cast<unsigned int>(this->replys_size()); i < n; i++) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      InternalWriteMessageToArray(
+        1, this->replys(static_cast<int>(i)), deterministic, target);
+  }
+
+  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:rec_reply)
+  return target;
+}
+
+size_t rec_reply::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:rec_reply)
+  size_t total_size = 0;
+
+  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
+  }
+  // repeated .tb_reply replys = 1;
+  {
+    unsigned int count = static_cast<unsigned int>(this->replys_size());
+    total_size += 1UL * count;
+    for (unsigned int i = 0; i < count; i++) {
+      total_size +=
+        ::google::protobuf::internal::WireFormatLite::MessageSize(
+          this->replys(static_cast<int>(i)));
+    }
+  }
+
+  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
+  SetCachedSize(cached_size);
+  return total_size;
+}
+
+void rec_reply::MergeFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_merge_from_start:rec_reply)
+  GOOGLE_DCHECK_NE(&from, this);
+  const rec_reply* source =
+      ::google::protobuf::internal::DynamicCastToGenerated<const rec_reply>(
+          &from);
+  if (source == NULL) {
+  // @@protoc_insertion_point(generalized_merge_from_cast_fail:rec_reply)
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+  // @@protoc_insertion_point(generalized_merge_from_cast_success:rec_reply)
+    MergeFrom(*source);
+  }
+}
+
+void rec_reply::MergeFrom(const rec_reply& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:rec_reply)
+  GOOGLE_DCHECK_NE(&from, this);
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  replys_.MergeFrom(from.replys_);
+}
+
+void rec_reply::CopyFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_copy_from_start:rec_reply)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void rec_reply::CopyFrom(const rec_reply& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:rec_reply)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool rec_reply::IsInitialized() const {
+  return true;
+}
+
+void rec_reply::Swap(rec_reply* other) {
+  if (other == this) return;
+  InternalSwap(other);
+}
+void rec_reply::InternalSwap(rec_reply* other) {
+  using std::swap;
+  CastToBase(&replys_)->InternalSwap(CastToBase(&other->replys_));
+  _internal_metadata_.Swap(&other->_internal_metadata_);
+}
+
+::google::protobuf::Metadata rec_reply::GetMetadata() const {
+  protobuf_table_2eproto::protobuf_AssignDescriptorsOnce();
+  return ::protobuf_table_2eproto::file_level_metadata[kIndexInFileMessages];
+}
+
+
+// ===================================================================
+
+void view::InitAsDefaultInstance() {
+}
+#if !defined(_MSC_VER) || _MSC_VER >= 1900
+#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
+
+view::view()
+  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
+  ::google::protobuf::internal::InitSCC(
+      &protobuf_table_2eproto::scc_info_view.base);
+  SharedCtor();
+  // @@protoc_insertion_point(constructor:view)
+}
+view::view(const view& from)
+  : ::google::protobuf::Message(),
+      _internal_metadata_(NULL) {
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  // @@protoc_insertion_point(copy_constructor:view)
+}
+
+void view::SharedCtor() {
+}
+
+view::~view() {
+  // @@protoc_insertion_point(destructor:view)
+  SharedDtor();
+}
+
+void view::SharedDtor() {
+}
+
+void view::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+const ::google::protobuf::Descriptor* view::descriptor() {
+  ::protobuf_table_2eproto::protobuf_AssignDescriptorsOnce();
+  return ::protobuf_table_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
+}
+
+const view& view::default_instance() {
+  ::google::protobuf::internal::InitSCC(&protobuf_table_2eproto::scc_info_view.base);
+  return *internal_default_instance();
+}
+
+
+void view::Clear() {
+// @@protoc_insertion_point(message_clear_start:view)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  _internal_metadata_.Clear();
+}
+
+bool view::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
+  ::google::protobuf::uint32 tag;
+  // @@protoc_insertion_point(parse_start:view)
+  for (;;) {
+    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
+    tag = p.first;
+    if (!p.second) goto handle_unusual;
+  handle_unusual:
+    if (tag == 0) {
+      goto success;
+    }
+    DO_(::google::protobuf::internal::WireFormat::SkipField(
+          input, tag, _internal_metadata_.mutable_unknown_fields()));
+  }
+success:
+  // @@protoc_insertion_point(parse_success:view)
+  return true;
+failure:
+  // @@protoc_insertion_point(parse_failure:view)
+  return false;
+#undef DO_
+}
+
+void view::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // @@protoc_insertion_point(serialize_start:view)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
+  }
+  // @@protoc_insertion_point(serialize_end:view)
+}
+
+::google::protobuf::uint8* view::InternalSerializeWithCachedSizesToArray(
+    bool deterministic, ::google::protobuf::uint8* target) const {
+  (void)deterministic; // Unused
+  // @@protoc_insertion_point(serialize_to_array_start:view)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:view)
+  return target;
+}
+
+size_t view::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:view)
+  size_t total_size = 0;
+
+  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
+  }
+  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
+  SetCachedSize(cached_size);
+  return total_size;
+}
+
+void view::MergeFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_merge_from_start:view)
+  GOOGLE_DCHECK_NE(&from, this);
+  const view* source =
+      ::google::protobuf::internal::DynamicCastToGenerated<const view>(
+          &from);
+  if (source == NULL) {
+  // @@protoc_insertion_point(generalized_merge_from_cast_fail:view)
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+  // @@protoc_insertion_point(generalized_merge_from_cast_success:view)
+    MergeFrom(*source);
+  }
+}
+
+void view::MergeFrom(const view& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:view)
+  GOOGLE_DCHECK_NE(&from, this);
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+}
+
+void view::CopyFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_copy_from_start:view)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void view::CopyFrom(const view& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:view)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool view::IsInitialized() const {
+  return true;
+}
+
+void view::Swap(view* other) {
+  if (other == this) return;
+  InternalSwap(other);
+}
+void view::InternalSwap(view* other) {
+  using std::swap;
+  _internal_metadata_.Swap(&other->_internal_metadata_);
+}
+
+::google::protobuf::Metadata view::GetMetadata() const {
+  protobuf_table_2eproto::protobuf_AssignDescriptorsOnce();
+  return ::protobuf_table_2eproto::file_level_metadata[kIndexInFileMessages];
+}
+
+
+// @@protoc_insertion_point(namespace_scope)
+namespace google {
+namespace protobuf {
+template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::tb_customer* Arena::CreateMaybeMessage< ::tb_customer >(Arena* arena) {
+  return Arena::CreateInternal< ::tb_customer >(arena);
+}
+template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::tb_type* Arena::CreateMaybeMessage< ::tb_type >(Arena* arena) {
+  return Arena::CreateInternal< ::tb_type >(arena);
+}
+template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::tb_reply* Arena::CreateMaybeMessage< ::tb_reply >(Arena* arena) {
+  return Arena::CreateInternal< ::tb_reply >(arena);
+}
+template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::rec_customer* Arena::CreateMaybeMessage< ::rec_customer >(Arena* arena) {
+  return Arena::CreateInternal< ::rec_customer >(arena);
+}
+template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::rec_type* Arena::CreateMaybeMessage< ::rec_type >(Arena* arena) {
+  return Arena::CreateInternal< ::rec_type >(arena);
+}
+template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::rec_reply* Arena::CreateMaybeMessage< ::rec_reply >(Arena* arena) {
+  return Arena::CreateInternal< ::rec_reply >(arena);
+}
+template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::view* Arena::CreateMaybeMessage< ::view >(Arena* arena) {
+  return Arena::CreateInternal< ::view >(arena);
+}
+}  // namespace protobuf
+}  // namespace google
+
+// @@protoc_insertion_point(global_scope)

+ 2204 - 0
source/hook/pb/table.pb.h

@@ -0,0 +1,2204 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: table.proto
+
+#ifndef PROTOBUF_INCLUDED_table_2eproto
+#define PROTOBUF_INCLUDED_table_2eproto
+
+#include <string>
+
+#include <google/protobuf/stubs/common.h>
+
+#if GOOGLE_PROTOBUF_VERSION < 3006001
+#error This file was generated by a newer version of protoc which is
+#error incompatible with your Protocol Buffer headers.  Please update
+#error your headers.
+#endif
+#if 3006001 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION
+#error This file was generated by an older version of protoc which is
+#error incompatible with your Protocol Buffer headers.  Please
+#error regenerate this file with a newer version of protoc.
+#endif
+
+#include <google/protobuf/io/coded_stream.h>
+#include <google/protobuf/arena.h>
+#include <google/protobuf/arenastring.h>
+#include <google/protobuf/generated_message_table_driven.h>
+#include <google/protobuf/generated_message_util.h>
+#include <google/protobuf/inlined_string_field.h>
+#include <google/protobuf/metadata.h>
+#include <google/protobuf/message.h>
+#include <google/protobuf/repeated_field.h>  // IWYU pragma: export
+#include <google/protobuf/extension_set.h>  // IWYU pragma: export
+#include <google/protobuf/unknown_field_set.h>
+// @@protoc_insertion_point(includes)
+#define PROTOBUF_INTERNAL_EXPORT_protobuf_table_2eproto 
+
+namespace protobuf_table_2eproto {
+// Internal implementation detail -- do not use these members.
+struct TableStruct {
+  static const ::google::protobuf::internal::ParseTableField entries[];
+  static const ::google::protobuf::internal::AuxillaryParseTableField aux[];
+  static const ::google::protobuf::internal::ParseTable schema[7];
+  static const ::google::protobuf::internal::FieldMetadata field_metadata[];
+  static const ::google::protobuf::internal::SerializationTable serialization_table[];
+  static const ::google::protobuf::uint32 offsets[];
+};
+void AddDescriptors();
+}  // namespace protobuf_table_2eproto
+class rec_customer;
+class rec_customerDefaultTypeInternal;
+extern rec_customerDefaultTypeInternal _rec_customer_default_instance_;
+class rec_reply;
+class rec_replyDefaultTypeInternal;
+extern rec_replyDefaultTypeInternal _rec_reply_default_instance_;
+class rec_type;
+class rec_typeDefaultTypeInternal;
+extern rec_typeDefaultTypeInternal _rec_type_default_instance_;
+class tb_customer;
+class tb_customerDefaultTypeInternal;
+extern tb_customerDefaultTypeInternal _tb_customer_default_instance_;
+class tb_reply;
+class tb_replyDefaultTypeInternal;
+extern tb_replyDefaultTypeInternal _tb_reply_default_instance_;
+class tb_type;
+class tb_typeDefaultTypeInternal;
+extern tb_typeDefaultTypeInternal _tb_type_default_instance_;
+class view;
+class viewDefaultTypeInternal;
+extern viewDefaultTypeInternal _view_default_instance_;
+namespace google {
+namespace protobuf {
+template<> ::rec_customer* Arena::CreateMaybeMessage<::rec_customer>(Arena*);
+template<> ::rec_reply* Arena::CreateMaybeMessage<::rec_reply>(Arena*);
+template<> ::rec_type* Arena::CreateMaybeMessage<::rec_type>(Arena*);
+template<> ::tb_customer* Arena::CreateMaybeMessage<::tb_customer>(Arena*);
+template<> ::tb_reply* Arena::CreateMaybeMessage<::tb_reply>(Arena*);
+template<> ::tb_type* Arena::CreateMaybeMessage<::tb_type>(Arena*);
+template<> ::view* Arena::CreateMaybeMessage<::view>(Arena*);
+}  // namespace protobuf
+}  // namespace google
+
+// ===================================================================
+
+class tb_customer : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:tb_customer) */ {
+ public:
+  tb_customer();
+  virtual ~tb_customer();
+
+  tb_customer(const tb_customer& from);
+
+  inline tb_customer& operator=(const tb_customer& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  #if LANG_CXX11
+  tb_customer(tb_customer&& from) noexcept
+    : tb_customer() {
+    *this = ::std::move(from);
+  }
+
+  inline tb_customer& operator=(tb_customer&& from) noexcept {
+    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
+      if (this != &from) InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+  #endif
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const tb_customer& default_instance();
+
+  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
+  static inline const tb_customer* internal_default_instance() {
+    return reinterpret_cast<const tb_customer*>(
+               &_tb_customer_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    0;
+
+  void Swap(tb_customer* other);
+  friend void swap(tb_customer& a, tb_customer& b) {
+    a.Swap(&b);
+  }
+
+  // implements Message ----------------------------------------------
+
+  inline tb_customer* New() const final {
+    return CreateMaybeMessage<tb_customer>(NULL);
+  }
+
+  tb_customer* New(::google::protobuf::Arena* arena) const final {
+    return CreateMaybeMessage<tb_customer>(arena);
+  }
+  void CopyFrom(const ::google::protobuf::Message& from) final;
+  void MergeFrom(const ::google::protobuf::Message& from) final;
+  void CopyFrom(const tb_customer& from);
+  void MergeFrom(const tb_customer& from);
+  void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input) final;
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const final;
+  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
+      bool deterministic, ::google::protobuf::uint8* target) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(tb_customer* other);
+  private:
+  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
+    return NULL;
+  }
+  inline void* MaybeArenaPtr() const {
+    return NULL;
+  }
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  // string customer_id = 1;
+  void clear_customer_id();
+  static const int kCustomerIdFieldNumber = 1;
+  const ::std::string& customer_id() const;
+  void set_customer_id(const ::std::string& value);
+  #if LANG_CXX11
+  void set_customer_id(::std::string&& value);
+  #endif
+  void set_customer_id(const char* value);
+  void set_customer_id(const char* value, size_t size);
+  ::std::string* mutable_customer_id();
+  ::std::string* release_customer_id();
+  void set_allocated_customer_id(::std::string* customer_id);
+
+  // string customer_name = 2;
+  void clear_customer_name();
+  static const int kCustomerNameFieldNumber = 2;
+  const ::std::string& customer_name() const;
+  void set_customer_name(const ::std::string& value);
+  #if LANG_CXX11
+  void set_customer_name(::std::string&& value);
+  #endif
+  void set_customer_name(const char* value);
+  void set_customer_name(const char* value, size_t size);
+  ::std::string* mutable_customer_name();
+  ::std::string* release_customer_name();
+  void set_allocated_customer_name(::std::string* customer_name);
+
+  // string customer_phone = 4;
+  void clear_customer_phone();
+  static const int kCustomerPhoneFieldNumber = 4;
+  const ::std::string& customer_phone() const;
+  void set_customer_phone(const ::std::string& value);
+  #if LANG_CXX11
+  void set_customer_phone(::std::string&& value);
+  #endif
+  void set_customer_phone(const char* value);
+  void set_customer_phone(const char* value, size_t size);
+  ::std::string* mutable_customer_phone();
+  ::std::string* release_customer_phone();
+  void set_allocated_customer_phone(::std::string* customer_phone);
+
+  // string customer_password = 5;
+  void clear_customer_password();
+  static const int kCustomerPasswordFieldNumber = 5;
+  const ::std::string& customer_password() const;
+  void set_customer_password(const ::std::string& value);
+  #if LANG_CXX11
+  void set_customer_password(::std::string&& value);
+  #endif
+  void set_customer_password(const char* value);
+  void set_customer_password(const char* value, size_t size);
+  ::std::string* mutable_customer_password();
+  ::std::string* release_customer_password();
+  void set_allocated_customer_password(::std::string* customer_password);
+
+  // string customer_old_phone = 6;
+  void clear_customer_old_phone();
+  static const int kCustomerOldPhoneFieldNumber = 6;
+  const ::std::string& customer_old_phone() const;
+  void set_customer_old_phone(const ::std::string& value);
+  #if LANG_CXX11
+  void set_customer_old_phone(::std::string&& value);
+  #endif
+  void set_customer_old_phone(const char* value);
+  void set_customer_old_phone(const char* value, size_t size);
+  ::std::string* mutable_customer_old_phone();
+  ::std::string* release_customer_old_phone();
+  void set_allocated_customer_old_phone(::std::string* customer_old_phone);
+
+  // string customer_vcode = 7;
+  void clear_customer_vcode();
+  static const int kCustomerVcodeFieldNumber = 7;
+  const ::std::string& customer_vcode() const;
+  void set_customer_vcode(const ::std::string& value);
+  #if LANG_CXX11
+  void set_customer_vcode(::std::string&& value);
+  #endif
+  void set_customer_vcode(const char* value);
+  void set_customer_vcode(const char* value, size_t size);
+  ::std::string* mutable_customer_vcode();
+  ::std::string* release_customer_vcode();
+  void set_allocated_customer_vcode(::std::string* customer_vcode);
+
+  // string customer_vcode_expiry_time = 8;
+  void clear_customer_vcode_expiry_time();
+  static const int kCustomerVcodeExpiryTimeFieldNumber = 8;
+  const ::std::string& customer_vcode_expiry_time() const;
+  void set_customer_vcode_expiry_time(const ::std::string& value);
+  #if LANG_CXX11
+  void set_customer_vcode_expiry_time(::std::string&& value);
+  #endif
+  void set_customer_vcode_expiry_time(const char* value);
+  void set_customer_vcode_expiry_time(const char* value, size_t size);
+  ::std::string* mutable_customer_vcode_expiry_time();
+  ::std::string* release_customer_vcode_expiry_time();
+  void set_allocated_customer_vcode_expiry_time(::std::string* customer_vcode_expiry_time);
+
+  // string customer_gen_time = 10;
+  void clear_customer_gen_time();
+  static const int kCustomerGenTimeFieldNumber = 10;
+  const ::std::string& customer_gen_time() const;
+  void set_customer_gen_time(const ::std::string& value);
+  #if LANG_CXX11
+  void set_customer_gen_time(::std::string&& value);
+  #endif
+  void set_customer_gen_time(const char* value);
+  void set_customer_gen_time(const char* value, size_t size);
+  ::std::string* mutable_customer_gen_time();
+  ::std::string* release_customer_gen_time();
+  void set_allocated_customer_gen_time(::std::string* customer_gen_time);
+
+  // bool customer_gender = 3;
+  void clear_customer_gender();
+  static const int kCustomerGenderFieldNumber = 3;
+  bool customer_gender() const;
+  void set_customer_gender(bool value);
+
+  // bool customer_enable = 9;
+  void clear_customer_enable();
+  static const int kCustomerEnableFieldNumber = 9;
+  bool customer_enable() const;
+  void set_customer_enable(bool value);
+
+  // @@protoc_insertion_point(class_scope:tb_customer)
+ private:
+
+  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
+  ::google::protobuf::internal::ArenaStringPtr customer_id_;
+  ::google::protobuf::internal::ArenaStringPtr customer_name_;
+  ::google::protobuf::internal::ArenaStringPtr customer_phone_;
+  ::google::protobuf::internal::ArenaStringPtr customer_password_;
+  ::google::protobuf::internal::ArenaStringPtr customer_old_phone_;
+  ::google::protobuf::internal::ArenaStringPtr customer_vcode_;
+  ::google::protobuf::internal::ArenaStringPtr customer_vcode_expiry_time_;
+  ::google::protobuf::internal::ArenaStringPtr customer_gen_time_;
+  bool customer_gender_;
+  bool customer_enable_;
+  mutable ::google::protobuf::internal::CachedSize _cached_size_;
+  friend struct ::protobuf_table_2eproto::TableStruct;
+};
+// -------------------------------------------------------------------
+
+class tb_type : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:tb_type) */ {
+ public:
+  tb_type();
+  virtual ~tb_type();
+
+  tb_type(const tb_type& from);
+
+  inline tb_type& operator=(const tb_type& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  #if LANG_CXX11
+  tb_type(tb_type&& from) noexcept
+    : tb_type() {
+    *this = ::std::move(from);
+  }
+
+  inline tb_type& operator=(tb_type&& from) noexcept {
+    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
+      if (this != &from) InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+  #endif
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const tb_type& default_instance();
+
+  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
+  static inline const tb_type* internal_default_instance() {
+    return reinterpret_cast<const tb_type*>(
+               &_tb_type_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    1;
+
+  void Swap(tb_type* other);
+  friend void swap(tb_type& a, tb_type& b) {
+    a.Swap(&b);
+  }
+
+  // implements Message ----------------------------------------------
+
+  inline tb_type* New() const final {
+    return CreateMaybeMessage<tb_type>(NULL);
+  }
+
+  tb_type* New(::google::protobuf::Arena* arena) const final {
+    return CreateMaybeMessage<tb_type>(arena);
+  }
+  void CopyFrom(const ::google::protobuf::Message& from) final;
+  void MergeFrom(const ::google::protobuf::Message& from) final;
+  void CopyFrom(const tb_type& from);
+  void MergeFrom(const tb_type& from);
+  void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input) final;
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const final;
+  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
+      bool deterministic, ::google::protobuf::uint8* target) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(tb_type* other);
+  private:
+  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
+    return NULL;
+  }
+  inline void* MaybeArenaPtr() const {
+    return NULL;
+  }
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  // string customer_id = 1;
+  void clear_customer_id();
+  static const int kCustomerIdFieldNumber = 1;
+  const ::std::string& customer_id() const;
+  void set_customer_id(const ::std::string& value);
+  #if LANG_CXX11
+  void set_customer_id(::std::string&& value);
+  #endif
+  void set_customer_id(const char* value);
+  void set_customer_id(const char* value, size_t size);
+  ::std::string* mutable_customer_id();
+  ::std::string* release_customer_id();
+  void set_allocated_customer_id(::std::string* customer_id);
+
+  // string type_id = 2;
+  void clear_type_id();
+  static const int kTypeIdFieldNumber = 2;
+  const ::std::string& type_id() const;
+  void set_type_id(const ::std::string& value);
+  #if LANG_CXX11
+  void set_type_id(::std::string&& value);
+  #endif
+  void set_type_id(const char* value);
+  void set_type_id(const char* value, size_t size);
+  ::std::string* mutable_type_id();
+  ::std::string* release_type_id();
+  void set_allocated_type_id(::std::string* type_id);
+
+  // string type_name = 3;
+  void clear_type_name();
+  static const int kTypeNameFieldNumber = 3;
+  const ::std::string& type_name() const;
+  void set_type_name(const ::std::string& value);
+  #if LANG_CXX11
+  void set_type_name(::std::string&& value);
+  #endif
+  void set_type_name(const char* value);
+  void set_type_name(const char* value, size_t size);
+  ::std::string* mutable_type_name();
+  ::std::string* release_type_name();
+  void set_allocated_type_name(::std::string* type_name);
+
+  // string type_gen_time = 4;
+  void clear_type_gen_time();
+  static const int kTypeGenTimeFieldNumber = 4;
+  const ::std::string& type_gen_time() const;
+  void set_type_gen_time(const ::std::string& value);
+  #if LANG_CXX11
+  void set_type_gen_time(::std::string&& value);
+  #endif
+  void set_type_gen_time(const char* value);
+  void set_type_gen_time(const char* value, size_t size);
+  ::std::string* mutable_type_gen_time();
+  ::std::string* release_type_gen_time();
+  void set_allocated_type_gen_time(::std::string* type_gen_time);
+
+  // @@protoc_insertion_point(class_scope:tb_type)
+ private:
+
+  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
+  ::google::protobuf::internal::ArenaStringPtr customer_id_;
+  ::google::protobuf::internal::ArenaStringPtr type_id_;
+  ::google::protobuf::internal::ArenaStringPtr type_name_;
+  ::google::protobuf::internal::ArenaStringPtr type_gen_time_;
+  mutable ::google::protobuf::internal::CachedSize _cached_size_;
+  friend struct ::protobuf_table_2eproto::TableStruct;
+};
+// -------------------------------------------------------------------
+
+class tb_reply : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:tb_reply) */ {
+ public:
+  tb_reply();
+  virtual ~tb_reply();
+
+  tb_reply(const tb_reply& from);
+
+  inline tb_reply& operator=(const tb_reply& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  #if LANG_CXX11
+  tb_reply(tb_reply&& from) noexcept
+    : tb_reply() {
+    *this = ::std::move(from);
+  }
+
+  inline tb_reply& operator=(tb_reply&& from) noexcept {
+    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
+      if (this != &from) InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+  #endif
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const tb_reply& default_instance();
+
+  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
+  static inline const tb_reply* internal_default_instance() {
+    return reinterpret_cast<const tb_reply*>(
+               &_tb_reply_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    2;
+
+  void Swap(tb_reply* other);
+  friend void swap(tb_reply& a, tb_reply& b) {
+    a.Swap(&b);
+  }
+
+  // implements Message ----------------------------------------------
+
+  inline tb_reply* New() const final {
+    return CreateMaybeMessage<tb_reply>(NULL);
+  }
+
+  tb_reply* New(::google::protobuf::Arena* arena) const final {
+    return CreateMaybeMessage<tb_reply>(arena);
+  }
+  void CopyFrom(const ::google::protobuf::Message& from) final;
+  void MergeFrom(const ::google::protobuf::Message& from) final;
+  void CopyFrom(const tb_reply& from);
+  void MergeFrom(const tb_reply& from);
+  void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input) final;
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const final;
+  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
+      bool deterministic, ::google::protobuf::uint8* target) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(tb_reply* other);
+  private:
+  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
+    return NULL;
+  }
+  inline void* MaybeArenaPtr() const {
+    return NULL;
+  }
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  // string customer_id = 1;
+  void clear_customer_id();
+  static const int kCustomerIdFieldNumber = 1;
+  const ::std::string& customer_id() const;
+  void set_customer_id(const ::std::string& value);
+  #if LANG_CXX11
+  void set_customer_id(::std::string&& value);
+  #endif
+  void set_customer_id(const char* value);
+  void set_customer_id(const char* value, size_t size);
+  ::std::string* mutable_customer_id();
+  ::std::string* release_customer_id();
+  void set_allocated_customer_id(::std::string* customer_id);
+
+  // string type_id = 2;
+  void clear_type_id();
+  static const int kTypeIdFieldNumber = 2;
+  const ::std::string& type_id() const;
+  void set_type_id(const ::std::string& value);
+  #if LANG_CXX11
+  void set_type_id(::std::string&& value);
+  #endif
+  void set_type_id(const char* value);
+  void set_type_id(const char* value, size_t size);
+  ::std::string* mutable_type_id();
+  ::std::string* release_type_id();
+  void set_allocated_type_id(::std::string* type_id);
+
+  // string reply_id = 3;
+  void clear_reply_id();
+  static const int kReplyIdFieldNumber = 3;
+  const ::std::string& reply_id() const;
+  void set_reply_id(const ::std::string& value);
+  #if LANG_CXX11
+  void set_reply_id(::std::string&& value);
+  #endif
+  void set_reply_id(const char* value);
+  void set_reply_id(const char* value, size_t size);
+  ::std::string* mutable_reply_id();
+  ::std::string* release_reply_id();
+  void set_allocated_reply_id(::std::string* reply_id);
+
+  // string reply_name = 4;
+  void clear_reply_name();
+  static const int kReplyNameFieldNumber = 4;
+  const ::std::string& reply_name() const;
+  void set_reply_name(const ::std::string& value);
+  #if LANG_CXX11
+  void set_reply_name(::std::string&& value);
+  #endif
+  void set_reply_name(const char* value);
+  void set_reply_name(const char* value, size_t size);
+  ::std::string* mutable_reply_name();
+  ::std::string* release_reply_name();
+  void set_allocated_reply_name(::std::string* reply_name);
+
+  // string reply_content = 5;
+  void clear_reply_content();
+  static const int kReplyContentFieldNumber = 5;
+  const ::std::string& reply_content() const;
+  void set_reply_content(const ::std::string& value);
+  #if LANG_CXX11
+  void set_reply_content(::std::string&& value);
+  #endif
+  void set_reply_content(const char* value);
+  void set_reply_content(const char* value, size_t size);
+  ::std::string* mutable_reply_content();
+  ::std::string* release_reply_content();
+  void set_allocated_reply_content(::std::string* reply_content);
+
+  // string reply_gen_time = 6;
+  void clear_reply_gen_time();
+  static const int kReplyGenTimeFieldNumber = 6;
+  const ::std::string& reply_gen_time() const;
+  void set_reply_gen_time(const ::std::string& value);
+  #if LANG_CXX11
+  void set_reply_gen_time(::std::string&& value);
+  #endif
+  void set_reply_gen_time(const char* value);
+  void set_reply_gen_time(const char* value, size_t size);
+  ::std::string* mutable_reply_gen_time();
+  ::std::string* release_reply_gen_time();
+  void set_allocated_reply_gen_time(::std::string* reply_gen_time);
+
+  // @@protoc_insertion_point(class_scope:tb_reply)
+ private:
+
+  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
+  ::google::protobuf::internal::ArenaStringPtr customer_id_;
+  ::google::protobuf::internal::ArenaStringPtr type_id_;
+  ::google::protobuf::internal::ArenaStringPtr reply_id_;
+  ::google::protobuf::internal::ArenaStringPtr reply_name_;
+  ::google::protobuf::internal::ArenaStringPtr reply_content_;
+  ::google::protobuf::internal::ArenaStringPtr reply_gen_time_;
+  mutable ::google::protobuf::internal::CachedSize _cached_size_;
+  friend struct ::protobuf_table_2eproto::TableStruct;
+};
+// -------------------------------------------------------------------
+
+class rec_customer : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:rec_customer) */ {
+ public:
+  rec_customer();
+  virtual ~rec_customer();
+
+  rec_customer(const rec_customer& from);
+
+  inline rec_customer& operator=(const rec_customer& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  #if LANG_CXX11
+  rec_customer(rec_customer&& from) noexcept
+    : rec_customer() {
+    *this = ::std::move(from);
+  }
+
+  inline rec_customer& operator=(rec_customer&& from) noexcept {
+    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
+      if (this != &from) InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+  #endif
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const rec_customer& default_instance();
+
+  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
+  static inline const rec_customer* internal_default_instance() {
+    return reinterpret_cast<const rec_customer*>(
+               &_rec_customer_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    3;
+
+  void Swap(rec_customer* other);
+  friend void swap(rec_customer& a, rec_customer& b) {
+    a.Swap(&b);
+  }
+
+  // implements Message ----------------------------------------------
+
+  inline rec_customer* New() const final {
+    return CreateMaybeMessage<rec_customer>(NULL);
+  }
+
+  rec_customer* New(::google::protobuf::Arena* arena) const final {
+    return CreateMaybeMessage<rec_customer>(arena);
+  }
+  void CopyFrom(const ::google::protobuf::Message& from) final;
+  void MergeFrom(const ::google::protobuf::Message& from) final;
+  void CopyFrom(const rec_customer& from);
+  void MergeFrom(const rec_customer& from);
+  void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input) final;
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const final;
+  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
+      bool deterministic, ::google::protobuf::uint8* target) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(rec_customer* other);
+  private:
+  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
+    return NULL;
+  }
+  inline void* MaybeArenaPtr() const {
+    return NULL;
+  }
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  // repeated .tb_customer customers = 1;
+  int customers_size() const;
+  void clear_customers();
+  static const int kCustomersFieldNumber = 1;
+  ::tb_customer* mutable_customers(int index);
+  ::google::protobuf::RepeatedPtrField< ::tb_customer >*
+      mutable_customers();
+  const ::tb_customer& customers(int index) const;
+  ::tb_customer* add_customers();
+  const ::google::protobuf::RepeatedPtrField< ::tb_customer >&
+      customers() const;
+
+  // @@protoc_insertion_point(class_scope:rec_customer)
+ private:
+
+  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
+  ::google::protobuf::RepeatedPtrField< ::tb_customer > customers_;
+  mutable ::google::protobuf::internal::CachedSize _cached_size_;
+  friend struct ::protobuf_table_2eproto::TableStruct;
+};
+// -------------------------------------------------------------------
+
+class rec_type : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:rec_type) */ {
+ public:
+  rec_type();
+  virtual ~rec_type();
+
+  rec_type(const rec_type& from);
+
+  inline rec_type& operator=(const rec_type& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  #if LANG_CXX11
+  rec_type(rec_type&& from) noexcept
+    : rec_type() {
+    *this = ::std::move(from);
+  }
+
+  inline rec_type& operator=(rec_type&& from) noexcept {
+    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
+      if (this != &from) InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+  #endif
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const rec_type& default_instance();
+
+  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
+  static inline const rec_type* internal_default_instance() {
+    return reinterpret_cast<const rec_type*>(
+               &_rec_type_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    4;
+
+  void Swap(rec_type* other);
+  friend void swap(rec_type& a, rec_type& b) {
+    a.Swap(&b);
+  }
+
+  // implements Message ----------------------------------------------
+
+  inline rec_type* New() const final {
+    return CreateMaybeMessage<rec_type>(NULL);
+  }
+
+  rec_type* New(::google::protobuf::Arena* arena) const final {
+    return CreateMaybeMessage<rec_type>(arena);
+  }
+  void CopyFrom(const ::google::protobuf::Message& from) final;
+  void MergeFrom(const ::google::protobuf::Message& from) final;
+  void CopyFrom(const rec_type& from);
+  void MergeFrom(const rec_type& from);
+  void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input) final;
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const final;
+  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
+      bool deterministic, ::google::protobuf::uint8* target) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(rec_type* other);
+  private:
+  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
+    return NULL;
+  }
+  inline void* MaybeArenaPtr() const {
+    return NULL;
+  }
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  // repeated .tb_type types = 1;
+  int types_size() const;
+  void clear_types();
+  static const int kTypesFieldNumber = 1;
+  ::tb_type* mutable_types(int index);
+  ::google::protobuf::RepeatedPtrField< ::tb_type >*
+      mutable_types();
+  const ::tb_type& types(int index) const;
+  ::tb_type* add_types();
+  const ::google::protobuf::RepeatedPtrField< ::tb_type >&
+      types() const;
+
+  // @@protoc_insertion_point(class_scope:rec_type)
+ private:
+
+  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
+  ::google::protobuf::RepeatedPtrField< ::tb_type > types_;
+  mutable ::google::protobuf::internal::CachedSize _cached_size_;
+  friend struct ::protobuf_table_2eproto::TableStruct;
+};
+// -------------------------------------------------------------------
+
+class rec_reply : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:rec_reply) */ {
+ public:
+  rec_reply();
+  virtual ~rec_reply();
+
+  rec_reply(const rec_reply& from);
+
+  inline rec_reply& operator=(const rec_reply& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  #if LANG_CXX11
+  rec_reply(rec_reply&& from) noexcept
+    : rec_reply() {
+    *this = ::std::move(from);
+  }
+
+  inline rec_reply& operator=(rec_reply&& from) noexcept {
+    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
+      if (this != &from) InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+  #endif
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const rec_reply& default_instance();
+
+  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
+  static inline const rec_reply* internal_default_instance() {
+    return reinterpret_cast<const rec_reply*>(
+               &_rec_reply_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    5;
+
+  void Swap(rec_reply* other);
+  friend void swap(rec_reply& a, rec_reply& b) {
+    a.Swap(&b);
+  }
+
+  // implements Message ----------------------------------------------
+
+  inline rec_reply* New() const final {
+    return CreateMaybeMessage<rec_reply>(NULL);
+  }
+
+  rec_reply* New(::google::protobuf::Arena* arena) const final {
+    return CreateMaybeMessage<rec_reply>(arena);
+  }
+  void CopyFrom(const ::google::protobuf::Message& from) final;
+  void MergeFrom(const ::google::protobuf::Message& from) final;
+  void CopyFrom(const rec_reply& from);
+  void MergeFrom(const rec_reply& from);
+  void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input) final;
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const final;
+  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
+      bool deterministic, ::google::protobuf::uint8* target) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(rec_reply* other);
+  private:
+  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
+    return NULL;
+  }
+  inline void* MaybeArenaPtr() const {
+    return NULL;
+  }
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  // repeated .tb_reply replys = 1;
+  int replys_size() const;
+  void clear_replys();
+  static const int kReplysFieldNumber = 1;
+  ::tb_reply* mutable_replys(int index);
+  ::google::protobuf::RepeatedPtrField< ::tb_reply >*
+      mutable_replys();
+  const ::tb_reply& replys(int index) const;
+  ::tb_reply* add_replys();
+  const ::google::protobuf::RepeatedPtrField< ::tb_reply >&
+      replys() const;
+
+  // @@protoc_insertion_point(class_scope:rec_reply)
+ private:
+
+  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
+  ::google::protobuf::RepeatedPtrField< ::tb_reply > replys_;
+  mutable ::google::protobuf::internal::CachedSize _cached_size_;
+  friend struct ::protobuf_table_2eproto::TableStruct;
+};
+// -------------------------------------------------------------------
+
+class view : public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:view) */ {
+ public:
+  view();
+  virtual ~view();
+
+  view(const view& from);
+
+  inline view& operator=(const view& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  #if LANG_CXX11
+  view(view&& from) noexcept
+    : view() {
+    *this = ::std::move(from);
+  }
+
+  inline view& operator=(view&& from) noexcept {
+    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
+      if (this != &from) InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+  #endif
+  static const ::google::protobuf::Descriptor* descriptor();
+  static const view& default_instance();
+
+  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
+  static inline const view* internal_default_instance() {
+    return reinterpret_cast<const view*>(
+               &_view_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    6;
+
+  void Swap(view* other);
+  friend void swap(view& a, view& b) {
+    a.Swap(&b);
+  }
+
+  // implements Message ----------------------------------------------
+
+  inline view* New() const final {
+    return CreateMaybeMessage<view>(NULL);
+  }
+
+  view* New(::google::protobuf::Arena* arena) const final {
+    return CreateMaybeMessage<view>(arena);
+  }
+  void CopyFrom(const ::google::protobuf::Message& from) final;
+  void MergeFrom(const ::google::protobuf::Message& from) final;
+  void CopyFrom(const view& from);
+  void MergeFrom(const view& from);
+  void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input) final;
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const final;
+  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
+      bool deterministic, ::google::protobuf::uint8* target) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(view* other);
+  private:
+  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
+    return NULL;
+  }
+  inline void* MaybeArenaPtr() const {
+    return NULL;
+  }
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  // @@protoc_insertion_point(class_scope:view)
+ private:
+
+  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
+  mutable ::google::protobuf::internal::CachedSize _cached_size_;
+  friend struct ::protobuf_table_2eproto::TableStruct;
+};
+// ===================================================================
+
+
+// ===================================================================
+
+#ifdef __GNUC__
+  #pragma GCC diagnostic push
+  #pragma GCC diagnostic ignored "-Wstrict-aliasing"
+#endif  // __GNUC__
+// tb_customer
+
+// string customer_id = 1;
+inline void tb_customer::clear_customer_id() {
+  customer_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline const ::std::string& tb_customer::customer_id() const {
+  // @@protoc_insertion_point(field_get:tb_customer.customer_id)
+  return customer_id_.GetNoArena();
+}
+inline void tb_customer::set_customer_id(const ::std::string& value) {
+  
+  customer_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:tb_customer.customer_id)
+}
+#if LANG_CXX11
+inline void tb_customer::set_customer_id(::std::string&& value) {
+  
+  customer_id_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:tb_customer.customer_id)
+}
+#endif
+inline void tb_customer::set_customer_id(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  
+  customer_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:tb_customer.customer_id)
+}
+inline void tb_customer::set_customer_id(const char* value, size_t size) {
+  
+  customer_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:tb_customer.customer_id)
+}
+inline ::std::string* tb_customer::mutable_customer_id() {
+  
+  // @@protoc_insertion_point(field_mutable:tb_customer.customer_id)
+  return customer_id_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* tb_customer::release_customer_id() {
+  // @@protoc_insertion_point(field_release:tb_customer.customer_id)
+  
+  return customer_id_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void tb_customer::set_allocated_customer_id(::std::string* customer_id) {
+  if (customer_id != NULL) {
+    
+  } else {
+    
+  }
+  customer_id_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), customer_id);
+  // @@protoc_insertion_point(field_set_allocated:tb_customer.customer_id)
+}
+
+// string customer_name = 2;
+inline void tb_customer::clear_customer_name() {
+  customer_name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline const ::std::string& tb_customer::customer_name() const {
+  // @@protoc_insertion_point(field_get:tb_customer.customer_name)
+  return customer_name_.GetNoArena();
+}
+inline void tb_customer::set_customer_name(const ::std::string& value) {
+  
+  customer_name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:tb_customer.customer_name)
+}
+#if LANG_CXX11
+inline void tb_customer::set_customer_name(::std::string&& value) {
+  
+  customer_name_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:tb_customer.customer_name)
+}
+#endif
+inline void tb_customer::set_customer_name(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  
+  customer_name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:tb_customer.customer_name)
+}
+inline void tb_customer::set_customer_name(const char* value, size_t size) {
+  
+  customer_name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:tb_customer.customer_name)
+}
+inline ::std::string* tb_customer::mutable_customer_name() {
+  
+  // @@protoc_insertion_point(field_mutable:tb_customer.customer_name)
+  return customer_name_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* tb_customer::release_customer_name() {
+  // @@protoc_insertion_point(field_release:tb_customer.customer_name)
+  
+  return customer_name_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void tb_customer::set_allocated_customer_name(::std::string* customer_name) {
+  if (customer_name != NULL) {
+    
+  } else {
+    
+  }
+  customer_name_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), customer_name);
+  // @@protoc_insertion_point(field_set_allocated:tb_customer.customer_name)
+}
+
+// bool customer_gender = 3;
+inline void tb_customer::clear_customer_gender() {
+  customer_gender_ = false;
+}
+inline bool tb_customer::customer_gender() const {
+  // @@protoc_insertion_point(field_get:tb_customer.customer_gender)
+  return customer_gender_;
+}
+inline void tb_customer::set_customer_gender(bool value) {
+  
+  customer_gender_ = value;
+  // @@protoc_insertion_point(field_set:tb_customer.customer_gender)
+}
+
+// string customer_phone = 4;
+inline void tb_customer::clear_customer_phone() {
+  customer_phone_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline const ::std::string& tb_customer::customer_phone() const {
+  // @@protoc_insertion_point(field_get:tb_customer.customer_phone)
+  return customer_phone_.GetNoArena();
+}
+inline void tb_customer::set_customer_phone(const ::std::string& value) {
+  
+  customer_phone_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:tb_customer.customer_phone)
+}
+#if LANG_CXX11
+inline void tb_customer::set_customer_phone(::std::string&& value) {
+  
+  customer_phone_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:tb_customer.customer_phone)
+}
+#endif
+inline void tb_customer::set_customer_phone(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  
+  customer_phone_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:tb_customer.customer_phone)
+}
+inline void tb_customer::set_customer_phone(const char* value, size_t size) {
+  
+  customer_phone_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:tb_customer.customer_phone)
+}
+inline ::std::string* tb_customer::mutable_customer_phone() {
+  
+  // @@protoc_insertion_point(field_mutable:tb_customer.customer_phone)
+  return customer_phone_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* tb_customer::release_customer_phone() {
+  // @@protoc_insertion_point(field_release:tb_customer.customer_phone)
+  
+  return customer_phone_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void tb_customer::set_allocated_customer_phone(::std::string* customer_phone) {
+  if (customer_phone != NULL) {
+    
+  } else {
+    
+  }
+  customer_phone_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), customer_phone);
+  // @@protoc_insertion_point(field_set_allocated:tb_customer.customer_phone)
+}
+
+// string customer_password = 5;
+inline void tb_customer::clear_customer_password() {
+  customer_password_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline const ::std::string& tb_customer::customer_password() const {
+  // @@protoc_insertion_point(field_get:tb_customer.customer_password)
+  return customer_password_.GetNoArena();
+}
+inline void tb_customer::set_customer_password(const ::std::string& value) {
+  
+  customer_password_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:tb_customer.customer_password)
+}
+#if LANG_CXX11
+inline void tb_customer::set_customer_password(::std::string&& value) {
+  
+  customer_password_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:tb_customer.customer_password)
+}
+#endif
+inline void tb_customer::set_customer_password(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  
+  customer_password_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:tb_customer.customer_password)
+}
+inline void tb_customer::set_customer_password(const char* value, size_t size) {
+  
+  customer_password_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:tb_customer.customer_password)
+}
+inline ::std::string* tb_customer::mutable_customer_password() {
+  
+  // @@protoc_insertion_point(field_mutable:tb_customer.customer_password)
+  return customer_password_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* tb_customer::release_customer_password() {
+  // @@protoc_insertion_point(field_release:tb_customer.customer_password)
+  
+  return customer_password_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void tb_customer::set_allocated_customer_password(::std::string* customer_password) {
+  if (customer_password != NULL) {
+    
+  } else {
+    
+  }
+  customer_password_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), customer_password);
+  // @@protoc_insertion_point(field_set_allocated:tb_customer.customer_password)
+}
+
+// string customer_old_phone = 6;
+inline void tb_customer::clear_customer_old_phone() {
+  customer_old_phone_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline const ::std::string& tb_customer::customer_old_phone() const {
+  // @@protoc_insertion_point(field_get:tb_customer.customer_old_phone)
+  return customer_old_phone_.GetNoArena();
+}
+inline void tb_customer::set_customer_old_phone(const ::std::string& value) {
+  
+  customer_old_phone_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:tb_customer.customer_old_phone)
+}
+#if LANG_CXX11
+inline void tb_customer::set_customer_old_phone(::std::string&& value) {
+  
+  customer_old_phone_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:tb_customer.customer_old_phone)
+}
+#endif
+inline void tb_customer::set_customer_old_phone(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  
+  customer_old_phone_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:tb_customer.customer_old_phone)
+}
+inline void tb_customer::set_customer_old_phone(const char* value, size_t size) {
+  
+  customer_old_phone_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:tb_customer.customer_old_phone)
+}
+inline ::std::string* tb_customer::mutable_customer_old_phone() {
+  
+  // @@protoc_insertion_point(field_mutable:tb_customer.customer_old_phone)
+  return customer_old_phone_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* tb_customer::release_customer_old_phone() {
+  // @@protoc_insertion_point(field_release:tb_customer.customer_old_phone)
+  
+  return customer_old_phone_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void tb_customer::set_allocated_customer_old_phone(::std::string* customer_old_phone) {
+  if (customer_old_phone != NULL) {
+    
+  } else {
+    
+  }
+  customer_old_phone_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), customer_old_phone);
+  // @@protoc_insertion_point(field_set_allocated:tb_customer.customer_old_phone)
+}
+
+// string customer_vcode = 7;
+inline void tb_customer::clear_customer_vcode() {
+  customer_vcode_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline const ::std::string& tb_customer::customer_vcode() const {
+  // @@protoc_insertion_point(field_get:tb_customer.customer_vcode)
+  return customer_vcode_.GetNoArena();
+}
+inline void tb_customer::set_customer_vcode(const ::std::string& value) {
+  
+  customer_vcode_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:tb_customer.customer_vcode)
+}
+#if LANG_CXX11
+inline void tb_customer::set_customer_vcode(::std::string&& value) {
+  
+  customer_vcode_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:tb_customer.customer_vcode)
+}
+#endif
+inline void tb_customer::set_customer_vcode(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  
+  customer_vcode_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:tb_customer.customer_vcode)
+}
+inline void tb_customer::set_customer_vcode(const char* value, size_t size) {
+  
+  customer_vcode_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:tb_customer.customer_vcode)
+}
+inline ::std::string* tb_customer::mutable_customer_vcode() {
+  
+  // @@protoc_insertion_point(field_mutable:tb_customer.customer_vcode)
+  return customer_vcode_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* tb_customer::release_customer_vcode() {
+  // @@protoc_insertion_point(field_release:tb_customer.customer_vcode)
+  
+  return customer_vcode_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void tb_customer::set_allocated_customer_vcode(::std::string* customer_vcode) {
+  if (customer_vcode != NULL) {
+    
+  } else {
+    
+  }
+  customer_vcode_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), customer_vcode);
+  // @@protoc_insertion_point(field_set_allocated:tb_customer.customer_vcode)
+}
+
+// string customer_vcode_expiry_time = 8;
+inline void tb_customer::clear_customer_vcode_expiry_time() {
+  customer_vcode_expiry_time_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline const ::std::string& tb_customer::customer_vcode_expiry_time() const {
+  // @@protoc_insertion_point(field_get:tb_customer.customer_vcode_expiry_time)
+  return customer_vcode_expiry_time_.GetNoArena();
+}
+inline void tb_customer::set_customer_vcode_expiry_time(const ::std::string& value) {
+  
+  customer_vcode_expiry_time_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:tb_customer.customer_vcode_expiry_time)
+}
+#if LANG_CXX11
+inline void tb_customer::set_customer_vcode_expiry_time(::std::string&& value) {
+  
+  customer_vcode_expiry_time_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:tb_customer.customer_vcode_expiry_time)
+}
+#endif
+inline void tb_customer::set_customer_vcode_expiry_time(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  
+  customer_vcode_expiry_time_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:tb_customer.customer_vcode_expiry_time)
+}
+inline void tb_customer::set_customer_vcode_expiry_time(const char* value, size_t size) {
+  
+  customer_vcode_expiry_time_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:tb_customer.customer_vcode_expiry_time)
+}
+inline ::std::string* tb_customer::mutable_customer_vcode_expiry_time() {
+  
+  // @@protoc_insertion_point(field_mutable:tb_customer.customer_vcode_expiry_time)
+  return customer_vcode_expiry_time_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* tb_customer::release_customer_vcode_expiry_time() {
+  // @@protoc_insertion_point(field_release:tb_customer.customer_vcode_expiry_time)
+  
+  return customer_vcode_expiry_time_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void tb_customer::set_allocated_customer_vcode_expiry_time(::std::string* customer_vcode_expiry_time) {
+  if (customer_vcode_expiry_time != NULL) {
+    
+  } else {
+    
+  }
+  customer_vcode_expiry_time_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), customer_vcode_expiry_time);
+  // @@protoc_insertion_point(field_set_allocated:tb_customer.customer_vcode_expiry_time)
+}
+
+// bool customer_enable = 9;
+inline void tb_customer::clear_customer_enable() {
+  customer_enable_ = false;
+}
+inline bool tb_customer::customer_enable() const {
+  // @@protoc_insertion_point(field_get:tb_customer.customer_enable)
+  return customer_enable_;
+}
+inline void tb_customer::set_customer_enable(bool value) {
+  
+  customer_enable_ = value;
+  // @@protoc_insertion_point(field_set:tb_customer.customer_enable)
+}
+
+// string customer_gen_time = 10;
+inline void tb_customer::clear_customer_gen_time() {
+  customer_gen_time_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline const ::std::string& tb_customer::customer_gen_time() const {
+  // @@protoc_insertion_point(field_get:tb_customer.customer_gen_time)
+  return customer_gen_time_.GetNoArena();
+}
+inline void tb_customer::set_customer_gen_time(const ::std::string& value) {
+  
+  customer_gen_time_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:tb_customer.customer_gen_time)
+}
+#if LANG_CXX11
+inline void tb_customer::set_customer_gen_time(::std::string&& value) {
+  
+  customer_gen_time_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:tb_customer.customer_gen_time)
+}
+#endif
+inline void tb_customer::set_customer_gen_time(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  
+  customer_gen_time_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:tb_customer.customer_gen_time)
+}
+inline void tb_customer::set_customer_gen_time(const char* value, size_t size) {
+  
+  customer_gen_time_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:tb_customer.customer_gen_time)
+}
+inline ::std::string* tb_customer::mutable_customer_gen_time() {
+  
+  // @@protoc_insertion_point(field_mutable:tb_customer.customer_gen_time)
+  return customer_gen_time_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* tb_customer::release_customer_gen_time() {
+  // @@protoc_insertion_point(field_release:tb_customer.customer_gen_time)
+  
+  return customer_gen_time_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void tb_customer::set_allocated_customer_gen_time(::std::string* customer_gen_time) {
+  if (customer_gen_time != NULL) {
+    
+  } else {
+    
+  }
+  customer_gen_time_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), customer_gen_time);
+  // @@protoc_insertion_point(field_set_allocated:tb_customer.customer_gen_time)
+}
+
+// -------------------------------------------------------------------
+
+// tb_type
+
+// string customer_id = 1;
+inline void tb_type::clear_customer_id() {
+  customer_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline const ::std::string& tb_type::customer_id() const {
+  // @@protoc_insertion_point(field_get:tb_type.customer_id)
+  return customer_id_.GetNoArena();
+}
+inline void tb_type::set_customer_id(const ::std::string& value) {
+  
+  customer_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:tb_type.customer_id)
+}
+#if LANG_CXX11
+inline void tb_type::set_customer_id(::std::string&& value) {
+  
+  customer_id_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:tb_type.customer_id)
+}
+#endif
+inline void tb_type::set_customer_id(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  
+  customer_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:tb_type.customer_id)
+}
+inline void tb_type::set_customer_id(const char* value, size_t size) {
+  
+  customer_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:tb_type.customer_id)
+}
+inline ::std::string* tb_type::mutable_customer_id() {
+  
+  // @@protoc_insertion_point(field_mutable:tb_type.customer_id)
+  return customer_id_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* tb_type::release_customer_id() {
+  // @@protoc_insertion_point(field_release:tb_type.customer_id)
+  
+  return customer_id_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void tb_type::set_allocated_customer_id(::std::string* customer_id) {
+  if (customer_id != NULL) {
+    
+  } else {
+    
+  }
+  customer_id_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), customer_id);
+  // @@protoc_insertion_point(field_set_allocated:tb_type.customer_id)
+}
+
+// string type_id = 2;
+inline void tb_type::clear_type_id() {
+  type_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline const ::std::string& tb_type::type_id() const {
+  // @@protoc_insertion_point(field_get:tb_type.type_id)
+  return type_id_.GetNoArena();
+}
+inline void tb_type::set_type_id(const ::std::string& value) {
+  
+  type_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:tb_type.type_id)
+}
+#if LANG_CXX11
+inline void tb_type::set_type_id(::std::string&& value) {
+  
+  type_id_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:tb_type.type_id)
+}
+#endif
+inline void tb_type::set_type_id(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  
+  type_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:tb_type.type_id)
+}
+inline void tb_type::set_type_id(const char* value, size_t size) {
+  
+  type_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:tb_type.type_id)
+}
+inline ::std::string* tb_type::mutable_type_id() {
+  
+  // @@protoc_insertion_point(field_mutable:tb_type.type_id)
+  return type_id_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* tb_type::release_type_id() {
+  // @@protoc_insertion_point(field_release:tb_type.type_id)
+  
+  return type_id_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void tb_type::set_allocated_type_id(::std::string* type_id) {
+  if (type_id != NULL) {
+    
+  } else {
+    
+  }
+  type_id_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), type_id);
+  // @@protoc_insertion_point(field_set_allocated:tb_type.type_id)
+}
+
+// string type_name = 3;
+inline void tb_type::clear_type_name() {
+  type_name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline const ::std::string& tb_type::type_name() const {
+  // @@protoc_insertion_point(field_get:tb_type.type_name)
+  return type_name_.GetNoArena();
+}
+inline void tb_type::set_type_name(const ::std::string& value) {
+  
+  type_name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:tb_type.type_name)
+}
+#if LANG_CXX11
+inline void tb_type::set_type_name(::std::string&& value) {
+  
+  type_name_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:tb_type.type_name)
+}
+#endif
+inline void tb_type::set_type_name(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  
+  type_name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:tb_type.type_name)
+}
+inline void tb_type::set_type_name(const char* value, size_t size) {
+  
+  type_name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:tb_type.type_name)
+}
+inline ::std::string* tb_type::mutable_type_name() {
+  
+  // @@protoc_insertion_point(field_mutable:tb_type.type_name)
+  return type_name_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* tb_type::release_type_name() {
+  // @@protoc_insertion_point(field_release:tb_type.type_name)
+  
+  return type_name_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void tb_type::set_allocated_type_name(::std::string* type_name) {
+  if (type_name != NULL) {
+    
+  } else {
+    
+  }
+  type_name_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), type_name);
+  // @@protoc_insertion_point(field_set_allocated:tb_type.type_name)
+}
+
+// string type_gen_time = 4;
+inline void tb_type::clear_type_gen_time() {
+  type_gen_time_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline const ::std::string& tb_type::type_gen_time() const {
+  // @@protoc_insertion_point(field_get:tb_type.type_gen_time)
+  return type_gen_time_.GetNoArena();
+}
+inline void tb_type::set_type_gen_time(const ::std::string& value) {
+  
+  type_gen_time_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:tb_type.type_gen_time)
+}
+#if LANG_CXX11
+inline void tb_type::set_type_gen_time(::std::string&& value) {
+  
+  type_gen_time_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:tb_type.type_gen_time)
+}
+#endif
+inline void tb_type::set_type_gen_time(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  
+  type_gen_time_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:tb_type.type_gen_time)
+}
+inline void tb_type::set_type_gen_time(const char* value, size_t size) {
+  
+  type_gen_time_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:tb_type.type_gen_time)
+}
+inline ::std::string* tb_type::mutable_type_gen_time() {
+  
+  // @@protoc_insertion_point(field_mutable:tb_type.type_gen_time)
+  return type_gen_time_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* tb_type::release_type_gen_time() {
+  // @@protoc_insertion_point(field_release:tb_type.type_gen_time)
+  
+  return type_gen_time_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void tb_type::set_allocated_type_gen_time(::std::string* type_gen_time) {
+  if (type_gen_time != NULL) {
+    
+  } else {
+    
+  }
+  type_gen_time_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), type_gen_time);
+  // @@protoc_insertion_point(field_set_allocated:tb_type.type_gen_time)
+}
+
+// -------------------------------------------------------------------
+
+// tb_reply
+
+// string customer_id = 1;
+inline void tb_reply::clear_customer_id() {
+  customer_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline const ::std::string& tb_reply::customer_id() const {
+  // @@protoc_insertion_point(field_get:tb_reply.customer_id)
+  return customer_id_.GetNoArena();
+}
+inline void tb_reply::set_customer_id(const ::std::string& value) {
+  
+  customer_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:tb_reply.customer_id)
+}
+#if LANG_CXX11
+inline void tb_reply::set_customer_id(::std::string&& value) {
+  
+  customer_id_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:tb_reply.customer_id)
+}
+#endif
+inline void tb_reply::set_customer_id(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  
+  customer_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:tb_reply.customer_id)
+}
+inline void tb_reply::set_customer_id(const char* value, size_t size) {
+  
+  customer_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:tb_reply.customer_id)
+}
+inline ::std::string* tb_reply::mutable_customer_id() {
+  
+  // @@protoc_insertion_point(field_mutable:tb_reply.customer_id)
+  return customer_id_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* tb_reply::release_customer_id() {
+  // @@protoc_insertion_point(field_release:tb_reply.customer_id)
+  
+  return customer_id_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void tb_reply::set_allocated_customer_id(::std::string* customer_id) {
+  if (customer_id != NULL) {
+    
+  } else {
+    
+  }
+  customer_id_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), customer_id);
+  // @@protoc_insertion_point(field_set_allocated:tb_reply.customer_id)
+}
+
+// string type_id = 2;
+inline void tb_reply::clear_type_id() {
+  type_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline const ::std::string& tb_reply::type_id() const {
+  // @@protoc_insertion_point(field_get:tb_reply.type_id)
+  return type_id_.GetNoArena();
+}
+inline void tb_reply::set_type_id(const ::std::string& value) {
+  
+  type_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:tb_reply.type_id)
+}
+#if LANG_CXX11
+inline void tb_reply::set_type_id(::std::string&& value) {
+  
+  type_id_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:tb_reply.type_id)
+}
+#endif
+inline void tb_reply::set_type_id(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  
+  type_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:tb_reply.type_id)
+}
+inline void tb_reply::set_type_id(const char* value, size_t size) {
+  
+  type_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:tb_reply.type_id)
+}
+inline ::std::string* tb_reply::mutable_type_id() {
+  
+  // @@protoc_insertion_point(field_mutable:tb_reply.type_id)
+  return type_id_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* tb_reply::release_type_id() {
+  // @@protoc_insertion_point(field_release:tb_reply.type_id)
+  
+  return type_id_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void tb_reply::set_allocated_type_id(::std::string* type_id) {
+  if (type_id != NULL) {
+    
+  } else {
+    
+  }
+  type_id_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), type_id);
+  // @@protoc_insertion_point(field_set_allocated:tb_reply.type_id)
+}
+
+// string reply_id = 3;
+inline void tb_reply::clear_reply_id() {
+  reply_id_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline const ::std::string& tb_reply::reply_id() const {
+  // @@protoc_insertion_point(field_get:tb_reply.reply_id)
+  return reply_id_.GetNoArena();
+}
+inline void tb_reply::set_reply_id(const ::std::string& value) {
+  
+  reply_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:tb_reply.reply_id)
+}
+#if LANG_CXX11
+inline void tb_reply::set_reply_id(::std::string&& value) {
+  
+  reply_id_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:tb_reply.reply_id)
+}
+#endif
+inline void tb_reply::set_reply_id(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  
+  reply_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:tb_reply.reply_id)
+}
+inline void tb_reply::set_reply_id(const char* value, size_t size) {
+  
+  reply_id_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:tb_reply.reply_id)
+}
+inline ::std::string* tb_reply::mutable_reply_id() {
+  
+  // @@protoc_insertion_point(field_mutable:tb_reply.reply_id)
+  return reply_id_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* tb_reply::release_reply_id() {
+  // @@protoc_insertion_point(field_release:tb_reply.reply_id)
+  
+  return reply_id_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void tb_reply::set_allocated_reply_id(::std::string* reply_id) {
+  if (reply_id != NULL) {
+    
+  } else {
+    
+  }
+  reply_id_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), reply_id);
+  // @@protoc_insertion_point(field_set_allocated:tb_reply.reply_id)
+}
+
+// string reply_name = 4;
+inline void tb_reply::clear_reply_name() {
+  reply_name_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline const ::std::string& tb_reply::reply_name() const {
+  // @@protoc_insertion_point(field_get:tb_reply.reply_name)
+  return reply_name_.GetNoArena();
+}
+inline void tb_reply::set_reply_name(const ::std::string& value) {
+  
+  reply_name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:tb_reply.reply_name)
+}
+#if LANG_CXX11
+inline void tb_reply::set_reply_name(::std::string&& value) {
+  
+  reply_name_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:tb_reply.reply_name)
+}
+#endif
+inline void tb_reply::set_reply_name(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  
+  reply_name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:tb_reply.reply_name)
+}
+inline void tb_reply::set_reply_name(const char* value, size_t size) {
+  
+  reply_name_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:tb_reply.reply_name)
+}
+inline ::std::string* tb_reply::mutable_reply_name() {
+  
+  // @@protoc_insertion_point(field_mutable:tb_reply.reply_name)
+  return reply_name_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* tb_reply::release_reply_name() {
+  // @@protoc_insertion_point(field_release:tb_reply.reply_name)
+  
+  return reply_name_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void tb_reply::set_allocated_reply_name(::std::string* reply_name) {
+  if (reply_name != NULL) {
+    
+  } else {
+    
+  }
+  reply_name_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), reply_name);
+  // @@protoc_insertion_point(field_set_allocated:tb_reply.reply_name)
+}
+
+// string reply_content = 5;
+inline void tb_reply::clear_reply_content() {
+  reply_content_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline const ::std::string& tb_reply::reply_content() const {
+  // @@protoc_insertion_point(field_get:tb_reply.reply_content)
+  return reply_content_.GetNoArena();
+}
+inline void tb_reply::set_reply_content(const ::std::string& value) {
+  
+  reply_content_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:tb_reply.reply_content)
+}
+#if LANG_CXX11
+inline void tb_reply::set_reply_content(::std::string&& value) {
+  
+  reply_content_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:tb_reply.reply_content)
+}
+#endif
+inline void tb_reply::set_reply_content(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  
+  reply_content_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:tb_reply.reply_content)
+}
+inline void tb_reply::set_reply_content(const char* value, size_t size) {
+  
+  reply_content_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:tb_reply.reply_content)
+}
+inline ::std::string* tb_reply::mutable_reply_content() {
+  
+  // @@protoc_insertion_point(field_mutable:tb_reply.reply_content)
+  return reply_content_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* tb_reply::release_reply_content() {
+  // @@protoc_insertion_point(field_release:tb_reply.reply_content)
+  
+  return reply_content_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void tb_reply::set_allocated_reply_content(::std::string* reply_content) {
+  if (reply_content != NULL) {
+    
+  } else {
+    
+  }
+  reply_content_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), reply_content);
+  // @@protoc_insertion_point(field_set_allocated:tb_reply.reply_content)
+}
+
+// string reply_gen_time = 6;
+inline void tb_reply::clear_reply_gen_time() {
+  reply_gen_time_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline const ::std::string& tb_reply::reply_gen_time() const {
+  // @@protoc_insertion_point(field_get:tb_reply.reply_gen_time)
+  return reply_gen_time_.GetNoArena();
+}
+inline void tb_reply::set_reply_gen_time(const ::std::string& value) {
+  
+  reply_gen_time_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:tb_reply.reply_gen_time)
+}
+#if LANG_CXX11
+inline void tb_reply::set_reply_gen_time(::std::string&& value) {
+  
+  reply_gen_time_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:tb_reply.reply_gen_time)
+}
+#endif
+inline void tb_reply::set_reply_gen_time(const char* value) {
+  GOOGLE_DCHECK(value != NULL);
+  
+  reply_gen_time_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:tb_reply.reply_gen_time)
+}
+inline void tb_reply::set_reply_gen_time(const char* value, size_t size) {
+  
+  reply_gen_time_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:tb_reply.reply_gen_time)
+}
+inline ::std::string* tb_reply::mutable_reply_gen_time() {
+  
+  // @@protoc_insertion_point(field_mutable:tb_reply.reply_gen_time)
+  return reply_gen_time_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* tb_reply::release_reply_gen_time() {
+  // @@protoc_insertion_point(field_release:tb_reply.reply_gen_time)
+  
+  return reply_gen_time_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void tb_reply::set_allocated_reply_gen_time(::std::string* reply_gen_time) {
+  if (reply_gen_time != NULL) {
+    
+  } else {
+    
+  }
+  reply_gen_time_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), reply_gen_time);
+  // @@protoc_insertion_point(field_set_allocated:tb_reply.reply_gen_time)
+}
+
+// -------------------------------------------------------------------
+
+// rec_customer
+
+// repeated .tb_customer customers = 1;
+inline int rec_customer::customers_size() const {
+  return customers_.size();
+}
+inline void rec_customer::clear_customers() {
+  customers_.Clear();
+}
+inline ::tb_customer* rec_customer::mutable_customers(int index) {
+  // @@protoc_insertion_point(field_mutable:rec_customer.customers)
+  return customers_.Mutable(index);
+}
+inline ::google::protobuf::RepeatedPtrField< ::tb_customer >*
+rec_customer::mutable_customers() {
+  // @@protoc_insertion_point(field_mutable_list:rec_customer.customers)
+  return &customers_;
+}
+inline const ::tb_customer& rec_customer::customers(int index) const {
+  // @@protoc_insertion_point(field_get:rec_customer.customers)
+  return customers_.Get(index);
+}
+inline ::tb_customer* rec_customer::add_customers() {
+  // @@protoc_insertion_point(field_add:rec_customer.customers)
+  return customers_.Add();
+}
+inline const ::google::protobuf::RepeatedPtrField< ::tb_customer >&
+rec_customer::customers() const {
+  // @@protoc_insertion_point(field_list:rec_customer.customers)
+  return customers_;
+}
+
+// -------------------------------------------------------------------
+
+// rec_type
+
+// repeated .tb_type types = 1;
+inline int rec_type::types_size() const {
+  return types_.size();
+}
+inline void rec_type::clear_types() {
+  types_.Clear();
+}
+inline ::tb_type* rec_type::mutable_types(int index) {
+  // @@protoc_insertion_point(field_mutable:rec_type.types)
+  return types_.Mutable(index);
+}
+inline ::google::protobuf::RepeatedPtrField< ::tb_type >*
+rec_type::mutable_types() {
+  // @@protoc_insertion_point(field_mutable_list:rec_type.types)
+  return &types_;
+}
+inline const ::tb_type& rec_type::types(int index) const {
+  // @@protoc_insertion_point(field_get:rec_type.types)
+  return types_.Get(index);
+}
+inline ::tb_type* rec_type::add_types() {
+  // @@protoc_insertion_point(field_add:rec_type.types)
+  return types_.Add();
+}
+inline const ::google::protobuf::RepeatedPtrField< ::tb_type >&
+rec_type::types() const {
+  // @@protoc_insertion_point(field_list:rec_type.types)
+  return types_;
+}
+
+// -------------------------------------------------------------------
+
+// rec_reply
+
+// repeated .tb_reply replys = 1;
+inline int rec_reply::replys_size() const {
+  return replys_.size();
+}
+inline void rec_reply::clear_replys() {
+  replys_.Clear();
+}
+inline ::tb_reply* rec_reply::mutable_replys(int index) {
+  // @@protoc_insertion_point(field_mutable:rec_reply.replys)
+  return replys_.Mutable(index);
+}
+inline ::google::protobuf::RepeatedPtrField< ::tb_reply >*
+rec_reply::mutable_replys() {
+  // @@protoc_insertion_point(field_mutable_list:rec_reply.replys)
+  return &replys_;
+}
+inline const ::tb_reply& rec_reply::replys(int index) const {
+  // @@protoc_insertion_point(field_get:rec_reply.replys)
+  return replys_.Get(index);
+}
+inline ::tb_reply* rec_reply::add_replys() {
+  // @@protoc_insertion_point(field_add:rec_reply.replys)
+  return replys_.Add();
+}
+inline const ::google::protobuf::RepeatedPtrField< ::tb_reply >&
+rec_reply::replys() const {
+  // @@protoc_insertion_point(field_list:rec_reply.replys)
+  return replys_;
+}
+
+// -------------------------------------------------------------------
+
+// view
+
+#ifdef __GNUC__
+  #pragma GCC diagnostic pop
+#endif  // __GNUC__
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+
+
+// @@protoc_insertion_point(namespace_scope)
+
+
+// @@protoc_insertion_point(global_scope)
+
+#endif  // PROTOBUF_INCLUDED_table_2eproto

+ 2 - 2
source/疑难.txt

@@ -19,7 +19,7 @@ error LNK2005: _DllMain@12 
 
 
 【错误信息】
-protobuf默认VS编译出来的是dll动态库,而本项目中WxAdoInterface本身也是dll,WxAdoInterface调用protobuf,WxAdoInterface由WxService调用。
+protobuf默认VS编译出来的是dll动态库(预处理器定义使用:PROTOBUF_USE_DLLS),而本项目中WxAdoInterface本身也是dll,WxAdoInterface调用protobuf,WxAdoInterface由WxService调用。
 整个项目编译期间没有出任何问题,运行时报错:std::call_once被调用二次,导致google::protobuf::FatalException。
 
 
@@ -28,7 +28,7 @@ std::call_once
 可能原因是:WxService调用了一次protobuf初始化环境,而WxService再次调用WxAdoInterface又被初始化了一次。
 
 【解决方法】:
-将protobuf由dll改成lib方式链接.
+将protobuf由dll改成lib方式链接(不要使用预处理:PROTOBUF_USE_DLLS).