码蚁0817班级,AI项目,脸谱,双团队架构,赛马机制
mxlll
2024-12-04 e705b0c3fdcfa03750e76002c818752673248471
B组上传文档
45个文件已添加
853 ■■■■■ 已修改文件
GroupB_马喜龙/Public/脸谱-概要设计说明书-B组.docx 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Public/脸谱-编码规范-B组.docx 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Public/脸谱-项目计划表-B组.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Public/脸谱-项目需求分析文档-B组.docx 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Public/脸谱-风险控制表-B组.docx 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/.vs/face_painting_socket_server/FileContentIndex/0f36a5f3-16e4-43e9-8b01-91facf30ad67.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/.vs/face_painting_socket_server/FileContentIndex/292fbaed-2908-494e-9da6-32c17aaae008.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/.vs/face_painting_socket_server/FileContentIndex/44fcb5db-4726-4552-8454-80131619f38b.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/.vs/face_painting_socket_server/FileContentIndex/61738b34-0458-4dcc-870a-07f958f30254.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/.vs/face_painting_socket_server/FileContentIndex/b523c71f-2e5c-4278-94ad-475bd1d970a6.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/.vs/face_painting_socket_server/v17/.suo 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/.vs/face_painting_socket_server/v17/Browse.VC.db 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/.vs/face_painting_socket_server/v17/DocumentLayout.backup.json 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/.vs/face_painting_socket_server/v17/DocumentLayout.json 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/.vs/face_painting_socket_server/v17/ipch/AutoPCH/53426ba0dcedd854/THREADPOOL.ipch 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/.vs/face_painting_socket_server/v17/ipch/AutoPCH/5e720285f8aad314/THREADPOOL.ipch 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/.vs/face_painting_socket_server/v17/ipch/AutoPCH/605366ea4eaf14a1/SERVERSOCKET.ipch 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/.vs/face_painting_socket_server/v17/ipch/AutoPCH/e34a6de8ea9c1aba/MAIN.ipch 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/ServerSocket.cpp 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/ServerSocket.h 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/ThreadPool.hpp 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/ServerSocket.obj 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/ThreadPool.obj 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/face_pai.8f47ef20.tlog/CL.command.1.tlog 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/face_pai.8f47ef20.tlog/CL.read.1.tlog 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/face_pai.8f47ef20.tlog/CL.write.1.tlog 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/face_pai.8f47ef20.tlog/Cl.items.tlog 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/face_pai.8f47ef20.tlog/face_painting_socket_server.lastbuildstate 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/face_pai.8f47ef20.tlog/link.command.1.tlog 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/face_pai.8f47ef20.tlog/link.read.1.tlog 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/face_pai.8f47ef20.tlog/link.secondary.1.tlog 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/face_pai.8f47ef20.tlog/link.write.1.tlog 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/face_painting_socket_server.exe.recipe 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/face_painting_socket_server.ilk 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/face_painting_socket_server.log 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/main.obj 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/vc143.idb 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/vc143.pdb 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/face_painting_socket_server.sln 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/face_painting_socket_server.vcxproj 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/face_painting_socket_server.vcxproj.filters 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/face_painting_socket_server.vcxproj.user 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/main.cpp 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/x64/Debug/face_painting_socket_server.exe 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_马喜龙/Server/马喜龙/code/face_painting_socket_server/x64/Debug/face_painting_socket_server.pdb 补丁 | 查看 | 原始文档 | blame | 历史
GroupB_ÂíϲÁú/Public/Á³Æ×-¸ÅÒªÉè¼ÆËµÃ÷Êé-B×é.docx
Binary files differ
GroupB_ÂíϲÁú/Public/Á³Æ×-±àÂë¹æ·¶-B×é.docx
Binary files differ
GroupB_ÂíϲÁú/Public/Á³Æ×-ÏîÄ¿¼Æ»®±í-B×é.xlsx
Binary files differ
GroupB_ÂíϲÁú/Public/Á³Æ×-ÏîÄ¿ÐèÇó·ÖÎöÎĵµ-B×é.docx
Binary files differ
GroupB_ÂíϲÁú/Public/Á³Æ×-·çÏÕ¿ØÖƱí-B×é.docx
Binary files differ
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/.vs/face_painting_socket_server/FileContentIndex/0f36a5f3-16e4-43e9-8b01-91facf30ad67.vsidx
Binary files differ
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/.vs/face_painting_socket_server/FileContentIndex/292fbaed-2908-494e-9da6-32c17aaae008.vsidx
Binary files differ
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/.vs/face_painting_socket_server/FileContentIndex/44fcb5db-4726-4552-8454-80131619f38b.vsidx
Binary files differ
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/.vs/face_painting_socket_server/FileContentIndex/61738b34-0458-4dcc-870a-07f958f30254.vsidx
Binary files differ
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/.vs/face_painting_socket_server/FileContentIndex/b523c71f-2e5c-4278-94ad-475bd1d970a6.vsidx
Binary files differ
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/.vs/face_painting_socket_server/v17/.suo
Binary files differ
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/.vs/face_painting_socket_server/v17/Browse.VC.db
Binary files differ
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/.vs/face_painting_socket_server/v17/DocumentLayout.backup.json
New file
@@ -0,0 +1,92 @@
{
  "Version": 1,
  "WorkspaceRootPath": "D:\\Projects\\\u8138\u8C31AI_0817_1202\\GroupB_\u9A6C\u559C\u9F99\\Server\\\u9A6C\u559C\u9F99\\code\\face_painting_socket_server\\",
  "Documents": [
    {
      "AbsoluteMoniker": "D:0:0:{8F47EF20-7DBA-475C-ABA7-C468E46049F2}|face_painting_socket_server.vcxproj|D:\\Projects\\\u8138\u8C31AI_0817_1202\\GroupB_\u9A6C\u559C\u9F99\\Server\\\u9A6C\u559C\u9F99\\code\\face_painting_socket_server\\main.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
      "RelativeMoniker": "D:0:0:{8F47EF20-7DBA-475C-ABA7-C468E46049F2}|face_painting_socket_server.vcxproj|solutionrelative:main.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{8F47EF20-7DBA-475C-ABA7-C468E46049F2}|face_painting_socket_server.vcxproj|D:\\Projects\\\u8138\u8C31AI_0817_1202\\GroupB_\u9A6C\u559C\u9F99\\Server\\\u9A6C\u559C\u9F99\\code\\face_painting_socket_server\\ServerSocket.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
      "RelativeMoniker": "D:0:0:{8F47EF20-7DBA-475C-ABA7-C468E46049F2}|face_painting_socket_server.vcxproj|solutionrelative:ServerSocket.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{8F47EF20-7DBA-475C-ABA7-C468E46049F2}|face_painting_socket_server.vcxproj|D:\\Projects\\\u8138\u8C31AI_0817_1202\\GroupB_\u9A6C\u559C\u9F99\\Server\\\u9A6C\u559C\u9F99\\code\\face_painting_socket_server\\ServerSocket.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
      "RelativeMoniker": "D:0:0:{8F47EF20-7DBA-475C-ABA7-C468E46049F2}|face_painting_socket_server.vcxproj|solutionrelative:ServerSocket.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{8F47EF20-7DBA-475C-ABA7-C468E46049F2}|face_painting_socket_server.vcxproj|D:\\Projects\\\u8138\u8C31AI_0817_1202\\GroupB_\u9A6C\u559C\u9F99\\Server\\\u9A6C\u559C\u9F99\\code\\face_painting_socket_server\\ThreadPool.hpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
      "RelativeMoniker": "D:0:0:{8F47EF20-7DBA-475C-ABA7-C468E46049F2}|face_painting_socket_server.vcxproj|solutionrelative:ThreadPool.hpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
    }
  ],
  "DocumentGroupContainers": [
    {
      "Orientation": 0,
      "VerticalTabListWidth": 256,
      "DocumentGroups": [
        {
          "DockedWidth": 200,
          "SelectedChildIndex": 4,
          "Children": [
            {
              "$type": "Document",
              "DocumentIndex": 3,
              "Title": "ThreadPool.hpp",
              "DocumentMoniker": "D:\\Projects\\\u8138\u8C31AI_0817_1202\\GroupB_\u9A6C\u559C\u9F99\\Server\\\u9A6C\u559C\u9F99\\code\\face_painting_socket_server\\ThreadPool.hpp",
              "RelativeDocumentMoniker": "ThreadPool.hpp",
              "ToolTip": "D:\\Projects\\\u8138\u8C31AI_0817_1202\\GroupB_\u9A6C\u559C\u9F99\\Server\\\u9A6C\u559C\u9F99\\code\\face_painting_socket_server\\ThreadPool.hpp",
              "RelativeToolTip": "ThreadPool.hpp",
              "ViewState": "AgIAAEgAAAAAAAAAAAAAAHwAAAAHAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|",
              "WhenOpened": "2024-12-03T08:00:02.445Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 2,
              "Title": "ServerSocket.cpp",
              "DocumentMoniker": "D:\\Projects\\\u8138\u8C31AI_0817_1202\\GroupB_\u9A6C\u559C\u9F99\\Server\\\u9A6C\u559C\u9F99\\code\\face_painting_socket_server\\ServerSocket.cpp",
              "RelativeDocumentMoniker": "ServerSocket.cpp",
              "ToolTip": "D:\\Projects\\\u8138\u8C31AI_0817_1202\\GroupB_\u9A6C\u559C\u9F99\\Server\\\u9A6C\u559C\u9F99\\code\\face_painting_socket_server\\ServerSocket.cpp",
              "RelativeToolTip": "ServerSocket.cpp",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAADUAAAAhAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|",
              "WhenOpened": "2024-12-03T07:50:45.024Z",
              "EditorCaption": ""
            },
            {
              "$type": "Bookmark",
              "Name": "ST:0:0:{aa2115a1-9712-457b-9047-dbb71ca2cdd2}"
            },
            {
              "$type": "Document",
              "DocumentIndex": 1,
              "Title": "ServerSocket.h",
              "DocumentMoniker": "D:\\Projects\\\u8138\u8C31AI_0817_1202\\GroupB_\u9A6C\u559C\u9F99\\Server\\\u9A6C\u559C\u9F99\\code\\face_painting_socket_server\\ServerSocket.h",
              "RelativeDocumentMoniker": "ServerSocket.h",
              "ToolTip": "D:\\Projects\\\u8138\u8C31AI_0817_1202\\GroupB_\u9A6C\u559C\u9F99\\Server\\\u9A6C\u559C\u9F99\\code\\face_painting_socket_server\\ServerSocket.h",
              "RelativeToolTip": "ServerSocket.h",
              "ViewState": "AgIAAAYAAAAAAAAAAAAAABkAAAAhAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|",
              "WhenOpened": "2024-12-03T07:35:14.221Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 0,
              "Title": "main.cpp",
              "DocumentMoniker": "D:\\Projects\\\u8138\u8C31AI_0817_1202\\GroupB_\u9A6C\u559C\u9F99\\Server\\\u9A6C\u559C\u9F99\\code\\face_painting_socket_server\\main.cpp",
              "RelativeDocumentMoniker": "main.cpp",
              "ToolTip": "D:\\Projects\\\u8138\u8C31AI_0817_1202\\GroupB_\u9A6C\u559C\u9F99\\Server\\\u9A6C\u559C\u9F99\\code\\face_painting_socket_server\\main.cpp",
              "RelativeToolTip": "main.cpp",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAsAAAABAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|",
              "WhenOpened": "2024-12-03T04:25:22.535Z",
              "EditorCaption": ""
            }
          ]
        }
      ]
    }
  ]
}
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/.vs/face_painting_socket_server/v17/DocumentLayout.json
New file
@@ -0,0 +1,92 @@
{
  "Version": 1,
  "WorkspaceRootPath": "D:\\Projects\\\u8138\u8C31AI_0817_1202\\GroupB_\u9A6C\u559C\u9F99\\Server\\\u9A6C\u559C\u9F99\\code\\face_painting_socket_server\\",
  "Documents": [
    {
      "AbsoluteMoniker": "D:0:0:{8F47EF20-7DBA-475C-ABA7-C468E46049F2}|face_painting_socket_server.vcxproj|D:\\Projects\\\u8138\u8C31AI_0817_1202\\GroupB_\u9A6C\u559C\u9F99\\Server\\\u9A6C\u559C\u9F99\\code\\face_painting_socket_server\\ServerSocket.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
      "RelativeMoniker": "D:0:0:{8F47EF20-7DBA-475C-ABA7-C468E46049F2}|face_painting_socket_server.vcxproj|solutionrelative:ServerSocket.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{8F47EF20-7DBA-475C-ABA7-C468E46049F2}|face_painting_socket_server.vcxproj|D:\\Projects\\\u8138\u8C31AI_0817_1202\\GroupB_\u9A6C\u559C\u9F99\\Server\\\u9A6C\u559C\u9F99\\code\\face_painting_socket_server\\ServerSocket.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
      "RelativeMoniker": "D:0:0:{8F47EF20-7DBA-475C-ABA7-C468E46049F2}|face_painting_socket_server.vcxproj|solutionrelative:ServerSocket.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{8F47EF20-7DBA-475C-ABA7-C468E46049F2}|face_painting_socket_server.vcxproj|D:\\Projects\\\u8138\u8C31AI_0817_1202\\GroupB_\u9A6C\u559C\u9F99\\Server\\\u9A6C\u559C\u9F99\\code\\face_painting_socket_server\\ThreadPool.hpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
      "RelativeMoniker": "D:0:0:{8F47EF20-7DBA-475C-ABA7-C468E46049F2}|face_painting_socket_server.vcxproj|solutionrelative:ThreadPool.hpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{8F47EF20-7DBA-475C-ABA7-C468E46049F2}|face_painting_socket_server.vcxproj|D:\\Projects\\\u8138\u8C31AI_0817_1202\\GroupB_\u9A6C\u559C\u9F99\\Server\\\u9A6C\u559C\u9F99\\code\\face_painting_socket_server\\main.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}",
      "RelativeMoniker": "D:0:0:{8F47EF20-7DBA-475C-ABA7-C468E46049F2}|face_painting_socket_server.vcxproj|solutionrelative:main.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}"
    }
  ],
  "DocumentGroupContainers": [
    {
      "Orientation": 0,
      "VerticalTabListWidth": 256,
      "DocumentGroups": [
        {
          "DockedWidth": 200,
          "SelectedChildIndex": 1,
          "Children": [
            {
              "$type": "Document",
              "DocumentIndex": 2,
              "Title": "ThreadPool.hpp",
              "DocumentMoniker": "D:\\Projects\\\u8138\u8C31AI_0817_1202\\GroupB_\u9A6C\u559C\u9F99\\Server\\\u9A6C\u559C\u9F99\\code\\face_painting_socket_server\\ThreadPool.hpp",
              "RelativeDocumentMoniker": "ThreadPool.hpp",
              "ToolTip": "D:\\Projects\\\u8138\u8C31AI_0817_1202\\GroupB_\u9A6C\u559C\u9F99\\Server\\\u9A6C\u559C\u9F99\\code\\face_painting_socket_server\\ThreadPool.hpp",
              "RelativeToolTip": "ThreadPool.hpp",
              "ViewState": "AgIAAEgAAAAAAAAAAAAAAHwAAAAHAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|",
              "WhenOpened": "2024-12-03T08:00:02.445Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 0,
              "Title": "ServerSocket.cpp",
              "DocumentMoniker": "D:\\Projects\\\u8138\u8C31AI_0817_1202\\GroupB_\u9A6C\u559C\u9F99\\Server\\\u9A6C\u559C\u9F99\\code\\face_painting_socket_server\\ServerSocket.cpp",
              "RelativeDocumentMoniker": "ServerSocket.cpp",
              "ToolTip": "D:\\Projects\\\u8138\u8C31AI_0817_1202\\GroupB_\u9A6C\u559C\u9F99\\Server\\\u9A6C\u559C\u9F99\\code\\face_painting_socket_server\\ServerSocket.cpp",
              "RelativeToolTip": "ServerSocket.cpp",
              "ViewState": "AgIAABsAAAAAAAAAAAAAADIAAAAQAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|",
              "WhenOpened": "2024-12-03T07:50:45.024Z",
              "EditorCaption": ""
            },
            {
              "$type": "Bookmark",
              "Name": "ST:0:0:{aa2115a1-9712-457b-9047-dbb71ca2cdd2}"
            },
            {
              "$type": "Document",
              "DocumentIndex": 1,
              "Title": "ServerSocket.h",
              "DocumentMoniker": "D:\\Projects\\\u8138\u8C31AI_0817_1202\\GroupB_\u9A6C\u559C\u9F99\\Server\\\u9A6C\u559C\u9F99\\code\\face_painting_socket_server\\ServerSocket.h",
              "RelativeDocumentMoniker": "ServerSocket.h",
              "ToolTip": "D:\\Projects\\\u8138\u8C31AI_0817_1202\\GroupB_\u9A6C\u559C\u9F99\\Server\\\u9A6C\u559C\u9F99\\code\\face_painting_socket_server\\ServerSocket.h",
              "RelativeToolTip": "ServerSocket.h",
              "ViewState": "AgIAACEAAAAAAAAAAAAAADgAAAAQAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|",
              "WhenOpened": "2024-12-03T07:35:14.221Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 3,
              "Title": "main.cpp",
              "DocumentMoniker": "D:\\Projects\\\u8138\u8C31AI_0817_1202\\GroupB_\u9A6C\u559C\u9F99\\Server\\\u9A6C\u559C\u9F99\\code\\face_painting_socket_server\\main.cpp",
              "RelativeDocumentMoniker": "main.cpp",
              "ToolTip": "D:\\Projects\\\u8138\u8C31AI_0817_1202\\GroupB_\u9A6C\u559C\u9F99\\Server\\\u9A6C\u559C\u9F99\\code\\face_painting_socket_server\\main.cpp",
              "RelativeToolTip": "main.cpp",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAABsAAAAWAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|",
              "WhenOpened": "2024-12-03T04:25:22.535Z",
              "EditorCaption": ""
            }
          ]
        }
      ]
    }
  ]
}
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/.vs/face_painting_socket_server/v17/ipch/AutoPCH/53426ba0dcedd854/THREADPOOL.ipch
Binary files differ
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/.vs/face_painting_socket_server/v17/ipch/AutoPCH/5e720285f8aad314/THREADPOOL.ipch
Binary files differ
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/.vs/face_painting_socket_server/v17/ipch/AutoPCH/605366ea4eaf14a1/SERVERSOCKET.ipch
Binary files differ
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/.vs/face_painting_socket_server/v17/ipch/AutoPCH/e34a6de8ea9c1aba/MAIN.ipch
Binary files differ
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/ServerSocket.cpp
New file
@@ -0,0 +1,187 @@
#include "ServerSocket.h"
ServerSocket::ServerSocket()
{
    if (initSocket()) cout << "Socket init successed!" << endl;
    else cout << "Socket init failed!" << endl;
}
ServerSocket::~ServerSocket()
{
    closesocket(m_server);
    WSACleanup();
}
bool ServerSocket::initSocket()
{
    WSAData wsa;
    int val = WSAStartup(MAKEWORD(2, 2), &wsa);
    if (val != 0)
    {
        cout << "WSAStartup failed!"<<endl;
    }
    m_server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    SOCKADDR_IN addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(PORT); //处理大小端
    addr.sin_addr.S_un.S_addr = 0;
    int ret_bind = bind(m_server, (sockaddr*)&addr, sizeof(addr));
    if (ret_bind) {
        cout << "bind fail:" << WSAGetLastError() << endl;
        return false;
    }
    int ret_listen = listen(m_server, 5);
    if (ret_listen) {
        cout << "listen fail:" << WSAGetLastError() << endl;
        return false;
    }
    thread accept_thread(&ServerSocket::acceptThread, this);
    accept_thread.detach(); // é˜²æ­¢å¼‚常结束
    thread mMap_Delete(&ServerSocket::mMapDelete, this);
    mMap_Delete.detach();
    return true;
}
void ServerSocket::acceptThread()
{
    while (true) {
        SOCKET client;
        SOCKADDR_IN addr;
        int len = sizeof(addr);
        cout << "waiting for connect..." << endl;
        client = accept(m_server, (sockaddr*)&addr, &len);
        cout << "client:" << client << endl;
        if (client == SOCKET_ERROR) {
            cout << "socket å¼‚常" << WSAGetLastError() << endl;
            break;
        }
        else if (client == 0) {
            cout << "socket å·²å…³é—­:" << WSAGetLastError() << endl;
            break;
        }
        // æ­£å¸¸ è¿žä¸Šäº†
        // å¯åŠ¨é•¿è¿žæŽ¥çº¿ç¨‹ï¼Œè¿›è¡Œäº¤äº’
        mMapInsert(client);
        thread heart_check(&ServerSocket::heartBeatThread, this, client);
        heart_check.detach();
        thread recv_send(&ServerSocket::recvAndSendThread, this, client);
        recv_send.detach();
    }
}
void ServerSocket::recvAndSendThread(SOCKET client)
{
    while (true)
    {
        // è§£å†³ç²˜åŒ…问题,顺带也解决了拆包问题
        char* buffer = new char[sizeof(Head)];
        int len_recv = recv(client, buffer, sizeof(Head), 0);
        int head_rest = sizeof(Head) - len_recv; // å‰©ä½™é•¿åº¦
        while (head_rest > 0) {  // ä¿è¯æ•°æ®å¤´èƒ½å¤Ÿå…¨æ”¶åˆ°
            len_recv = recv(client, buffer + (sizeof(Head) - head_rest), head_rest, 0);
            head_rest -= len_recv;
        }
        Head* head = (Head*)buffer; // è½¬æˆå¯¹åº”结构体,再取出封包总长度
        int len_total = head->len;
        //int len_total = *(int*)(buffer + 4); // è¿˜å¯ä»¥ç›´æŽ¥è½¬ä¸ºHead*,指出长度
        char* buffer_all = new char[len_total];
        memcpy(buffer_all, buffer, sizeof(Head)); // æ‹·è´æ•°æ®å¤´è¿›æ€»çš„缓冲区
        int len_rest = len_total - sizeof(Head);
        while (len_rest > 0) {  // ä¿è¯æ•°æ®ä½“能够全部收到
            len_recv = recv(client, buffer_all + (len_total - len_rest), len_rest, 0);
            len_rest -= len_recv;
        }
        // æ­£å¸¸
        //m_clientMap[client] = HEART_CHECK_TIMES; // é‡ç½®å¿ƒè·³é˜ˆå€¼
        int type = *(int*)buffer;
        if (type == 110) {
            /*TestSturct2* ts2 = (TestSturct2*)buffer_all; // è½¬æ¢æ—¶ï¼Œä½¿ç”¨æ€»çš„buffer_all
            if (ts2) {
                ts2->a = (char*)ts2 + sizeof(TestSturct2);
                ts2->b = ts2->a + strlen(ts2->a) + 1;
                cout << ts2->len;
                cout << "内容1: " << ts2->a << endl;
                cout << "内容2: " << ts2->b << endl;
            }*/
        }
        /*else if (type == LOGIN_REQ) {
            // ç™»å½•请求
            LoginReq* req = (LoginReq*)buffer_all; // è½¬æ¢æ—¶ï¼Œä½¿ç”¨æ€»çš„buffer_all
            cout << "用户信息:" << req->user_name << " " << req->password << endl;
            Login login;
            login.business(req, client); // è°ƒç”¨ä¸šåŠ¡å¤„ç†API
        }*/
        if (type == HEART_CHECK_REQ) {
            // æ”¶åˆ°å¿ƒè·³è¯·æ±‚包,回响应包
            HeartCheckRes res;
            send(client, (char*)&res, res.len, 0);
            cout << "已回复包!" << endl;
        }
        // åŽŸå°ä¸åŠ¨çš„å›žåŒ…
        //send(client, buffer_all, len_total, 0);
        // ç”¨å®Œäº†ï¼Œè®°å¾—释放动态开辟的内存
        if (buffer)
        {
            delete[] buffer;
            buffer = nullptr; // é˜²æ­¢æŒ‡é’ˆæ‚¬ç©ºï¼Œè€Œäº§ç”Ÿæ‚¬ç©ºæŒ‡é’ˆ
        }
        if (buffer_all) {
            delete[] buffer_all;
            buffer_all = nullptr;
        }
    }
}
void ServerSocket::heartBeatThread(SOCKET client)
{
    while (true)
    {
        Sleep(HEARTBEAT_INTERVAL * 1000);
        mutex heartLock;
        lock_guard<std::mutex> lock(heartLock);
        --m_clientMap[client];
    }
}
void ServerSocket::mMapInsert(SOCKET client)
{
    lock_guard<mutex> lg(m_mutex);
    m_clientMap.insert(make_pair(client, HEART_CHECK_TIMES));
    cout << "插入成功:times = " << m_clientMap[client] << endl;
}
void ServerSocket::mMapUpdate(SOCKET client)
{
    lock_guard<mutex> lg(m_mutex);
    m_clientMap.insert(make_pair(client, HEART_CHECK_TIMES));
}
void ServerSocket::mMapDelete()
{
    while (true)
    {
        Sleep(HEARTBEAT_INTERVAL * 1000);
        lock_guard<std::mutex> lock(m_mutex);
        for (auto& client_socket : m_clientMap) {
            cout << client_socket.second << endl;
            if (client_socket.second <= 0) {
                closesocket(client_socket.first);
                m_clientMap.erase(client_socket.first);
                cout << "删除连接成功" << endl;
            }
        }
    }
}
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/ServerSocket.h
New file
@@ -0,0 +1,70 @@
#pragma once
#include <WinSock2.h>
#include <iostream>
#include <map>
#include <thread>
#include <mutex>
#include "ThreadPool.hpp"
#pragma comment(lib,"ws2_32.lib")
#define PORT 9527
#define HEART_CHECK_REQ 101
#define HEART_CHECK_RES 102
#define HEART_CHECK_TIMES 6
#define HEARTBEAT_INTERVAL 2
using namespace std;
struct Head
{
    int type; // åŒºåˆ†ä¸åŒåŠŸèƒ½ç±»åž‹
    int len;  // è¡¨ç¤ºæ•´ä¸ªå°åŒ…的长度,是为了后面处理粘包问题的
};
// é—´éš”:5秒,阈值为6,递减从6开始,到0或小于0 æ–­å¼€/重连
// å¿ƒè·³è¯·æ±‚包
struct HeartCheckReq
{
    int type;
    int len;
    HeartCheckReq()
    {
        type = 101;
        len = sizeof(HeartCheckReq);
    }
};
// å¿ƒè·³å“åº”包
struct HeartCheckRes
{
    int type;
    int len;
    HeartCheckRes()
    {
        type = 102;
        len = sizeof(HeartCheckRes);
    }
};
class ServerSocket
{
public:
    ServerSocket();
    virtual ~ServerSocket();
    bool initSocket();
    void acceptThread();
    void recvAndSendThread(SOCKET client);
    void heartBeatThread(SOCKET client);
    void mMapInsert(SOCKET client);
    void mMapUpdate(SOCKET client);
    void mMapDelete();
private:
    SOCKET m_server;
    map<SOCKET, int> m_clientMap;
    mutex m_mutex;
};
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/ThreadPool.hpp
New file
@@ -0,0 +1,147 @@
#pragma once
#include <iostream>
#include <mutex>
#include <atomic>
#include <condition_variable>
#include <queue>
#include <string>
using namespace std;
template<typename Task, const size_t DEFAULT_THREAD_NUM, const size_t MAX_THREAD_NUM>
class ThreadPool
{
public:
    ThreadPool() = delete;
    ThreadPool(const ThreadPool&) = delete;
    ThreadPool& operator=(const ThreadPool&) = delete;
    ThreadPool(ThreadPool&&) = delete;
    ThreadPool& operator=(ThreadPool&&) = delete;
    explicit ThreadPool(uint32_t timeout) :m_timeout(timeout), m_needRun(true)
    {
        for (int i = 0; i < DEFAULT_THREAD_NUM; i++)
        {
            thread([this] { RunTask(); }).detach();
        }
    }
    ~ThreadPool() {
        m_needRun = false;
        while (m_runningThreadNum > 0)
        {
            m_needRunCondition.notify_all();
        }
    }
    void Push(Task& task) {
        PushTask(task);
        if (m_runningThreadNum < MAX_THREAD_NUM && m_idleThreadNum == 0)
        {
            thread([this] { RunTask(); }).detach();
        }
        m_needRunCondition.notify_all();
    }
private:
    bool IsQueueEmpty() {
        lock_guard<mutex> lg(m_mutex);
        return m_taskQueue.empty();
    }
    bool GetTask(Task& task) {
        lock_guard<mutex> lg(m_mutex);
        if (m_taskQueue.empty())
        {
            return false;
        }
        task = m_taskQueue.top();
        m_taskQueue.pop();
        return true;
    }
    class NumWrapper
    {
    public:
        NumWrapper() = delete;
        NumWrapper(atomic<uint32_t>& num) :m_num(num) { m_num++; }
        ~NumWrapper() { m_num--; }
    private:
        atomic<uint32_t>& m_num;
    };
    void Sleep() {
        mutex needRunMutex;
        unique_lock<mutex> lock(needRunMutex);
        NumWrapper idleWraper(m_idleThreadNum);
        (void)idleWraper;
        m_needRunCondition.wait_for(lock, std::chrono::seconds(m_timeout),
            [this] { return !m_needRun || !IsQueueEmpty(); });
    }
    void PushTask(const Task& task) {
        lock_guard<mutex> lg(m_mutex);
        m_taskQueue.push(task);
    }
    void RunTask() {
        NumWrapper runWraper(m_runningThreadNum);
        (void)runWraper;
        while (m_needRun)
        {
            Task task;
            if (GetTask(task))
            {
                task.Execute();
                continue;
            }
            Sleep();
            if (!m_needRun)
            {
                return;
            }
            if (GetTask(task))
            {
                task.Execute();
                continue;
            }
            if (m_runningThreadNum > DEFAULT_THREAD_NUM)
            {
                return;
            }
        }
    }
private:
    atomic<uint32_t> m_idleThreadNum;
    atomic<uint32_t> m_runningThreadNum;
    atomic_bool m_needRun;
    mutex m_mutex;
    condition_variable m_needRunCondition;
    uint32_t m_timeout;
    priority_queue<Task> m_taskQueue;
};
class Task
{
public:
    Task() :m_priority(0) {};
    explicit Task(string context) :m_priority(0) {
        m_context = context;
    }
    bool operator<(const Task& t) const {
        return m_priority < t.m_priority;
    }
    void Execute() {
        lock_guard<mutex> lg(m_mutex);
        cout << "Task is executed,name is" << m_context << endl;
    }
public:
    uint32_t m_priority;
private:
    string m_context;
    static mutex m_mutex;
};
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/ServerSocket.obj
Binary files differ
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/ThreadPool.obj
Binary files differ
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/face_pai.8f47ef20.tlog/CL.command.1.tlog
Binary files differ
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/face_pai.8f47ef20.tlog/CL.read.1.tlog
Binary files differ
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/face_pai.8f47ef20.tlog/CL.write.1.tlog
Binary files differ
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/face_pai.8f47ef20.tlog/Cl.items.tlog
New file
@@ -0,0 +1,2 @@
D:\Projects\脸谱AI_0817_1202\GroupB_马喜龙\Server\马喜龙\code\face_painting_socket_server\main.cpp;D:\Projects\脸谱AI_0817_1202\GroupB_马喜龙\Server\马喜龙\code\face_painting_socket_server\face_pai.8f47ef20\x64\Debug\main.obj
D:\Projects\脸谱AI_0817_1202\GroupB_马喜龙\Server\马喜龙\code\face_painting_socket_server\ServerSocket.cpp;D:\Projects\脸谱AI_0817_1202\GroupB_马喜龙\Server\马喜龙\code\face_painting_socket_server\face_pai.8f47ef20\x64\Debug\ServerSocket.obj
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/face_pai.8f47ef20.tlog/face_painting_socket_server.lastbuildstate
New file
@@ -0,0 +1,2 @@
PlatformToolSet=v143:VCToolArchitecture=Native64Bit:VCToolsVersion=14.42.34433:TargetPlatformVersion=10.0.26100.0:
Debug|x64|D:\Projects\脸谱AI_0817_1202\GroupB_马喜龙\Server\马喜龙\code\face_painting_socket_server\|
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/face_pai.8f47ef20.tlog/link.command.1.tlog
Binary files differ
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/face_pai.8f47ef20.tlog/link.read.1.tlog
Binary files differ
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/face_pai.8f47ef20.tlog/link.secondary.1.tlog
New file
@@ -0,0 +1,2 @@
^D:\PROJECTS\脸谱AI_0817_1202\GROUPB_马喜龙\SERVER\马喜龙\CODE\FACE_PAINTING_SOCKET_SERVER\FACE_PAI.8F47EF20\X64\DEBUG\MAIN.OBJ|D:\PROJECTS\脸谱AI_0817_1202\GROUPB_马喜龙\SERVER\马喜龙\CODE\FACE_PAINTING_SOCKET_SERVER\FACE_PAI.8F47EF20\X64\DEBUG\SERVERSOCKET.OBJ
D:\Projects\脸谱AI_0817_1202\GroupB_马喜龙\Server\马喜龙\code\face_painting_socket_server\face_pai.8f47ef20\x64\Debug\face_painting_socket_server.ilk
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/face_pai.8f47ef20.tlog/link.write.1.tlog
Binary files differ
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/face_painting_socket_server.exe.recipe
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
  <ProjectOutputs>
    <ProjectOutput>
      <FullPath>D:\Projects\脸谱AI_0817_1202\GroupB_马喜龙\Server\马喜龙\code\face_painting_socket_server\x64\Debug\face_painting_socket_server.exe</FullPath>
    </ProjectOutput>
  </ProjectOutputs>
  <ContentFiles />
  <SatelliteDlls />
  <NonRecipeFileRefs />
</Project>
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/face_painting_socket_server.ilk
Binary files differ
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/face_painting_socket_server.log
New file
@@ -0,0 +1,4 @@
  ServerSocket.cpp
  main.cpp
  æ­£åœ¨ç”Ÿæˆä»£ç ...
  face_painting_socket_server.vcxproj -> D:\Projects\脸谱AI_0817_1202\GroupB_马喜龙\Server\马喜龙\code\face_painting_socket_server\x64\Debug\face_painting_socket_server.exe
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/main.obj
Binary files differ
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/vc143.idb
Binary files differ
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/face_pai.8f47ef20/x64/Debug/vc143.pdb
Binary files differ
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/face_painting_socket_server.sln
New file
@@ -0,0 +1,28 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.12.35521.163 d17.12
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "face_painting_socket_server", "face_painting_socket_server.vcxproj", "{8F47EF20-7DBA-475C-ABA7-C468E46049F2}"
EndProject
Global
    GlobalSection(SolutionConfigurationPlatforms) = preSolution
        Debug|x64 = Debug|x64
        Debug|x86 = Debug|x86
        Release|x64 = Release|x64
        Release|x86 = Release|x86
    EndGlobalSection
    GlobalSection(ProjectConfigurationPlatforms) = postSolution
        {8F47EF20-7DBA-475C-ABA7-C468E46049F2}.Debug|x64.ActiveCfg = Debug|x64
        {8F47EF20-7DBA-475C-ABA7-C468E46049F2}.Debug|x64.Build.0 = Debug|x64
        {8F47EF20-7DBA-475C-ABA7-C468E46049F2}.Debug|x86.ActiveCfg = Debug|Win32
        {8F47EF20-7DBA-475C-ABA7-C468E46049F2}.Debug|x86.Build.0 = Debug|Win32
        {8F47EF20-7DBA-475C-ABA7-C468E46049F2}.Release|x64.ActiveCfg = Release|x64
        {8F47EF20-7DBA-475C-ABA7-C468E46049F2}.Release|x64.Build.0 = Release|x64
        {8F47EF20-7DBA-475C-ABA7-C468E46049F2}.Release|x86.ActiveCfg = Release|Win32
        {8F47EF20-7DBA-475C-ABA7-C468E46049F2}.Release|x86.Build.0 = Release|Win32
    EndGlobalSection
    GlobalSection(SolutionProperties) = preSolution
        HideSolutionNode = FALSE
    EndGlobalSection
EndGlobal
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/face_painting_socket_server.vcxproj
New file
@@ -0,0 +1,140 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup Label="ProjectConfigurations">
    <ProjectConfiguration Include="Debug|Win32">
      <Configuration>Debug</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|Win32">
      <Configuration>Release</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Debug|x64">
      <Configuration>Debug</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|x64">
      <Configuration>Release</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
  </ItemGroup>
  <PropertyGroup Label="Globals">
    <VCProjectVersion>17.0</VCProjectVersion>
    <Keyword>Win32Proj</Keyword>
    <ProjectGuid>{8f47ef20-7dba-475c-aba7-c468e46049f2}</ProjectGuid>
    <RootNamespace>facepaintingsocketserver</RootNamespace>
    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v143</PlatformToolset>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v143</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v143</PlatformToolset>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v143</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ImportGroup Label="ExtensionSettings">
  </ImportGroup>
  <ImportGroup Label="Shared">
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <PropertyGroup Label="UserMacros" />
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <SDLCheck>true</SDLCheck>
      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <ConformanceMode>true</ConformanceMode>
    </ClCompile>
    <Link>
      <SubSystem>Console</SubSystem>
      <GenerateDebugInformation>true</GenerateDebugInformation>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <SDLCheck>true</SDLCheck>
      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <ConformanceMode>true</ConformanceMode>
    </ClCompile>
    <Link>
      <SubSystem>Console</SubSystem>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
      <OptimizeReferences>true</OptimizeReferences>
      <GenerateDebugInformation>true</GenerateDebugInformation>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <SDLCheck>true</SDLCheck>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <ConformanceMode>true</ConformanceMode>
    </ClCompile>
    <Link>
      <SubSystem>Console</SubSystem>
      <GenerateDebugInformation>true</GenerateDebugInformation>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <SDLCheck>true</SDLCheck>
      <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <ConformanceMode>true</ConformanceMode>
    </ClCompile>
    <Link>
      <SubSystem>Console</SubSystem>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
      <OptimizeReferences>true</OptimizeReferences>
      <GenerateDebugInformation>true</GenerateDebugInformation>
    </Link>
  </ItemDefinitionGroup>
  <ItemGroup>
    <ClCompile Include="main.cpp" />
    <ClCompile Include="ServerSocket.cpp" />
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="ServerSocket.h" />
    <ClInclude Include="ThreadPool.hpp" />
  </ItemGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>
</Project>
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/face_painting_socket_server.vcxproj.filters
New file
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <Filter Include="源文件">
      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
      <Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
    </Filter>
    <Filter Include="头文件">
      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
      <Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
    </Filter>
    <Filter Include="资源文件">
      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
    </Filter>
  </ItemGroup>
  <ItemGroup>
    <ClCompile Include="main.cpp">
      <Filter>源文件</Filter>
    </ClCompile>
    <ClCompile Include="ServerSocket.cpp">
      <Filter>源文件</Filter>
    </ClCompile>
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="ServerSocket.h">
      <Filter>头文件</Filter>
    </ClInclude>
    <ClInclude Include="ThreadPool.hpp">
      <Filter>头文件</Filter>
    </ClInclude>
  </ItemGroup>
</Project>
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/face_painting_socket_server.vcxproj.user
New file
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup />
</Project>
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/main.cpp
New file
@@ -0,0 +1,39 @@
#include <iostream>
#include "ServerSocket.h"
#include "ThreadPool.hpp"
using namespace std;
#define DEFAULT_THREAD_NUM 3
#define MAX_THREAD_NUM 6
#define TIME_OUT 500
mutex Task::m_mutex;
int main() {
    ServerSocket server1;
    string cmd;
    while (cin>>cmd)
    {
        if (cmd == "quit") {
            break;
        }
    }
    /*ThreadPool<Task, DEFAULT_THREAD_NUM, MAX_THREAD_NUM> threadPool_(TIME_OUT);
    Task task1("name_1");
    Task task2("name_2");
    Task task3("name_3");
    Task task4("name_4");
    task4.m_priority = 4;
    task3.m_priority = 8;
    task2.m_priority = 2;
    task1.m_priority = 5;
    threadPool_.Push(task1);
    threadPool_.Push(task2);
    threadPool_.Push(task3);
    threadPool_.Push(task4);*/
    system("pause");
    return 0;
}
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/x64/Debug/face_painting_socket_server.exe
Binary files differ
GroupB_ÂíϲÁú/Server/ÂíϲÁú/code/face_painting_socket_server/x64/Debug/face_painting_socket_server.pdb
Binary files differ