Skip to content
This repository was archived by the owner on Mar 31, 2024. It is now read-only.

Commit 35a5532

Browse files
committed
完善版本检测代码,修复未连接CoolQ时无法输入指令的bug
1 parent 7435454 commit 35a5532

7 files changed

Lines changed: 48 additions & 22 deletions

File tree

BOIT Server/RegisterRW.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ int RegisterRead(WCHAR * BaseDir)
4747
if (VersionMajor < VERSION_MAJOR)
4848
{
4949
//老版本配置
50-
iSuccess = SETTINGS_OUT_OF_DATE;
50+
iSuccess = SETTINGS_ERR_OUT_OF_DATE;
5151
__leave;
5252
}
5353
if (VersionMajor > VERSION_MAJOR)
@@ -60,13 +60,13 @@ int RegisterRead(WCHAR * BaseDir)
6060
if (VersionMinor < VERSION_MINOR)
6161
{
6262
//老版本配置
63-
iSuccess = SETTINGS_OUT_OF_DATE;
63+
iSuccess = SETTINGS_ERR_OUT_OF_DATE;
6464
__leave;
6565
}
6666
if (VersionMinor > VERSION_MINOR)
6767
{
6868
//老版本软件
69-
iSuccess = SETTINGS_ERROR;
69+
iSuccess = SETTINGS_ERR_OLD_SOFTWARE;
7070
__leave;
7171
}
7272

BOIT Server/SendEventDispatch.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ int SendEventPrivateMsg(long long QQID, WCHAR * Msg)
3333
__leave;
3434
}
3535
//读取返回值
36-
printf("测试消息ID是%d\n", pSharedMemSend->u.PrivateMsg.iRet);
36+
//printf("测试消息ID是%d\n", pSharedMemSend->u.PrivateMsg.iRet);
3737

3838
SetEvent(hEventSendRet);
3939

@@ -66,7 +66,7 @@ int SendEventGroupMsg(long long GroupID, WCHAR* Msg)
6666
__leave;
6767
}
6868
//成功
69-
printf("测试消息ID是%d\n", pSharedMemSend->u.GroupMsg.iRet);
69+
//printf("测试消息ID是%d\n", pSharedMemSend->u.GroupMsg.iRet);
7070

7171
SetEvent(hEventSendRet);
7272
}

BOIT Server/ServerMain.c

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,16 @@ int main()
4242
puts("注册表加载成功\n");
4343
InitBOITDirVar();
4444
break;
45+
case SETTINGS_ERR_OLD_SOFTWARE:
46+
puts("检测到您正在使用的软件比之前使用过的版本更低。请使用高版本的软件\n如果需要使用低版本的软件请先在高版本软件中卸载之前的安装。\n");
47+
puts("按任意键退出程序");
48+
ch_ret = _getch();
49+
return 0;
50+
case SETTINGS_ERR_OUT_OF_DATE:
51+
puts("检测到您正在使用新版本的软件。请先用旧版本软件移除之前的安装!");
52+
puts("按任意键退出程序");
53+
ch_ret = _getch();
54+
return 0;
4555
case SETTINGS_ERROR:
4656
if (ConsoleQueryYesNo("注册表加载失败,是否清空设置并初始化 ?") == FALSE)
4757
{
@@ -78,9 +88,9 @@ int main()
7888
printf("将在目录 %s 初始化BOIT\n", InBaseDir);
7989
PathAppendA(InBaseDir, "BOIT\\");
8090

81-
91+
8292
MultiByteToWideChar(CP_ACP, 0, InBaseDir, -1, GetBOITBaseDir(), MAX_PATH);
83-
93+
8494
if (InitializeSettings(GetBOITBaseDir()) != SETTINGS_INITIALIZED)
8595
{
8696
//Oops
@@ -98,7 +108,7 @@ int main()
98108
}
99109
break;
100110
}
101-
111+
102112
}
103113

104114
bBOITRemove = 0;//是否卸载程序标识
@@ -108,15 +118,19 @@ int main()
108118
InitServerState();
109119
InitSendEventDispatch();;
110120
InitEstablishConn();
111-
TryEstablishConn();
112121

113-
puts("连接成功!\n");
114-
115122
StartInputThread(); // 启动控制台输入线程
116-
117-
StartRecvEventHandler();
118123

119-
WaitForSingleObject(hEventServerStop, INFINITE);
124+
if (TryEstablishConn(hEventServerStop) != -1)
125+
{
126+
puts("连接成功!\n");
127+
128+
StartRecvEventHandler();
129+
130+
WaitForSingleObject(hEventServerStop, INFINITE);
131+
}
132+
133+
120134

121135
//清理工作
122136

@@ -157,7 +171,7 @@ int main()
157171
return 0;
158172
}
159173

160-
BOOL ConsoleQueryYesNo(char * QueryText)
174+
BOOL ConsoleQueryYesNo(char* QueryText)
161175
{
162176
int ch_ret;
163177
while (1)

BOIT Server/WaitForConnThread.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
unsigned __stdcall WaitForConnThread(void* Args)
99
{
1010
InitEstablishConn();
11-
TryEstablishConn();
11+
TryEstablishConn(NULL);
1212
StartSendEventHandler();
1313
return 0;
1414
}

BOIT Shared/EstablishConn.c

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ int InitEstablishConn()
3434
return 0;
3535
}
3636

37-
int TryEstablishConn()//return -1代表失败 0代表成功创建对象并等待到连接 1代表成功连接
37+
int TryEstablishConn(HANDLE hEventAbort)//return -1代表失败 0代表成功创建对象并等待到连接 1代表成功连接
3838
{
3939
int iRet = -2;
4040
InitConnVar();
@@ -86,7 +86,18 @@ int InitEstablishConn()
8686
break;
8787
case 0:
8888
pSharedMemProcess->pid[0] = GetCurrentProcessId();
89-
WaitForSingleObject(hEventConnect, INFINITE);
89+
HANDLE hObjWait[2] = { hEventConnect ,hEventAbort };
90+
switch (WaitForMultipleObjects(hEventAbort ? 2 : 1, hObjWait, 0, INFINITE))
91+
{
92+
case WAIT_OBJECT_0:
93+
break;
94+
case WAIT_OBJECT_0 + 1:
95+
iRet = -1;//Abandon
96+
break;
97+
98+
}
99+
100+
//WaitForSingleObject(hEventConnect, INFINITE);
90101
break;
91102
case 1:
92103
//把自己的进程句柄写入

BOIT Shared/EstablishConn.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ SRWLOCK ConnStateLock;
2929

3030

3131
int InitEstablishConn();
32-
int TryEstablishConn();
32+
int TryEstablishConn(HANDLE hEventAbort);
3333
int GetConnState();
3434
BOOL CleanConn();
3535
BOOL InitConnVar();

BOIT Version/Settings.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#define SETTINGS_INITIALIZED 3
1010

1111
#define SETTINGS_NOT_FOUND 4 //设置注册表项(根)没找到 应该是第一次使用这个软件
12-
#define SETTINGS_OUT_OF_DATE 5 //设置是老版本的
13-
#define SETTINGS_ERROR 6 //出现错误
14-
#define SETTINGS_NULL_BUFFER 7 //缓冲区是NULL
12+
#define SETTINGS_ERR_OUT_OF_DATE 5 //设置是老版本的
13+
#define SETTINGS_ERR_OLD_SOFTWARE 6 //软件是老版本的
14+
#define SETTINGS_ERROR 7 //出现错误
15+
#define SETTINGS_NULL_BUFFER 8 //缓冲区是NULL

0 commit comments

Comments
 (0)