You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
160 lines
3.7 KiB
160 lines
3.7 KiB
|
|
#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);
|
|
}
|
|
|