161 lines
3.7 KiB
C
161 lines
3.7 KiB
C
|
|
|||
|
#include <windows.h>
|
|||
|
#include <port1632.h>
|
|||
|
#include <ddeml.h>
|
|||
|
#include <string.h>
|
|||
|
#include "wrapper.h"
|
|||
|
#include "ddestrs.h"
|
|||
|
|
|||
|
extern INT iAvailFormats[];
|
|||
|
extern BOOL UpdateCount(HWND,INT,INT);
|
|||
|
extern HANDLE hmemNet;
|
|||
|
|
|||
|
void CALLBACK TimerFunc( HWND hwnd, UINT msg, UINT id, DWORD dwTime)
|
|||
|
{
|
|||
|
HCONV hConv;
|
|||
|
HCONVLIST hConvList;
|
|||
|
LONG lflags;
|
|||
|
|
|||
|
switch (id%2) {
|
|||
|
case 1:
|
|||
|
hConv = 0;
|
|||
|
hConvList=(HCONVLIST)GetThreadLong(GETCURRENTTHREADID(),OFFSET_HCONVLIST);
|
|||
|
while (hConv = DdeQueryNextServer(hConvList, hConv)) {
|
|||
|
|
|||
|
// POKE CHANGES
|
|||
|
#if 0
|
|||
|
idI=GetThreadLong(GETCURRENTTHREADID(),OFFSET_IDINST);
|
|||
|
|
|||
|
if(DdeClientTransaction("Poke Transaction",
|
|||
|
strlen("Poke Transaction")+1,
|
|||
|
hConv,
|
|||
|
DdeCreateStringHandle(idI,"TestItem",CP_WINANSI),
|
|||
|
CF_TEXT,
|
|||
|
XTYP_POKE,
|
|||
|
TIMEOUT_ASYNC,
|
|||
|
NULL)==0){
|
|||
|
DDEMLERROR("DdeStrs.Exe -- DdeClientTransaction failed:XTYP_POKE\r\n");
|
|||
|
}
|
|||
|
#endif
|
|||
|
|
|||
|
// END OF POKE CHANGES
|
|||
|
|
|||
|
// Allow 'Pause' functionality -p on command line.
|
|||
|
|
|||
|
lflags=GetWindowLong(hwndMain,OFFSET_FLAGS);
|
|||
|
if((lflags&FLAG_PAUSE)!=FLAG_PAUSE)
|
|||
|
{
|
|||
|
|
|||
|
if(DdeClientTransaction(szExecRefresh,
|
|||
|
strlen(szExecRefresh) + 1,
|
|||
|
hConv,
|
|||
|
0,
|
|||
|
0,
|
|||
|
XTYP_EXECUTE,
|
|||
|
TIMEOUT_ASYNC,
|
|||
|
NULL)==0){
|
|||
|
DDEMLERROR("DdeStrs.Exe -- DdeClientTransaction failed:XTYP_EXECUTE\r\n");
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
BOOL InitClient()
|
|||
|
{
|
|||
|
UINT uid;
|
|||
|
|
|||
|
ReconnectList();
|
|||
|
|
|||
|
uid = SetTimer( hwndMain,
|
|||
|
(UINT)GetThreadLong(GETCURRENTTHREADID(),OFFSET_CLIENTTIMER),
|
|||
|
(UINT)(GetWindowLong(hwndMain,OFFSET_DELAY)),
|
|||
|
TimerFunc);
|
|||
|
|
|||
|
// This starts the test immidiatly. No delay waiting for the first
|
|||
|
// WM_TIMER call.
|
|||
|
|
|||
|
TimerFunc(hwndMain,WM_TIMER,uid,0);
|
|||
|
|
|||
|
return(TRUE);
|
|||
|
}
|
|||
|
|
|||
|
VOID CloseClient()
|
|||
|
{
|
|||
|
HCONVLIST hConvList;
|
|||
|
|
|||
|
hConvList=(HCONVLIST)GetThreadLong(GETCURRENTTHREADID(),OFFSET_HCONVLIST);
|
|||
|
KillTimer(hwndMain,(UINT)GetThreadLong(GETCURRENTTHREADID(),OFFSET_CLIENTTIMER));
|
|||
|
if (!DdeDisconnectList(hConvList)) {
|
|||
|
DDEMLERROR("DdeStrs.Exe -- DdeDisconnectList failed\r\n");
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
VOID ReconnectList()
|
|||
|
{
|
|||
|
HCONV hConv;
|
|||
|
HCONVLIST hConvList=0;
|
|||
|
LONG cClienthConvs;
|
|||
|
INT i;
|
|||
|
DWORD dwid;
|
|||
|
|
|||
|
dwid=GetThreadLong(GETCURRENTTHREADID(),OFFSET_IDINST);
|
|||
|
if(dwid==0) {
|
|||
|
DDEMLERROR("DdeStrs.Exe -- Null IdInst, aborting Connect!\r\n");
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
hConvList = DdeConnectList(dwid,
|
|||
|
ServiceInfoTable[0].hszService,
|
|||
|
Topics[0].hszTopic,
|
|||
|
GetThreadLong(GETCURRENTTHREADID(),OFFSET_HCONVLIST),
|
|||
|
NULL);
|
|||
|
if (hConvList == 0) {
|
|||
|
|
|||
|
// This call is expected to fail in the case of a client
|
|||
|
// starting when there is no available server. Just return
|
|||
|
// from the routine and continue.
|
|||
|
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
SetThreadLong(GETCURRENTTHREADID(),OFFSET_HCONVLIST,hConvList);
|
|||
|
|
|||
|
hConv = 0;
|
|||
|
cClienthConvs = 0L;
|
|||
|
|
|||
|
while (hConv = DdeQueryNextServer(hConvList, hConv)) {
|
|||
|
for (i=0; i<(int)Items[0].cFormats; i++) {
|
|||
|
if (iAvailFormats[i]) {
|
|||
|
if (!DdeClientTransaction( NULL,
|
|||
|
0,
|
|||
|
hConv,
|
|||
|
Items[0].hszItem,
|
|||
|
TestItemFormats[i].wFmt,
|
|||
|
XTYP_ADVSTART|XTYPF_ACKREQ,
|
|||
|
TIMEOUT_ASYNC,
|
|||
|
NULL)){
|
|||
|
DDEMLERROR("DdeStrs.Exe -- Error DdeClientTransaction failed\r\n");
|
|||
|
return;
|
|||
|
} // if
|
|||
|
|
|||
|
} // if
|
|||
|
|
|||
|
} // for
|
|||
|
|
|||
|
cClienthConvs++;
|
|||
|
|
|||
|
} // while
|
|||
|
|
|||
|
// Update the client count for the current thread.
|
|||
|
|
|||
|
dwid=GETCURRENTTHREADID();
|
|||
|
|
|||
|
SetThreadLong(dwid,OFFSET_CCLIENTCONVS,cClienthConvs);
|
|||
|
|
|||
|
UpdateCount(hwndMain,OFFSET_CLIENT_CONNECT,PNT);
|
|||
|
}
|
|||
|
|