📄 dsmpcc.cpp
字号:
#include <smpc/dsmpcsrv.h>
#include <smpc/dsmpcc.h>
class CSmpcServer : public DSmpcServer
{
private:
SmpcServer* server;
public:
CSmpcServer(dword sid, SmpcServer* _server) : DSmpcServer(sid) { server = _server; }
~CSmpcServer() { if(server && server->kill) server->kill(server); }
virtual int Call(dword proc, void* sd, dword snd, void* rd, dword& rcv)
{
return (server && server->serv && proc != Smpc_Proc_About) ?
server->serv(server,proc,sd,snd,rd,&rcv) :
DSmpcServer::Call(proc,sd,snd,rd,rcv);
}
virtual void PostCall(dword proc, int err)
{
DSmpcServer::PostCall(proc,err);
if(server && server->post) server->post(server,proc,err);
}
dword Type(void) const { return server ? server->type : 0; }
char* About(void) const
{ return (server && server->about) ? server->about : DSmpcServer::About(); }
};
const char* smpc_error_strings[] = {
"Success",
"Server not found",
"Procedure not found",
"Input data size error",
"Output data size error",
"System error",
"Call timeout",
"Wrong server type"
};
const char* cdecl smpc_error(int err)
{
return err < Smpc_Success || err > Smpc_Err_Type ? "Unknown" : smpc_error_strings[err];
}
Smpc cdecl smpc_create(void)
{
return (Smpc)CreateSmpc();
}
void cdecl smpc_delete(Smpc smpc)
{
delete (DSmpc*)smpc;
}
int cdecl smpc_call(Smpc smpc, dword sid, dword* type, dword proc,
DSmpcParam* sp, dword snd, DSmpcParam* rp, dword rcv)
{
return ((DSmpc*)smpc)->Call(sid,*type,proc,sp,snd,rp,rcv);
}
int cdecl smpc_about(Smpc smpc, dword sid, dword* type, char* str, dword len)
{
DSmpcParam rp = {str,len};
int err = ((DSmpc*)smpc)->Call(sid,*type,Smpc_Proc_About,0,0,&rp,1);
if(err == Smpc_Err_Type) {
SmpcSet(&rp,str,len);
err = ((DSmpc*)smpc)->Call(sid,*type,Smpc_Proc_About,0,0,&rp,1);
}
if(err == Smpc_Success) { if(!rp.size && len) str[0] = 0; }
return err;
}
int cdecl smpc_add(Smpc smpc, dword sid, SmpcServer* server)
{
CSmpcServer* srv = new CSmpcServer(sid,server);
if(!((DSmpc*)smpc)->add(srv)) { if(srv) delete srv; return 0; }
return 1;
}
int cdecl smpc_sub(Smpc smpc, dword sid)
{
DSmpcServer* srv = ((DSmpc*)smpc)->GetSrv(sid);
if(srv) { delete srv; return 1; }
return 0;
}
int cdecl smpc_sid(Smpc smpc, dword sid, dword nsid)
{
DSmpcServer* srv = ((DSmpc*)smpc)->GetSrv(sid);
if(!srv) return 0;
srv->Sid(nsid);
return srv->Smpc() != 0;
}
int cdecl smpc_run(Smpc smpc)
{
return ((DSmpc*)smpc)->Run();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -