admin
2022-07-24 e88a6656834864dd98da26118fe37d059b276537
'代码完善'
17个文件已修改
3个文件已添加
674 ■■■■ 已修改文件
ConsoleApplication/ConsoleApplication.vcxproj 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleApplication/ConsoleApplication.vcxproj.filters 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleApplication/L2DataCapture.cpp 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleApplication/OpenCLExcuter.cpp 229 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/JsonUtil.h 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/SocketManager.cpp 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/SocketManager.h 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/app.aps 补丁 | 查看 | 原始文档 | blame | 历史
app/app.cpp 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/app.rc 补丁 | 查看 | 原始文档 | blame | 历史
app/app.vcxproj 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/app.vcxproj.filters 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/appDlg.cpp 95 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/appDlg.h 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/codesDataDlog.cpp 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/common.h 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/loginDlg.cpp 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/loginDlg.h 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/resource.h 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/tool.h 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleApplication/ConsoleApplication.vcxproj
@@ -143,6 +143,7 @@
    </Link>
  </ItemDefinitionGroup>
  <ItemGroup>
    <ClCompile Include="TradeQueueCapture.cpp" />
    <ClCompile Include="TradeSuccessCapture.cpp" />
    <ClCompile Include="CaptureUtil.cpp" />
    <ClCompile Include="IndustryCapture.cpp" />
@@ -157,11 +158,11 @@
    <ClCompile Include="L2DataCapture.cpp" />
    <ClCompile Include="OpenclTest.cpp" />
    <ClCompile Include="THSActionUtil.cpp" />
    <ClCompile Include="TradeQueueCapture.cpp" />
    <ClCompile Include="Win32Util.cpp" />
    <ClCompile Include="win32_screen_shots.cpp" />
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="TradeQueueCapture.h" />
    <ClInclude Include="TradeSuccessCapture.h" />
    <ClInclude Include="CaptureUtil.h" />
    <ClInclude Include="error.h" />
@@ -176,7 +177,6 @@
    <ClInclude Include="resource.h" />
    <ClInclude Include="L2DataCapture.h" />
    <ClInclude Include="THSActionUtil.h" />
    <ClInclude Include="TradeQueueCapture.h" />
    <ClInclude Include="Win32Util.h" />
    <ClInclude Include="win32_screen_shots.h" />
  </ItemGroup>
ConsoleApplication/ConsoleApplication.vcxproj.filters
@@ -57,13 +57,13 @@
    <ClCompile Include="LimitUpCapture.cpp">
      <Filter>源文件</Filter>
    </ClCompile>
    <ClCompile Include="TradeQueueCapture.cpp">
      <Filter>源文件</Filter>
    </ClCompile>
    <ClCompile Include="IndustryCapture.cpp">
      <Filter>源文件</Filter>
    </ClCompile>
    <ClCompile Include="TradeSuccessCapture.cpp">
      <Filter>源文件</Filter>
    </ClCompile>
    <ClCompile Include="TradeQueueCapture.cpp">
      <Filter>源文件</Filter>
    </ClCompile>
  </ItemGroup>
@@ -110,15 +110,15 @@
    <ClInclude Include="LimitUpCapture.h">
      <Filter>头文件</Filter>
    </ClInclude>
    <ClInclude Include="TradeQueueCapture.h">
      <Filter>头文件</Filter>
    </ClInclude>
    <ClInclude Include="IndustryCapture.h">
      <Filter>头文件</Filter>
    </ClInclude>
    <ClInclude Include="TradeSuccessCapture.h">
      <Filter>头文件</Filter>
    </ClInclude>
    <ClInclude Include="TradeQueueCapture.h">
      <Filter>头文件</Filter>
    </ClInclude>
  </ItemGroup>
  <ItemGroup>
    <ResourceCompile Include="ConsoleApplication.rc">
ConsoleApplication/L2DataCapture.cpp
@@ -116,8 +116,8 @@
        thread rt(&(L2DataCapture::_run),i);
        rt.detach();
        thread rt_trade_queue(&(L2DataCapture::_run_trade_queue), i);
        rt_trade_queue.detach();
        //thread rt_trade_queue(&(L2DataCapture::_run_trade_queue), i);
        //rt_trade_queue.detach();
    }
}
@@ -502,7 +502,7 @@
    list<int*>().swap(rowDataList);
    free(rowSplitDataOneLevel);
    std::cout << "-------结束任务: threadid-" << std::this_thread::get_id() << "  序号:" << identify << " 耗时:" << clock() - starttime << endl;
    std::cout << "-------L2行情识别结束任务: threadid-" << std::this_thread::get_id() << "  序号:" << identify << " 耗时:" << clock() - starttime << endl;
    return resultList;
}
ConsoleApplication/OpenCLExcuter.cpp
@@ -4,23 +4,26 @@
    //获取平台
    error = clGetPlatformIDs(1, &platforms, &num_of_platforms);
    if (error != 0) {
        throw("Get platform failed!");
        throw string("Get platform failed!");
    }
    //获取设备
    error = clGetDeviceIDs(platforms, CL_DEVICE_TYPE_GPU, 1, &devices, NULL);
    if (error != 0) {
        throw("Get device failed!");
        error = clGetDeviceIDs(platforms, CL_DEVICE_TYPE_CPU, 1, &devices, NULL);
        if (error != 0) {
            throw string("Get device failed!");
        }
    }
    //创建上下文
    context = clCreateContext(NULL, 1, &devices, NULL, NULL, &error);
    if (error != 0) {
        throw("Creat context failed!");
        throw string("Creat context failed!");
    }
    //创建程序;注意要用"rb"
    fopen_s(&program_handle, "D:\\workspace\\CPlusTest\\ConsoleApplication\\ConsoleApplication\\kernel.cl", "rb");
    if (program_handle == NULL) {
        throw("The kernle can not be opened!");
        throw string("The kernle can not be opened!");
    }
    fseek(program_handle, 0, SEEK_END);
    program_size = ftell(program_handle);
@@ -30,13 +33,13 @@
    program_buffer[program_size] = '\0';
    error = fread(program_buffer, sizeof(char), program_size, program_handle);
    if (error == 0) {
        throw("Read kernel failed!");
        throw string("Read kernel failed!");
    }
    fclose(program_handle);
    program = clCreateProgramWithSource(context, 1, (const char**)&program_buffer,
        &program_size, &error);
    if (error < 0) {
        throw("Couldn't create the program!");
        throw string("Couldn't create the program!");
    }
    //编译程序
    error = clBuildProgram(program, 1, &devices, NULL, NULL, NULL);
@@ -50,14 +53,14 @@
            log_size + 1, program_log, NULL);
        printf("%s\n", program_log);
        free(program_log);
        throw("Build Program Failed");
        throw string("Build Program Failed");
    }
    free(program_buffer);
    //创建命令队列
    queue = clCreateCommandQueue(context, devices, CL_QUEUE_PROFILING_ENABLE, &error);
    if (error < 0) {
        throw("Coudn't create the command queue");
        throw string("Coudn't create the command queue");
    }
}
@@ -70,7 +73,7 @@
    //创建内核
    kernel = clCreateKernel(program, "recognition_numbers_1", &error);
    if (kernel == NULL) {
        throw("Couldn't create kernel!\n");
        throw string("Couldn't create kernel!\n");
    }
    //初始化参数
    unsigned char* result = (unsigned char*)malloc(sizeof(unsigned char) * resultSize);
@@ -78,18 +81,18 @@
    //创建缓存对象
    cl_mem memObject1 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(unsigned char) * inputSize, data, &error);
    if (error < 0) {
        throw("Creat memObject1 failed!\n");
        throw string("Creat memObject1 failed!\n");
    }
    cl_mem memObject2 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
        sizeof(unsigned char) * inputSize, b_in, &error);
    if (error < 0) {
        throw("Creat memObject2 failed!\n");
        throw string("Creat memObject2 failed!\n");
    }
    cl_mem memObject4 = clCreateBuffer(context, CL_MEM_WRITE_ONLY,
        sizeof(unsigned char) * resultSize, NULL, &error);
    if (error < 0) {
        throw("Creat memObject4 failed!\n");
        throw string("Creat memObject4 failed!\n");
    }
    int width = cols / num_width;
@@ -102,7 +105,7 @@
    error |= clSetKernelArg(kernel, 5, sizeof(int), &num_count);
    error |= clSetKernelArg(kernel, 6, sizeof(cl_mem), &memObject4);
    if (error != CL_SUCCESS) {
        throw("Error setting kernel arguments!\n");
        throw string("Error setting kernel arguments!\n");
    }
    //执行内核
    size_t globalWorkSize[1] = { resultSize };
@@ -113,14 +116,14 @@
    error = clEnqueueNDRangeKernel(queue, kernel, work_dim, NULL, globalWorkSize,
        localWorkSize, 0, NULL, NULL);
    if (error != CL_SUCCESS) {
        throw("Error queuing kernel for execution!\n");
        throw string("Error queuing kernel for execution!\n");
    }
    //读取执行结果
    error = clEnqueueReadBuffer(queue, memObject4, CL_TRUE, 0, resultSize * sizeof(unsigned char),
        result, 0, NULL, NULL);
    if (error != CL_SUCCESS) {
        throw("Error reading result buffer!\n");
        throw string("Error reading result buffer!\n");
    }
    /*
    printf("结果1:\n");
@@ -139,12 +142,12 @@
    kernel = clCreateKernel(program, "recognition_numbers_2", &error);
    if (kernel == NULL) {
        throw("Couldn't create kernel!\n");
        throw string("Couldn't create kernel!\n");
    }
    cl_mem memObject21 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(unsigned char) * resultSize, result, &error);
    if (error < 0) {
        throw("Creat memObject1 failed!\n");
        throw string("Creat memObject1 failed!\n");
    }
    cl_mem memObject22 = clCreateBuffer(context, CL_MEM_WRITE_ONLY,
@@ -154,20 +157,20 @@
    error |= clSetKernelArg(kernel, 1, sizeof(cl_mem), &memObject22);
    if (error != CL_SUCCESS) {
        throw("Error setting kernel arguments!\n");
        throw string("Error setting kernel arguments!\n");
    }
    size_t    globalWorkSize2[1] = { resultSize2 };
    error = clEnqueueNDRangeKernel(queue, kernel, work_dim, NULL, globalWorkSize2,
        localWorkSize, 0, NULL, NULL);
    if (error != CL_SUCCESS) {
        throw("Error queuing kernel for execution!\n");
        throw string("Error queuing kernel for execution!\n");
    }
    //读取执行结果
    error = clEnqueueReadBuffer(queue, memObject22, CL_TRUE, 0, resultSize2 * sizeof(unsigned char),
        result2, 0, NULL, NULL);
    if (error != CL_SUCCESS) {
        throw("Error reading result buffer!\n");
        throw string("Error reading result buffer!\n");
    }
@@ -220,7 +223,7 @@
    kernel = clCreateKernel(program, "split_plate_num", &error);
    if (kernel == NULL) {
        throw("Couldn't create kernel!\n");
        throw string("Couldn't create kernel!\n");
    }
    int inputSize = (img.cols * img.rows);
@@ -232,25 +235,25 @@
    cl_mem memObject1 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(unsigned char) * inputSize, img.data, &error);
    if (error < 0) {
        throw("Creat memObject1 failed!\n");
        throw string("Creat memObject1 failed!\n");
    }
    cl_mem memObject2 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
        sizeof(int) * pos.length * 4, pos.data, &error);
    if (error < 0) {
        throw("Creat memObject2 failed!\n");
        throw string("Creat memObject2 failed!\n");
    }
    cl_mem memObject3 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
        sizeof(unsigned char) * num_width * num_height, zero, &error);
    if (error < 0) {
        throw("Creat memObject3 failed!\n");
        throw string("Creat memObject3 failed!\n");
    }
    cl_mem memObject4 = clCreateBuffer(context, CL_MEM_WRITE_ONLY,
        sizeof(unsigned char) * resultSize, NULL, &error);
    if (error < 0) {
        throw("Creat memObject4 failed!\n");
        throw string("Creat memObject4 failed!\n");
    }
@@ -258,7 +261,7 @@
    cl_mem memObject5 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
        sizeof(unsigned char) * types.length, types.data, &error);
    if (error < 0) {
        throw("Creat memObject5 failed!\n");
        throw string("Creat memObject5 failed!\n");
    }
    //设置内核参数
@@ -273,7 +276,7 @@
    error |= clSetKernelArg(kernel, 8, sizeof(int), &length_per_num);
    error |= clSetKernelArg(kernel, 9, sizeof(cl_mem), &memObject4);
    if (error != CL_SUCCESS) {
        throw("Error setting kernel arguments!\n");
        throw string("Error setting kernel arguments!\n");
    }
    //执行内核
    size_t globalWorkSize[1] = { pos.length };
@@ -284,14 +287,14 @@
    error = clEnqueueNDRangeKernel(queue, kernel, work_dim, NULL, globalWorkSize,
        localWorkSize, 0, NULL, NULL);
    if (error != CL_SUCCESS) {
        throw("Error queuing kernel for execution!\n");
        throw string("Error queuing kernel for execution!\n");
    }
    //读取执行结果
    error = clEnqueueReadBuffer(queue, memObject4, CL_TRUE, 0, resultSize * sizeof(unsigned char),
        result.data, 0, NULL, NULL);
    if (error != CL_SUCCESS) {
        throw("Error reading result buffer!\n");
        throw string("Error reading result buffer!\n");
    }
@@ -312,7 +315,7 @@
    kernel = clCreateKernel(program, "split_l2_num_new", &error);
    if (kernel == NULL) {
        throw("Couldn't create kernel!\n");
        throw string("Couldn't create kernel!\n");
    }
    int inputSize = (img.cols * img.rows);
@@ -324,25 +327,25 @@
    cl_mem memObject1 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(unsigned char) * inputSize, img.data, &error);
    if (error < 0) {
        throw("Creat memObject1 failed!\n");
        throw string("Creat memObject1 failed!\n");
    }
    cl_mem memObject2 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
        sizeof(int) * pos.length * 4, pos.data, &error);
    if (error < 0) {
        throw("Creat memObject2 failed!\n");
        throw string("Creat memObject2 failed!\n");
    }
    cl_mem memObject3 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
        sizeof(unsigned char) * num_width * num_height, zero, &error);
    if (error < 0) {
        throw("Creat memObject3 failed!\n");
        throw string("Creat memObject3 failed!\n");
    }
    cl_mem memObject4 = clCreateBuffer(context, CL_MEM_WRITE_ONLY,
        sizeof(unsigned char) * resultSize, NULL, &error);
    if (error < 0) {
        throw("Creat memObject4 failed!\n");
        throw string("Creat memObject4 failed!\n");
    }
@@ -350,7 +353,7 @@
    cl_mem memObject5 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
        sizeof(unsigned char) * types.length, types.data, &error);
    if (error < 0) {
        throw("Creat memObject5 failed!\n");
        throw string("Creat memObject5 failed!\n");
    }
    //设置内核参数
@@ -365,7 +368,7 @@
    error |= clSetKernelArg(kernel, 8, sizeof(int), &length_per_num);
    error |= clSetKernelArg(kernel, 9, sizeof(cl_mem), &memObject4);
    if (error != CL_SUCCESS) {
        throw("Error setting kernel arguments!\n");
        throw string("Error setting kernel arguments!\n");
    }
    //执行内核
    size_t globalWorkSize[1] = { pos.length };
@@ -376,14 +379,14 @@
    error = clEnqueueNDRangeKernel(queue, kernel, work_dim, NULL, globalWorkSize,
        localWorkSize, 0, NULL, NULL);
    if (error != CL_SUCCESS) {
        throw("Error queuing kernel for execution!\n");
        throw string("Error queuing kernel for execution!\n");
    }
    //读取执行结果
    error = clEnqueueReadBuffer(queue, memObject4, CL_TRUE, 0, resultSize * sizeof(unsigned char),
        result.data, 0, NULL, NULL);
    if (error != CL_SUCCESS) {
        throw("Error reading result buffer!\n");
        throw string("Error reading result buffer!\n");
    }
@@ -407,7 +410,7 @@
    kernel = clCreateKernel(program, "split_plate_num", &error);
    if (kernel == NULL) {
        throw("Couldn't create kernel!\n");
        throw string("Couldn't create kernel!\n");
    }
    int inputSize = (img_width * img_height);
@@ -421,25 +424,25 @@
    cl_mem memObject1 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(unsigned char) * inputSize, img, &error);
    if (error < 0) {
        throw("Creat memObject1 failed!\n");
        throw string("Creat memObject1 failed!\n");
    }
    cl_mem memObject2 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
        sizeof(int) * pos_count * 4, pos, &error);
    if (error < 0) {
        throw("Creat memObject2 failed!\n");
        throw string("Creat memObject2 failed!\n");
    }
    cl_mem memObject3 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
        sizeof(unsigned char) * num_width * num_height, zero, &error);
    if (error < 0) {
        throw("Creat memObject3 failed!\n");
        throw string("Creat memObject3 failed!\n");
    }
    cl_mem memObject4 = clCreateBuffer(context, CL_MEM_WRITE_ONLY,
        sizeof(unsigned char) * resultSize, NULL, &error);
    if (error < 0) {
        throw("Creat memObject4 failed!\n");
        throw string("Creat memObject4 failed!\n");
    }
@@ -453,7 +456,7 @@
    cl_mem memObject5 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
        sizeof(unsigned char) * 4, types, &error);
    if (error < 0) {
        throw("Creat memObject5 failed!\n");
        throw string("Creat memObject5 failed!\n");
    }
    int ele_count_line = 4;
@@ -470,7 +473,7 @@
    error |= clSetKernelArg(kernel, 8, sizeof(int), &length_per_num);
    error |= clSetKernelArg(kernel, 9, sizeof(cl_mem), &memObject4);
    if (error != CL_SUCCESS) {
        throw("Error setting kernel arguments!\n");
        throw string("Error setting kernel arguments!\n");
    }
    //执行内核
    size_t globalWorkSize[1] = { pos_count };
@@ -481,14 +484,14 @@
    error = clEnqueueNDRangeKernel(queue, kernel, work_dim, NULL, globalWorkSize,
        localWorkSize, 0, NULL, NULL);
    if (error != CL_SUCCESS) {
        throw("Error queuing kernel for execution!\n");
        throw string("Error queuing kernel for execution!\n");
    }
    //读取执行结果
    error = clEnqueueReadBuffer(queue, memObject4, CL_TRUE, 0, resultSize * sizeof(unsigned char),
        result, 0, NULL, NULL);
    if (error != CL_SUCCESS) {
        throw("Error reading result buffer!\n");
        throw string("Error reading result buffer!\n");
    }
@@ -522,7 +525,7 @@
    kernel = clCreateKernel(program, "split_l2_num", &error);
    if (kernel == NULL) {
        throw("Couldn't create kernel!\n");
        throw string("Couldn't create kernel!\n");
    }
    int inputSize = (img_width * img_height);
@@ -534,25 +537,25 @@
    cl_mem memObject1 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(unsigned char) * inputSize, img, &error);
    if (error < 0) {
        throw("Creat memObject1 failed!\n");
        throw string("Creat memObject1 failed!\n");
    }
    cl_mem memObject2 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
        sizeof(int) * pos_count * 4, pos, &error);
    if (error < 0) {
        throw("Creat memObject2 failed!\n");
        throw string("Creat memObject2 failed!\n");
    }
    cl_mem memObject3 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
        sizeof(unsigned char) * num_width * num_height, zero, &error);
    if (error < 0) {
        throw("Creat memObject3 failed!\n");
        throw string("Creat memObject3 failed!\n");
    }
    cl_mem memObject4 = clCreateBuffer(context, CL_MEM_WRITE_ONLY,
        sizeof(unsigned char) * resultSize, NULL, &error);
    if (error < 0) {
        throw("Creat memObject4 failed!\n");
        throw string("Creat memObject4 failed!\n");
    }
    //设置内核参数
@@ -565,7 +568,7 @@
    error |= clSetKernelArg(kernel, 6, sizeof(int), &num_count);
    error |= clSetKernelArg(kernel, 7, sizeof(cl_mem), &memObject4);
    if (error != CL_SUCCESS) {
        throw("Error setting kernel arguments!\n");
        throw string("Error setting kernel arguments!\n");
    }
    //执行内核
    size_t globalWorkSize[1] = { pos_count };
@@ -576,14 +579,14 @@
    error = clEnqueueNDRangeKernel(queue, kernel, work_dim, NULL, globalWorkSize,
        localWorkSize, 0, NULL, NULL);
    if (error != CL_SUCCESS) {
        throw("Error queuing kernel for execution!\n");
        throw string("Error queuing kernel for execution!\n");
    }
    //读取执行结果
    error = clEnqueueReadBuffer(queue, memObject4, CL_TRUE, 0, resultSize * sizeof(unsigned char),
        result, 0, NULL, NULL);
    if (error != CL_SUCCESS) {
        throw("Error reading result buffer!\n");
        throw string("Error reading result buffer!\n");
    }
@@ -601,7 +604,7 @@
void OpenCLExcuter::createNumberTemplates(int lines, int num_width, int num_height, int num_count, uchar* numsOneLevelData, unsigned char* result) {
    kernel = clCreateKernel(program, "createTemplateNumbers", &error);
    if (kernel == NULL) {
        throw("Couldn't create kernel!\n");
        throw string("Couldn't create kernel!\n");
    }
@@ -613,14 +616,14 @@
    cl_mem memObject1 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(uchar) * inputSize, numsOneLevelData, &error);
    if (error < 0) {
        throw("Creat memObject1 failed!\n");
        throw string("Creat memObject1 failed!\n");
    }
    cl_mem memObject2 = clCreateBuffer(context, CL_MEM_WRITE_ONLY,
        sizeof(unsigned char) * resultSize, NULL, &error);
    if (error < 0) {
        throw("Creat memObject2 failed!\n");
        throw string("Creat memObject2 failed!\n");
    }
@@ -632,7 +635,7 @@
    error |= clSetKernelArg(kernel, 4, sizeof(cl_mem), &memObject2);
    if (error != CL_SUCCESS) {
        throw("Error setting kernel arguments!\n");
        throw string("Error setting kernel arguments!\n");
    }
    //执行内核
    size_t globalWorkSize[1] = { lines };
@@ -643,14 +646,14 @@
    error = clEnqueueNDRangeKernel(queue, kernel, work_dim, NULL, globalWorkSize,
        localWorkSize, 0, NULL, NULL);
    if (error != CL_SUCCESS) {
        throw("Error queuing kernel for execution!\n");
        throw string("Error queuing kernel for execution!\n");
    }
    //读取执行结果
    error = clEnqueueReadBuffer(queue, memObject2, CL_TRUE, 0, resultSize * sizeof(unsigned char),
        result, 0, NULL, NULL);
    if (error != CL_SUCCESS) {
        throw("Error reading result buffer!\n");
        throw string("Error reading result buffer!\n");
    }
    clReleaseKernel(kernel);
@@ -665,7 +668,7 @@
    kernel = clCreateKernel(program, "splitL2RowData", &error);
    if (kernel == NULL) {
        throw("Couldn't create kernel!\n");
        throw string("Couldn't create kernel!\n");
    }
@@ -677,19 +680,19 @@
    cl_mem memObject1 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(uchar) * inputSize, imgs, &error);
    if (error < 0) {
        throw("Creat memObject1 failed!\n");
        throw string("Creat memObject1 failed!\n");
    }
    cl_mem memObject2 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(int) * lines * 4, rowIndexs, &error);
    if (error < 0) {
        throw("Creat memObject2 failed!\n");
        throw string("Creat memObject2 failed!\n");
    }
    cl_mem memObject3 = clCreateBuffer(context, CL_MEM_WRITE_ONLY,
        sizeof(int) * resultSize, NULL, &error);
    if (error < 0) {
        throw("Creat memObject3 failed!\n");
        throw string("Creat memObject3 failed!\n");
    }
@@ -700,7 +703,7 @@
    error |= clSetKernelArg(kernel, 3, sizeof(cl_mem), &memObject3);
    if (error != CL_SUCCESS) {
        throw("Error setting kernel arguments!\n");
        throw string("Error setting kernel arguments!\n");
    }
    //执行内核
    size_t globalWorkSize[1] = { lines };
@@ -711,14 +714,14 @@
    error = clEnqueueNDRangeKernel(queue, kernel, work_dim, NULL, globalWorkSize,
        localWorkSize, 0, NULL, NULL);
    if (error != CL_SUCCESS) {
        throw("Error queuing kernel for execution!\n");
        throw string("Error queuing kernel for execution!\n");
    }
    //读取执行结果
    error = clEnqueueReadBuffer(queue, memObject3, CL_TRUE, 0, resultSize * sizeof(int),
        result, 0, NULL, NULL);
    if (error != CL_SUCCESS) {
        throw("Error reading result buffer!\n");
        throw string("Error reading result buffer!\n");
    }
    //printf("%d %d %d %d \n", result[0], result[1], result[2], result[3]);
@@ -736,7 +739,7 @@
    kernel = clCreateKernel(program, "splitCommonRowData", &error);
    if (kernel == NULL) {
        throw("Couldn't create kernel!\n");
        throw string("Couldn't create kernel!\n");
    }
@@ -748,19 +751,19 @@
    cl_mem memObject1 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(uchar) * inputSize, imgs, &error);
    if (error < 0) {
        throw("Creat memObject1 failed!\n");
        throw string("Creat memObject1 failed!\n");
    }
    cl_mem memObject2 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(int) * lines * 4, rowIndexs, &error);
    if (error < 0) {
        throw("Creat memObject2 failed!\n");
        throw string("Creat memObject2 failed!\n");
    }
    cl_mem memObject3 = clCreateBuffer(context, CL_MEM_WRITE_ONLY,
        sizeof(int) * resultSize, NULL, &error);
    if (error < 0) {
        throw("Creat memObject3 failed!\n");
        throw string("Creat memObject3 failed!\n");
    }
@@ -773,7 +776,7 @@
    error |= clSetKernelArg(kernel, 5, sizeof(cl_mem), &memObject3);
    if (error != CL_SUCCESS) {
        throw("Error setting kernel arguments!\n");
        throw string("Error setting kernel arguments!\n");
    }
    //执行内核
    size_t globalWorkSize[1] = { lines };
@@ -784,14 +787,14 @@
    error = clEnqueueNDRangeKernel(queue, kernel, work_dim, NULL, globalWorkSize,
        localWorkSize, 0, NULL, NULL);
    if (error != CL_SUCCESS) {
        throw("Error queuing kernel for execution!\n");
        throw string("Error queuing kernel for execution!\n");
    }
    //读取执行结果
    error = clEnqueueReadBuffer(queue, memObject3, CL_TRUE, 0, resultSize * sizeof(int),
        result, 0, NULL, NULL);
    if (error != CL_SUCCESS) {
        throw("Error reading result buffer!\n");
        throw string("Error reading result buffer!\n");
    }
    //printf("%d %d %d %d \n", result[0], result[1], result[2], result[3]);
@@ -810,7 +813,7 @@
    kernel = clCreateKernel(program, "recognition_not_num", &error);
    if (kernel == NULL) {
        throw("Couldn't create kernel!\n");
        throw string("Couldn't create kernel!\n");
    }
@@ -822,19 +825,19 @@
    cl_mem memObject1 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(uchar) * inputSize, imgs, &error);
    if (error < 0) {
        throw("Creat memObject1 failed!\n");
        throw string("Creat memObject1 failed!\n");
    }
    cl_mem memObject2 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(int) * lines * 4 * colCount, rowIndexs, &error);
    if (error < 0) {
        throw("Creat memObject2 failed!\n");
        throw string("Creat memObject2 failed!\n");
    }
    cl_mem memObject3 = clCreateBuffer(context, CL_MEM_WRITE_ONLY,
        sizeof(int) * resultSize, NULL, &error);
    if (error < 0) {
        throw("Creat memObject3 failed!\n");
        throw string("Creat memObject3 failed!\n");
    }
@@ -845,7 +848,7 @@
    error |= clSetKernelArg(kernel, 3, sizeof(cl_mem), &memObject3);
    if (error != CL_SUCCESS) {
        throw("Error setting kernel arguments!\n");
        throw string("Error setting kernel arguments!\n");
    }
    //执行内核
    size_t globalWorkSize[1] = { resultSize };
@@ -856,14 +859,14 @@
    error = clEnqueueNDRangeKernel(queue, kernel, work_dim, NULL, globalWorkSize,
        localWorkSize, 0, NULL, NULL);
    if (error != CL_SUCCESS) {
        throw("Error queuing kernel for execution!\n");
        throw string("Error queuing kernel for execution!\n");
    }
    //读取执行结果
    error = clEnqueueReadBuffer(queue, memObject3, CL_TRUE, 0, resultSize * sizeof(int),
        result, 0, NULL, NULL);
    if (error != CL_SUCCESS) {
        throw("Error reading result buffer!\n");
        throw string("Error reading result buffer!\n");
    }
    //printf("%d %d %d %d \n", result[0], result[1], result[2], result[3]);
@@ -885,7 +888,7 @@
    kernel = clCreateKernel(program, "recognition_plate_money_unit", &error);
    if (kernel == NULL) {
        throw("Couldn't create kernel!\n");
        throw string("Couldn't create kernel!\n");
    }
@@ -897,19 +900,19 @@
    cl_mem memObject1 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(uchar) * inputSize, imgs, &error);
    if (error < 0) {
        throw("Creat memObject1 failed!\n");
        throw string("Creat memObject1 failed!\n");
    }
    cl_mem memObject2 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(int) * lines * 4 * colEleCount, rowIndexs, &error);
    if (error < 0) {
        throw("Creat memObject2 failed!\n");
        throw string("Creat memObject2 failed!\n");
    }
    cl_mem memObject3 = clCreateBuffer(context, CL_MEM_WRITE_ONLY,
        sizeof(int) * resultSize, NULL, &error);
    if (error < 0) {
        throw("Creat memObject3 failed!\n");
        throw string("Creat memObject3 failed!\n");
    }
@@ -920,7 +923,7 @@
    error |= clSetKernelArg(kernel, 3, sizeof(cl_mem), &memObject3);
    if (error != CL_SUCCESS) {
        throw("Error setting kernel arguments!\n");
        throw string("Error setting kernel arguments!\n");
    }
    //执行内核
    size_t globalWorkSize[1] = { resultSize };
@@ -931,14 +934,14 @@
    error = clEnqueueNDRangeKernel(queue, kernel, work_dim, NULL, globalWorkSize,
        localWorkSize, 0, NULL, NULL);
    if (error != CL_SUCCESS) {
        throw("Error queuing kernel for execution!\n");
        throw string("Error queuing kernel for execution!\n");
    }
    //读取执行结果
    error = clEnqueueReadBuffer(queue, memObject3, CL_TRUE, 0, resultSize * sizeof(int),
        result, 0, NULL, NULL);
    if (error != CL_SUCCESS) {
        throw("Error reading result buffer!\n");
        throw string("Error reading result buffer!\n");
    }
    //printf("%d %d %d %d \n", result[0], result[1], result[2], result[3]);
@@ -954,7 +957,7 @@
    kernel = clCreateKernel(program, "rgb2GrayImg", &error);
    if (kernel == NULL) {
        throw("Couldn't create kernel!\n");
        throw string("Couldn't create kernel!\n");
    }
@@ -966,13 +969,13 @@
    cl_mem memObject1 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(uchar) * inputSize, imgs, &error);
    if (error < 0) {
        throw("Creat memObject1 failed!\n");
        throw string("Creat memObject1 failed!\n");
    }
    cl_mem memObject2 = clCreateBuffer(context, CL_MEM_WRITE_ONLY,
        sizeof(uchar) * resultSize, NULL, &error);
    if (error < 0) {
        throw("Creat memObject2 failed!\n");
        throw string("Creat memObject2 failed!\n");
    }
@@ -982,7 +985,7 @@
    error = clSetKernelArg(kernel, 2, sizeof(cl_mem), &memObject2);
    if (error != CL_SUCCESS) {
        throw("Error setting kernel arguments!\n");
        throw string("Error setting kernel arguments!\n");
    }
    //执行内核
    size_t globalWorkSize[1] = { imgHeight };
@@ -993,14 +996,14 @@
    error = clEnqueueNDRangeKernel(queue, kernel, work_dim, NULL, globalWorkSize,
        localWorkSize, 0, NULL, NULL);
    if (error != CL_SUCCESS) {
        throw("Error queuing kernel for execution!\n");
        throw string("Error queuing kernel for execution!\n");
    }
    //读取执行结果
    error = clEnqueueReadBuffer(queue, memObject2, CL_TRUE, 0, resultSize * sizeof(uchar),
        result, 0, NULL, NULL);
    if (error != CL_SUCCESS) {
        throw("Error reading result buffer!\n");
        throw string("Error reading result buffer!\n");
    }
    clReleaseKernel(kernel);
@@ -1015,7 +1018,7 @@
    kernel = clCreateKernel(program, "rgba2GrayImg", &error);
    if (kernel == NULL) {
        throw("Couldn't create kernel!\n");
        throw string("Couldn't create kernel!\n");
    }
@@ -1027,13 +1030,13 @@
    cl_mem memObject1 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(uchar) * inputSize, imgs, &error);
    if (error < 0) {
        throw("Creat memObject1 failed!\n");
        throw string("Creat memObject1 failed!\n");
    }
    cl_mem memObject2 = clCreateBuffer(context, CL_MEM_WRITE_ONLY,
        sizeof(uchar) * resultSize, NULL, &error);
    if (error < 0) {
        throw("Creat memObject2 failed!\n");
        throw string("Creat memObject2 failed!\n");
    }
@@ -1043,7 +1046,7 @@
    error = clSetKernelArg(kernel, 2, sizeof(cl_mem), &memObject2);
    if (error != CL_SUCCESS) {
        throw("Error setting kernel arguments!\n");
        throw string("Error setting kernel arguments!\n");
    }
    //执行内核
    size_t globalWorkSize[1] = { imgHeight };
@@ -1054,14 +1057,14 @@
    error = clEnqueueNDRangeKernel(queue, kernel, work_dim, NULL, globalWorkSize,
        localWorkSize, 0, NULL, NULL);
    if (error != CL_SUCCESS) {
        throw("Error queuing kernel for execution!\n");
        throw string("Error queuing kernel for execution!\n");
    }
    //读取执行结果
    error = clEnqueueReadBuffer(queue, memObject2, CL_TRUE, 0, resultSize * sizeof(uchar),
        result, 0, NULL, NULL);
    if (error != CL_SUCCESS) {
        throw("Error reading result buffer!\n");
        throw string("Error reading result buffer!\n");
    }
    clReleaseKernel(kernel);
@@ -1078,7 +1081,7 @@
    kernel = clCreateKernel(program, "rgb2ThresholdInvert", &error);
    if (kernel == NULL) {
        throw("Couldn't create kernel!\n");
        throw string("Couldn't create kernel!\n");
    }
@@ -1090,13 +1093,13 @@
    cl_mem memObject1 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(uchar) * inputSize, imgs, &error);
    if (error < 0) {
        throw("Creat memObject1 failed!\n");
        throw string("Creat memObject1 failed!\n");
    }
    cl_mem memObject2 = clCreateBuffer(context, CL_MEM_WRITE_ONLY,
        sizeof(uchar) * resultSize, NULL, &error);
    if (error < 0) {
        throw("Creat memObject2 failed!\n");
        throw string("Creat memObject2 failed!\n");
    }
@@ -1106,7 +1109,7 @@
    error = clSetKernelArg(kernel, 2, sizeof(cl_mem), &memObject2);
    if (error != CL_SUCCESS) {
        throw("Error setting kernel arguments!\n");
        throw string("Error setting kernel arguments!\n");
    }
    //执行内核
    size_t globalWorkSize[1] = { imgHeight };
@@ -1117,14 +1120,14 @@
    error = clEnqueueNDRangeKernel(queue, kernel, work_dim, NULL, globalWorkSize,
        localWorkSize, 0, NULL, NULL);
    if (error != CL_SUCCESS) {
        throw("Error queuing kernel for execution!\n");
        throw string("Error queuing kernel for execution!\n");
    }
    //读取执行结果
    error = clEnqueueReadBuffer(queue, memObject2, CL_TRUE, 0, resultSize * sizeof(uchar),
        result, 0, NULL, NULL);
    if (error != CL_SUCCESS) {
        throw("Error reading result buffer!\n");
        throw string("Error reading result buffer!\n");
    }
    clReleaseKernel(kernel);
@@ -1139,7 +1142,7 @@
    kernel = clCreateKernel(program, "rgba2ThresholdInvert", &error);
    if (kernel == NULL) {
        throw("Couldn't create kernel!\n");
        throw string("Couldn't create kernel!\n");
    }
@@ -1151,13 +1154,13 @@
    cl_mem memObject1 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(uchar) * inputSize, imgs, &error);
    if (error < 0) {
        throw("Creat memObject1 failed!\n");
        throw string("Creat memObject1 failed!\n");
    }
    cl_mem memObject2 = clCreateBuffer(context, CL_MEM_WRITE_ONLY,
        sizeof(uchar) * resultSize, NULL, &error);
    if (error < 0) {
        throw("Creat memObject2 failed!\n");
        throw string("Creat memObject2 failed!\n");
    }
@@ -1167,7 +1170,7 @@
    error = clSetKernelArg(kernel, 2, sizeof(cl_mem), &memObject2);
    if (error != CL_SUCCESS) {
        throw("Error setting kernel arguments!\n");
        throw string("Error setting kernel arguments!\n");
    }
    //执行内核
    size_t globalWorkSize[1] = { imgHeight };
@@ -1178,14 +1181,14 @@
    error = clEnqueueNDRangeKernel(queue, kernel, work_dim, NULL, globalWorkSize,
        localWorkSize, 0, NULL, NULL);
    if (error != CL_SUCCESS) {
        throw("Error queuing kernel for execution!\n");
        throw string("Error queuing kernel for execution!\n");
    }
    //读取执行结果
    error = clEnqueueReadBuffer(queue, memObject2, CL_TRUE, 0, resultSize * sizeof(uchar),
        result, 0, NULL, NULL);
    if (error != CL_SUCCESS) {
        throw("Error reading result buffer!\n");
        throw string("Error reading result buffer!\n");
    }
    clReleaseKernel(kernel);
app/JsonUtil.h
@@ -185,6 +185,30 @@
        return toJsonStr(root);
    }
    static  std::string loadLoginData(string account,string pwd) {
        Json::Value root;
        root["type"] = 20;
        Json::Value data;
        data["account"] = account;
        data["pwd"] = pwd;
        root["data"] = data;
        return toJsonStr(root);
    }
    static  std::string loadHeartbeatData(int client) {
        Json::Value root;
        root["type"] = 30;
        Json::Value data;
        data["client"] = client;
        root["data"] = data;
        return toJsonStr(root);
    }
    static  Json::Value parseJson(string data) {
        Json::Value root;
        Json::Reader reader;
@@ -192,6 +216,12 @@
        return root;
    }
    static string jsonValue2String(Json::Value value) {
        Json::FastWriter fastWriter;
        std::string output = fastWriter.write(value);
        return output;
    }
app/SocketManager.cpp
@@ -10,7 +10,10 @@
void* SocketManager::callbackContext;
string SocketManager::ADDR;
SocketManager::SocketManager(ActionCallback callback, void* context) {
    init(callback,context);
}
@@ -103,12 +106,11 @@
}
void SocketManager::init(ActionCallback callback, void* contex) {
    actionCallback = callback;
    callbackContext = contex;
    clientaddr.sin_family = AF_INET;
    clientaddr.sin_port = htons(PORT);
    clientaddr.sin_addr.S_un.S_addr = inet_addr(ADDR);
    clientaddr.sin_addr.S_un.S_addr = inet_addr(ADDR.c_str());
    //建立9个连接,前8个为数据传输通道,后一个为命令传输通道
    sockClients.clear();
    for (int i = 0;i < CHANNEL_NUM;i++)
@@ -199,28 +201,28 @@
}
BOOL SocketManager::sendMsg(const char* msg) {
string SocketManager::sendMsg(const char* msg) {
    WSADATA wsd;
    WSAStartup(MAKEWORD(2, 2), &wsd);
    SOCKET m_SockClient;
    m_SockClient = socket(AF_INET, SOCK_STREAM, 0);
    sockaddr_in clientaddr;
    clientaddr.sin_family = AF_INET;
    clientaddr.sin_port = htons(9001);
    clientaddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
    clientaddr.sin_port = htons(PORT);
    clientaddr.sin_addr.S_un.S_addr = inet_addr(ADDR.c_str());
    connect(m_SockClient, (sockaddr*)&clientaddr, sizeof(clientaddr));
    char buffer[64];
    char buffer[1024];
    int result = send(m_SockClient, msg, strlen(msg), 0);
    if (result < 0) {
        throw string("发送失败");
    }
    int num = recv(m_SockClient, buffer, 64, 0);
    int num = recv(m_SockClient, buffer, 1024, 0);
    closesocket(m_SockClient);
    if (num < 0) {
        throw string("未接收到信息");
    }
    return 1;
    return string(buffer);
}
app/SocketManager.h
@@ -25,8 +25,8 @@
    static SOCKET socketServer;
    static void runSocketServer(void* context);
    static void processMsg(SOCKET  client, void* context);
    const int PORT = 9001;
    const char *ADDR = "127.0.0.1";
    static const int PORT = 9001;
    sockaddr_in clientaddr;
    SOCKET getClient(int p);
    //添加客户端
@@ -36,6 +36,9 @@
    static ActionCallback actionCallback;
public:
    static string ADDR;
    SocketManager(ActionCallback callback,void * context);
    ~SocketManager();
@@ -55,7 +58,7 @@
    BOOL sendMsg(int, const char *);
    static BOOL sendMsg(const char*);
    static string sendMsg(const char*);
};
app/app.aps
Binary files differ
app/app.cpp
@@ -7,6 +7,7 @@
#include "framework.h"
#include "app.h"
#include "appDlg.h"
#include "loginDlg.h"
#pragma comment(lib,"ws2_32.lib")
#include <stdio.h>
#include <stdlib.h>
@@ -76,7 +77,7 @@
    // 例如修改为公司或组织名
    SetRegistryKey(_T("应用程序向导生成的本地应用程序"));
    CappDlg dlg;
    loginDlg dlg;
    m_pMainWnd = &dlg;
    INT_PTR nResponse = dlg.DoModal();
    if (nResponse == IDOK)
app/app.rc
Binary files differ
app/app.vcxproj
@@ -195,6 +195,7 @@
    <ClInclude Include="app.h" />
    <ClInclude Include="BasicExcelVC6.hpp" />
    <ClInclude Include="codesDataDlog.h" />
    <ClInclude Include="common.h" />
    <ClInclude Include="ExcelUtil.h" />
    <ClInclude Include="GUITool.h" />
    <ClInclude Include="JsonUtil.h" />
@@ -211,6 +212,7 @@
    <ClInclude Include="lib_json\include\json\value.h" />
    <ClInclude Include="lib_json\include\json\version.h" />
    <ClInclude Include="lib_json\include\json\writer.h" />
    <ClInclude Include="loginDlg.h" />
    <ClInclude Include="NetWorkUtil.h" />
    <ClInclude Include="pch.h" />
    <ClInclude Include="Resource.h" />
@@ -229,6 +231,7 @@
    <ClCompile Include="json_writer.cpp" />
    <ClCompile Include="level2DataDlg.cpp" />
    <ClCompile Include="appDlg.cpp" />
    <ClCompile Include="loginDlg.cpp" />
    <ClCompile Include="NetWorkUtil.cpp" />
    <ClCompile Include="pch.cpp">
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
app/app.vcxproj.filters
@@ -96,6 +96,12 @@
    <ClInclude Include="codesDataDlog.h">
      <Filter>头文件</Filter>
    </ClInclude>
    <ClInclude Include="loginDlg.h">
      <Filter>头文件</Filter>
    </ClInclude>
    <ClInclude Include="common.h">
      <Filter>头文件</Filter>
    </ClInclude>
  </ItemGroup>
  <ItemGroup>
    <ClCompile Include="app.cpp">
@@ -137,6 +143,9 @@
    <ClCompile Include="codesDataDlog.cpp">
      <Filter>源文件</Filter>
    </ClCompile>
    <ClCompile Include="loginDlg.cpp">
      <Filter>源文件</Filter>
    </ClCompile>
  </ItemGroup>
  <ItemGroup>
    <ResourceCompile Include="app.rc">
app/appDlg.cpp
@@ -12,7 +12,10 @@
#include "THSActionUtil.h"
#include "NetWorkUtil.h"
#include "GUITool.h"
#ifndef _TOOL_H
#define _TOOL_H 1
#include "tool.h"
#endif
#include "JsonUtil.h"
@@ -63,10 +66,14 @@
// CappDlg 对话框
RecognitionManager* CappDlg::recognitionManager;
set<Authority> CappDlg::authoritySet;
//客户端编号
int CappDlg::clientNum;
CappDlg::CappDlg(CWnd* pParent /*=nullptr*/)
    : CDialogEx(IDD_APP_DIALOG, pParent)
{
    loginWin = pParent;
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    socketManager = new SocketManager(CappDlg::OnActionCallback, this);
@@ -86,6 +93,8 @@
    DDX_Control(pDX, IDC_BUTTON12, limitUpBtn);
    DDX_Control(pDX, IDC_BUTTON_TRADE, tradeBtn);
    DDX_Control(pDX, IDC_INDUSTRY, industryBtn);
    DDX_Control(pDX, IDC_BUTTON5, btnL2);
    DDX_Control(pDX, IDC_BUTTON8, uploadGPBtn);
}
BEGIN_MESSAGE_MAP(CappDlg, CDialogEx)
@@ -137,14 +146,52 @@
    SetIcon(m_hIcon, TRUE);            // 设置大图标
    SetIcon(m_hIcon, FALSE);        // 设置小图标
    // TODO: 在此添加额外的初始化代码
    // 默认选中
    ((CButton*)GetDlgItem(IDC_CHECK1))->SetCheck(TRUE);
    ((CButton*)GetDlgItem(IDC_CHECK2))->SetCheck(TRUE);
    ((CButton*)GetDlgItem(IDC_CHECK3))->SetCheck(TRUE);
    if (authoritySet.count(AUTHORITY_L2) > 0) {
        btnL2.EnableWindow(TRUE);
    }
    else {
        btnL2.EnableWindow(FALSE);
    }
    if (authoritySet.count(AUTHORITY_LIMIT_UP) > 0) {
        limitUpBtn.EnableWindow(TRUE);
    }
    else {
        limitUpBtn.EnableWindow(FALSE);
    }
    if (authoritySet.count(AUTHORITY_TRADE_SUCCESS) > 0) {
        tradeBtn.EnableWindow(TRUE);
    }
    else {
        tradeBtn.EnableWindow(FALSE);
    }
    if (authoritySet.count(AUTHORITY_THS_INDUSTRY) > 0) {
        industryBtn.EnableWindow(TRUE);
    }else{
        industryBtn.EnableWindow(FALSE);
    }
    if (authoritySet.count(AUTHORITY_UPLOAD_CODE) > 0) {
        uploadGPBtn.EnableWindow(TRUE);
    }
    else {
        uploadGPBtn.EnableWindow(FALSE);
    }
    CString st;
    char ip[32];
    NetWorkUtil::get_localhost_ip(ip);
    CString ipStr(ip);
    CString idStr(to_string( clientNum).c_str());
    st.Format(_T("本机IP:%s"), ipStr);
    st.Format(_T("客户端ID:%s"), idStr);
    GetDlgItem(IDC_STATIC3)->SetWindowTextW(st);
    if (!capture->isInited())
@@ -155,6 +202,14 @@
        catch (string st) {
        }
    }
    //loginWin->DestroyWindow();
    //隐藏父窗口
    loginWin->ShowWindow(SW_HIDE);
    //启动心跳
    thread rt(&(CappDlg::onHeartbeat));
    rt.detach();
    return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}
@@ -221,7 +276,7 @@
    CButton* btn = (CButton*)app->GetDlgItem(IDC_CHECK1);
    bool check = btn->GetCheck();
    if (check) {
        string data = JsonUtil::loadL2Data(0, index, code, dataList);
        string data = JsonUtil::loadL2Data(app->clientNum, index, code, dataList);
        clock_t time_start = clock();
        try {
            app->socketManager->sendMsg(index, data.c_str());
@@ -242,7 +297,7 @@
    CButton* btn = (CButton*)app->GetDlgItem(IDC_CHECK1);
    bool check = btn->GetCheck();
    if (check) {
        string data = JsonUtil::loadTradeQueueData(0, index, code, numList);
        string data = JsonUtil::loadTradeQueueData(app->clientNum, index, code, numList);
        clock_t time_start = clock();
        try {
            app->socketManager->sendMsg(index, data.c_str());
@@ -382,6 +437,24 @@
    return true;
}
//心跳信号
void  CappDlg::onHeartbeat() {
    //5s一次心跳
    while (true)
    {
        try {
            string msg = JsonUtil::loadHeartbeatData(clientNum);
            SocketManager::sendMsg(msg.c_str());
            cout << "心跳信号" << endl;
        }
        catch (...) {
            cout << "心跳信号异常" << endl;
        }
        Sleep(5000);
    }
}
void CappDlg::OnBnClickedButton1()
@@ -486,7 +559,7 @@
    clock_t time = clock();
    CString path = GUITool::selectImage();
std:string p = cstring2String(path);
std:string p = Tool::cstring2String(path);
    if (p.length() <= 0) {
        return;
    }
@@ -515,7 +588,7 @@
    clock_t time = clock();
    CString path = GUITool::selectImage();
std:string p = cstring2String(path);
    std:string p = Tool::cstring2String(path);
    if (p.length() <= 0) {
        return;
    }
@@ -621,7 +694,7 @@
    for (list<CString>::iterator ele = paths.begin();ele != paths.end();ele++) {
        CString path = *ele;
    std:string p = cstring2String(path);
    std:string p = Tool::cstring2String(path);
        std::list<string> resultList = THSActionUtil::recognitionGPCode(cv::imread(p), recognitionManager);
        for (std::list<string>::iterator ele1 = resultList.begin();ele1 != resultList.end();ele1++) {
            bool contains = false;
@@ -662,7 +735,7 @@
    for (list<CString>::iterator ele = paths.begin();ele != paths.end();ele++) {
        CString path = *ele;
    std:string p = cstring2String(path);
    std:string p = Tool::cstring2String(path);
        std::list<string> resultList = THSActionUtil::recognitionGPCode(cv::imread(p), recognitionManager);
        for (std::list<string>::iterator ele1 = resultList.begin();ele1 != resultList.end();ele1++) {
            bool contains = false;
app/appDlg.h
@@ -13,6 +13,11 @@
#include "pthread.h"
#pragma comment(lib, "pthreadVC2.lib")
 
#ifndef _COMMON_H
#define _COMMON_H 1
#include "common.h"
#endif // !_TOOL_H
@@ -43,10 +48,20 @@
    pthread_t industryPid = pthread_t({ 0,0 });
    CWnd* loginWin;
    static void  onHeartbeat();
// 构造
public:
    CappDlg(CWnd* pParent = nullptr);    // 标准构造函数
    static set<Authority> authoritySet;
    //客户端编号
    static int clientNum;
// 对话框数据
#ifdef AFX_DESIGN_TIME
@@ -88,4 +103,6 @@
    afx_msg void OnBnClickedButtonTrade();
    afx_msg void OnBnClickedIndustry();
    CButton industryBtn;
    CButton btnL2;
    CButton uploadGPBtn;
};
app/codesDataDlog.cpp
@@ -108,13 +108,17 @@
        return;
    }
    bool
        result = SocketManager::sendMsg(JsonUtil::loadGPCodeData(codeData).c_str());
    if (result) {
    try {
        SocketManager::sendMsg(JsonUtil::loadGPCodeData(codeData).c_str());
        AfxMessageBox(_T("上传成功"));
    }
    else {
    catch (...)
    {
        AfxMessageBox(_T("上传失败"));
    }
app/common.h
New file
@@ -0,0 +1,11 @@
#pragma once
enum Authority
{
    AUTHORITY_L2,
    AUTHORITY_LIMIT_UP,
    AUTHORITY_THS_INDUSTRY,
    AUTHORITY_TRADE_SUCCESS,
    AUTHORITY_TRADE_DELEGATE,
    AUTHORITY_UPLOAD_CODE
};
app/loginDlg.cpp
New file
@@ -0,0 +1,126 @@
// loginDlg.cpp: 实现文件
//
#include "pch.h"
#include "app.h"
#include "loginDlg.h"
#include "appDlg.h"
#include "afxdialogex.h"
#ifndef _TOOL_H
#define _TOOL_H 1
#include "tool.h"
#endif // !_TOOL_H
#ifndef _COMMON_H
#define _COMMON_H 1
#include "common.h"
#endif // !_TOOL_H
#include "JsonUtil.h"
// loginDlg 对话框
IMPLEMENT_DYNAMIC(loginDlg, CDialogEx)
loginDlg::loginDlg(CWnd* pParent /*=nullptr*/)
    : CDialogEx(IDD_LOGIN, pParent)
{
}
loginDlg::~loginDlg()
{
}
void loginDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_EDIT_HOST, editHost);
    DDX_Control(pDX, IDC_EDIT_ACCOUNT, editAccount);
    DDX_Control(pDX, IDC_EDIT_PWD, editPwd);
}
BEGIN_MESSAGE_MAP(loginDlg, CDialogEx)
    ON_BN_CLICKED(IDC_BUTTON_LOGIN, &loginDlg::OnBnClickedButtonLogin)
END_MESSAGE_MAP()
// loginDlg 消息处理程序
void loginDlg::OnBnClickedButtonLogin()
{
    CString host;
    editHost.GetWindowText(host);
    CString account;
    editAccount.GetWindowText(account);
    CString pwd;
    editPwd.GetWindowText(pwd);
    string host_str = Tool::cstring2String(host);
    string account_str = Tool::cstring2String(account);
    string pwd_str = Tool::cstring2String(pwd);
    SocketManager::ADDR = host_str;
    string data = JsonUtil::loadLoginData(account_str, pwd_str);
    try {
        string result = SocketManager::sendMsg(data.c_str());
        Json::Value resultJson = JsonUtil::parseJson(result);
        if (resultJson["code"].asInt() != 0) {
            Json::FastWriter fastWriter;
            std::string msg_str = fastWriter.write(resultJson["msg"]);
            cout << msg_str << endl;
            CString msg;
            Tool::UnicodeToChinese(msg_str,msg);
            AfxMessageBox(msg);
            return;
        }
        //客户端编号
        CappDlg::clientNum=resultJson["data"]["client"].asInt();
        //解析权限参数
        Json::Value authoritys= resultJson["data"]["authoritys"];
        authoritys.size();
        set<Authority> alist;
        for (int i = 0;i < authoritys.size();i++) {
            string authority =    authoritys[i].asString();
            if (authority._Equal("l2")) {
                alist.insert(AUTHORITY_L2);
            }
            else if (authority._Equal("limit_up")) {
                alist.insert(AUTHORITY_LIMIT_UP);
            }
            else if (authority._Equal("industry")) {
                alist.insert(AUTHORITY_THS_INDUSTRY);
            }
            else if (authority._Equal("trade_success")) {
                alist.insert(AUTHORITY_TRADE_SUCCESS);
            }
            else if (authority._Equal("trade_delegate")) {
                alist.insert(AUTHORITY_TRADE_DELEGATE);
            }
        }
        //赋值权限
        CappDlg::authoritySet = alist;
        CappDlg dlg(this);
        dlg.DoModal();
    }
    catch (string st) {
        CString msg(st.c_str());
        AfxMessageBox(msg);
        return;
    }
    catch (...) {
        AfxMessageBox(_T("未知错误"));
        return;
    }
}
app/loginDlg.h
New file
@@ -0,0 +1,31 @@
#pragma once
#include "SocketManager.h"
// loginDlg 对话框
class loginDlg : public CDialogEx
{
    DECLARE_DYNAMIC(loginDlg)
private:
    SocketManager* socketManager;
public:
    loginDlg(CWnd* pParent = nullptr);   // 标准构造函数
    virtual ~loginDlg();
// 对话框数据
#ifdef AFX_DESIGN_TIME
    enum { IDD = IDD_LOGIN };
#endif
protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
    DECLARE_MESSAGE_MAP()
public:
    CEdit editHost;
    CEdit editAccount;
    CEdit editPwd;
    afx_msg void OnBnClickedButtonLogin();
};
app/resource.h
@@ -10,6 +10,7 @@
#define IDR_MAINFRAME                   128
#define IDD_LEVEL2_DATA                 130
#define IDD_CODE_DATA                   132
#define IDD_LOGIN                       134
#define IDC_BUTTON4                     1004
#define IDC_BUTTON5                     1005
#define IDC_BUTTON6                     1006
@@ -19,6 +20,7 @@
#define IDC_CHECK1                      1010
#define IDC_BUTTON10                    1011
#define IDC_LIST1                       1012
#define IDC_BUTTON11                    1012
#define IDC_BUTTON1                     1013
#define IDC_BUTTON20                    1014
#define IDC_STATIC3                     1016
@@ -28,14 +30,18 @@
#define IDC_BUTTON_TRADE                1022
#define IDC_CHECK3                      1023
#define IDC_INDUSTRY                    1024
#define IDC_EDIT_HOST                   1025
#define IDC_EDIT_PWD                    1026
#define IDC_EDIT_ACCOUNT                1027
#define IDC_BUTTON_LOGIN                1028
// Next default values for new objects
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        134
#define _APS_NEXT_RESOURCE_VALUE        136
#define _APS_NEXT_COMMAND_VALUE         32771
#define _APS_NEXT_CONTROL_VALUE         1025
#define _APS_NEXT_CONTROL_VALUE         1029
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif
app/tool.h
@@ -2,10 +2,57 @@
#include <tchar.h>
#include <string>
#include <stringapiset.h>
std::string cstring2String(CString getbuf) {
class Tool {
public:
    static std::string cstring2String(CString getbuf) {
    int iLen = WideCharToMultiByte(CP_ACP, 0, getbuf, -1, NULL, 0, NULL, NULL);   //首先计算TCHAR 长度。
    char* chRtn = new char[iLen * sizeof(char)];  //定义一个 TCHAR 长度大小的 CHAR 类型。
    WideCharToMultiByte(CP_ACP, 0, getbuf, -1, chRtn, iLen, NULL, NULL);  //将TCHAR 类型的数据转换为 CHAR 类型。
    std::string str(chRtn);
    return str;
}
    static bool UnicodeToChinese(string str, CString& cstr)
    {
        int i = 0;
        int j = 0;
        int len = 0;
        len = str.length();
        if (len <= 0)
        {
            return false;
        }
        int nValue = 0;
        WCHAR* pWchar;
        wchar_t* szHex;
        char strchar[6] = { '0','x','\0' };
        for (i = 0; i < len; i++)
        {
            if (str[i] == 'u')
            {
                for (j = 2; j < 6; j++)
                {
                    i++;
                    strchar[j] = str[i];
                }
                USES_CONVERSION;
                szHex = A2W(strchar);
                StrToIntExW(szHex, STIF_SUPPORT_HEX, &nValue);
                pWchar = (WCHAR*)&nValue;
                cstr = cstr + pWchar;
            }
        }
        return true;
    }
};