soui 5.0.0.1
Soui5 Doc
 
Loading...
Searching...
No Matches
sipcobj-i.h
1#ifndef __SIPCOBJ_I__H__
2#define __SIPCOBJ_I__H__
3
4#include <interface/obj-ref-i.h>
5
6SNSBEGIN
7
8enum
9{
10 FUN_ID_CONNECT = 100,
11 FUN_ID_DISCONNECT,
12 FUN_ID_START,
13};
14
15enum
16{
17 UM_CALL_FUN = (WM_USER + 1000),
18};
19
20struct IShareBuffer
21{
22 enum SEEK
23 {
24 seek_set = 0, /* seek to an absolute position */
25 seek_cur, /* seek relative to current position */
26 seek_end /* seek relative to end of file */
27 };
28 virtual int Write(const void *data, UINT nLen) = 0;
29 virtual int Read(void *buf, UINT nLen) = 0;
30 virtual UINT Tell() const = 0;
31 virtual UINT Seek(SEEK mode, int nOffset) = 0;
32 virtual void SetTail(UINT uPos) = 0;
33 virtual BOOL Lock(DWORD timeout) = 0;
34 virtual void Unlock() = 0;
35};
36
37class SParamStream {
38 public:
39 SParamStream(IShareBuffer *pBuf)
40 : m_pBuffer(pBuf)
41 {
42 }
43
44 IShareBuffer *GetBuffer()
45 {
46 return m_pBuffer;
47 }
48
49 template <typename T>
50 SParamStream &operator<<(const T &data)
51 {
52 Write((const void *)&data, sizeof(data));
53 return *this;
54 }
55
56 template <typename T>
57 SParamStream &operator>>(T &data)
58 {
59 Read((void *)&data, sizeof(data));
60 return *this;
61 }
62
63 public:
64 int Write(const void *data, int nLen)
65 {
66 return m_pBuffer->Write(data, nLen);
67 }
68 int Read(void *buf, int nLen)
69 {
70 return m_pBuffer->Read(buf, nLen);
71 }
72
73 protected:
74 IShareBuffer *m_pBuffer;
75};
76
77struct IFunParams
78{
79 virtual UINT GetID() = 0;
80 virtual void ToStream4Input(SParamStream &ps) = 0;
81 virtual void ToStream4Output(SParamStream &ps) = 0;
82 virtual void FromStream4Input(SParamStream &ps) = 0;
83 virtual void FromStream4Output(SParamStream &ps) = 0;
84};
85
86struct IIpcConnection;
87struct IIpcHandle : IObjRef
88{
89 virtual BOOL IsConnected() const = 0;
90
91 virtual void SetIpcConnection(IIpcConnection *pConn) = 0;
92
93 virtual IIpcConnection *GetIpcConnection() const = 0;
94
95 virtual LRESULT OnMessage(ULONG_PTR idLocal, UINT uMsg, WPARAM wp, LPARAM lp, BOOL &bHandled) = 0;
96
97 virtual HRESULT ConnectTo(ULONG_PTR idLocal, ULONG_PTR idSvr) = 0;
98
99 virtual HRESULT Disconnect() = 0;
100
101 virtual bool CallFun(IFunParams *pParam) const = 0;
102
103 virtual ULONG_PTR GetLocalId() const = 0;
104
105 virtual ULONG_PTR GetRemoteId() const = 0;
106
107 virtual IShareBuffer *GetSendBuffer() = 0;
108
109 virtual IShareBuffer *GetRecvBuffer() = 0;
110
111 virtual BOOL InitShareBuf(ULONG_PTR idLocal, ULONG_PTR idRemote, UINT nBufSize, void *pSa) = 0;
112
113 virtual BOOL ToStream4Input(IFunParams *pParams, IShareBuffer *pBuf) const = 0;
114
115 virtual BOOL FromStream4Input(IFunParams *pParams, IShareBuffer *pBuf) const = 0;
116
117 virtual BOOL ToStream4Output(IFunParams *pParams, IShareBuffer *pBuf) const = 0;
118
119 virtual BOOL FromStream4Output(IFunParams *pParams, IShareBuffer *pBuf) const = 0;
120};
121
122struct IIpcConnection : IObjRef
123{
124 virtual int GetBufSize() const = 0;
125 virtual int GetStackSize() const = 0;
126 virtual IIpcHandle *GetIpcHandle() = 0;
127 virtual bool HandleFun(UINT uFunID, SParamStream &ps) = 0;
128 virtual void BuildShareBufferName(ULONG_PTR idLocal, ULONG_PTR idRemote, TCHAR szBuf[MAX_PATH]) const = 0;
129};
130
131struct IIpcSvrCallback
132{
133 // return value is the HWND of the connection that used to reccive message.
134 virtual ULONG_PTR OnNewConnection(IIpcHandle *pIpcHandle, IIpcConnection **ppConn) = 0;
135 virtual void OnConnected(IIpcConnection *pConn) = 0;
136 virtual void OnDisconnected(IIpcConnection *pConn) = 0;
137 virtual void *GetSecurityAttr() const = 0;
138 virtual void ReleaseSecurityAttr(void *psa) const = 0;
139};
140
141typedef BOOL (*FunEnumConnection)(IIpcConnection *pConn, ULONG_PTR data);
142
143struct IIpcServer : IObjRef
144{
145 virtual HRESULT Init(ULONG_PTR idSvr, IIpcSvrCallback *pCallback) = 0;
146 virtual void CheckConnectivity() = 0;
147 virtual LRESULT OnMessage(ULONG_PTR idLocal, UINT uMsg, WPARAM wp, LPARAM lp, BOOL &bHandled) = 0;
148 virtual void EnumClient(FunEnumConnection funEnum, ULONG_PTR data) = 0;
149 virtual BOOL FindConnection(ULONG_PTR idConn) = 0;
150 virtual BOOL Disconnect(ULONG_PTR idConn) = 0;
151};
152
153struct IIpcFactory : IObjRef
154{
155 virtual HRESULT CreateIpcServer(IIpcServer **ppServer) = 0;
156 virtual HRESULT CreateIpcHandle(IIpcHandle **ppHandle) = 0;
157};
158
159SNSEND
160#endif // __SIPCOBJ_I__H__
Interface for reference counting.
Definition obj-ref-i.h:19