diff --git a/Bin/DLL/NetworkAPI_x86D.pdb b/Bin/DLL/NetworkAPI_x86D.pdb
index 278595a0..32495041 100644
Binary files a/Bin/DLL/NetworkAPI_x86D.pdb and b/Bin/DLL/NetworkAPI_x86D.pdb differ
diff --git a/Bin/DLL/OysterGraphics_x64.pdb b/Bin/DLL/OysterGraphics_x64.pdb
index bb6604e9..a7820235 100644
Binary files a/Bin/DLL/OysterGraphics_x64.pdb and b/Bin/DLL/OysterGraphics_x64.pdb differ
diff --git a/Code/DanBias.sln b/Code/DanBias.sln
index 894caec6..f658a0ec 100644
--- a/Code/DanBias.sln
+++ b/Code/DanBias.sln
@@ -54,122 +54,122 @@ Global
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Debug|Mixed Platforms.ActiveCfg = Release|x64
- {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Debug|Mixed Platforms.Build.0 = Release|x64
+ {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Debug|Mixed Platforms.ActiveCfg = Release|Win32
+ {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Debug|Mixed Platforms.Build.0 = Release|Win32
{0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Debug|Win32.ActiveCfg = Debug|Win32
{0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Debug|Win32.Build.0 = Debug|Win32
{0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Debug|x64.ActiveCfg = Debug|x64
{0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Debug|x64.Build.0 = Debug|x64
- {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Release|Mixed Platforms.ActiveCfg = Release|x64
- {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Release|Mixed Platforms.Build.0 = Release|x64
+ {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Release|Mixed Platforms.Build.0 = Release|Win32
{0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Release|Win32.ActiveCfg = Release|Win32
{0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Release|Win32.Build.0 = Release|Win32
{0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Release|x64.ActiveCfg = Release|x64
{0EC83E64-230E-48EF-B08C-6AC9651B4F82}.Release|x64.Build.0 = Release|x64
- {F10CBC03-9809-4CBA-95D8-327C287B18EE}.Debug|Mixed Platforms.ActiveCfg = Release|x64
- {F10CBC03-9809-4CBA-95D8-327C287B18EE}.Debug|Mixed Platforms.Build.0 = Release|x64
+ {F10CBC03-9809-4CBA-95D8-327C287B18EE}.Debug|Mixed Platforms.ActiveCfg = Release|Win32
+ {F10CBC03-9809-4CBA-95D8-327C287B18EE}.Debug|Mixed Platforms.Build.0 = Release|Win32
{F10CBC03-9809-4CBA-95D8-327C287B18EE}.Debug|Win32.ActiveCfg = Debug|Win32
{F10CBC03-9809-4CBA-95D8-327C287B18EE}.Debug|Win32.Build.0 = Debug|Win32
{F10CBC03-9809-4CBA-95D8-327C287B18EE}.Debug|x64.ActiveCfg = Debug|x64
{F10CBC03-9809-4CBA-95D8-327C287B18EE}.Debug|x64.Build.0 = Debug|x64
- {F10CBC03-9809-4CBA-95D8-327C287B18EE}.Release|Mixed Platforms.ActiveCfg = Release|x64
- {F10CBC03-9809-4CBA-95D8-327C287B18EE}.Release|Mixed Platforms.Build.0 = Release|x64
+ {F10CBC03-9809-4CBA-95D8-327C287B18EE}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {F10CBC03-9809-4CBA-95D8-327C287B18EE}.Release|Mixed Platforms.Build.0 = Release|Win32
{F10CBC03-9809-4CBA-95D8-327C287B18EE}.Release|Win32.ActiveCfg = Release|Win32
{F10CBC03-9809-4CBA-95D8-327C287B18EE}.Release|Win32.Build.0 = Release|Win32
{F10CBC03-9809-4CBA-95D8-327C287B18EE}.Release|x64.ActiveCfg = Release|x64
{F10CBC03-9809-4CBA-95D8-327C287B18EE}.Release|x64.Build.0 = Release|x64
- {4285BD3F-3C6C-4670-B7AF-A29AFEF5F6A8}.Debug|Mixed Platforms.ActiveCfg = Release|x64
- {4285BD3F-3C6C-4670-B7AF-A29AFEF5F6A8}.Debug|Mixed Platforms.Build.0 = Release|x64
+ {4285BD3F-3C6C-4670-B7AF-A29AFEF5F6A8}.Debug|Mixed Platforms.ActiveCfg = Release|Win32
+ {4285BD3F-3C6C-4670-B7AF-A29AFEF5F6A8}.Debug|Mixed Platforms.Build.0 = Release|Win32
{4285BD3F-3C6C-4670-B7AF-A29AFEF5F6A8}.Debug|Win32.ActiveCfg = Debug|Win32
{4285BD3F-3C6C-4670-B7AF-A29AFEF5F6A8}.Debug|Win32.Build.0 = Debug|Win32
{4285BD3F-3C6C-4670-B7AF-A29AFEF5F6A8}.Debug|x64.ActiveCfg = Debug|x64
{4285BD3F-3C6C-4670-B7AF-A29AFEF5F6A8}.Debug|x64.Build.0 = Debug|x64
- {4285BD3F-3C6C-4670-B7AF-A29AFEF5F6A8}.Release|Mixed Platforms.ActiveCfg = Release|x64
- {4285BD3F-3C6C-4670-B7AF-A29AFEF5F6A8}.Release|Mixed Platforms.Build.0 = Release|x64
+ {4285BD3F-3C6C-4670-B7AF-A29AFEF5F6A8}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {4285BD3F-3C6C-4670-B7AF-A29AFEF5F6A8}.Release|Mixed Platforms.Build.0 = Release|Win32
{4285BD3F-3C6C-4670-B7AF-A29AFEF5F6A8}.Release|Win32.ActiveCfg = Release|Win32
{4285BD3F-3C6C-4670-B7AF-A29AFEF5F6A8}.Release|Win32.Build.0 = Release|Win32
{4285BD3F-3C6C-4670-B7AF-A29AFEF5F6A8}.Release|x64.ActiveCfg = Release|x64
{4285BD3F-3C6C-4670-B7AF-A29AFEF5F6A8}.Release|x64.Build.0 = Release|x64
- {34D6295A-00DD-4B1A-8258-97DA2818EC26}.Debug|Mixed Platforms.ActiveCfg = Release|x64
- {34D6295A-00DD-4B1A-8258-97DA2818EC26}.Debug|Mixed Platforms.Build.0 = Release|x64
+ {34D6295A-00DD-4B1A-8258-97DA2818EC26}.Debug|Mixed Platforms.ActiveCfg = Release|Win32
+ {34D6295A-00DD-4B1A-8258-97DA2818EC26}.Debug|Mixed Platforms.Build.0 = Release|Win32
{34D6295A-00DD-4B1A-8258-97DA2818EC26}.Debug|Win32.ActiveCfg = Debug|Win32
{34D6295A-00DD-4B1A-8258-97DA2818EC26}.Debug|Win32.Build.0 = Debug|Win32
{34D6295A-00DD-4B1A-8258-97DA2818EC26}.Debug|x64.ActiveCfg = Debug|x64
{34D6295A-00DD-4B1A-8258-97DA2818EC26}.Debug|x64.Build.0 = Debug|x64
- {34D6295A-00DD-4B1A-8258-97DA2818EC26}.Release|Mixed Platforms.ActiveCfg = Release|x64
- {34D6295A-00DD-4B1A-8258-97DA2818EC26}.Release|Mixed Platforms.Build.0 = Release|x64
+ {34D6295A-00DD-4B1A-8258-97DA2818EC26}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {34D6295A-00DD-4B1A-8258-97DA2818EC26}.Release|Mixed Platforms.Build.0 = Release|Win32
{34D6295A-00DD-4B1A-8258-97DA2818EC26}.Release|Win32.ActiveCfg = Release|Win32
{34D6295A-00DD-4B1A-8258-97DA2818EC26}.Release|Win32.Build.0 = Release|Win32
{34D6295A-00DD-4B1A-8258-97DA2818EC26}.Release|x64.ActiveCfg = Release|x64
{34D6295A-00DD-4B1A-8258-97DA2818EC26}.Release|x64.Build.0 = Release|x64
- {35AEA3C0-E0A7-4E1E-88CD-514AA5A442B1}.Debug|Mixed Platforms.ActiveCfg = Release|x64
- {35AEA3C0-E0A7-4E1E-88CD-514AA5A442B1}.Debug|Mixed Platforms.Build.0 = Release|x64
+ {35AEA3C0-E0A7-4E1E-88CD-514AA5A442B1}.Debug|Mixed Platforms.ActiveCfg = Release|Win32
+ {35AEA3C0-E0A7-4E1E-88CD-514AA5A442B1}.Debug|Mixed Platforms.Build.0 = Release|Win32
{35AEA3C0-E0A7-4E1E-88CD-514AA5A442B1}.Debug|Win32.ActiveCfg = Debug|Win32
{35AEA3C0-E0A7-4E1E-88CD-514AA5A442B1}.Debug|Win32.Build.0 = Debug|Win32
{35AEA3C0-E0A7-4E1E-88CD-514AA5A442B1}.Debug|x64.ActiveCfg = Debug|x64
{35AEA3C0-E0A7-4E1E-88CD-514AA5A442B1}.Debug|x64.Build.0 = Debug|x64
- {35AEA3C0-E0A7-4E1E-88CD-514AA5A442B1}.Release|Mixed Platforms.ActiveCfg = Release|x64
- {35AEA3C0-E0A7-4E1E-88CD-514AA5A442B1}.Release|Mixed Platforms.Build.0 = Release|x64
+ {35AEA3C0-E0A7-4E1E-88CD-514AA5A442B1}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {35AEA3C0-E0A7-4E1E-88CD-514AA5A442B1}.Release|Mixed Platforms.Build.0 = Release|Win32
{35AEA3C0-E0A7-4E1E-88CD-514AA5A442B1}.Release|Win32.ActiveCfg = Release|Win32
{35AEA3C0-E0A7-4E1E-88CD-514AA5A442B1}.Release|Win32.Build.0 = Release|Win32
{35AEA3C0-E0A7-4E1E-88CD-514AA5A442B1}.Release|x64.ActiveCfg = Release|x64
{35AEA3C0-E0A7-4E1E-88CD-514AA5A442B1}.Release|x64.Build.0 = Release|x64
- {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Debug|Mixed Platforms.ActiveCfg = Release|x64
- {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Debug|Mixed Platforms.Build.0 = Release|x64
+ {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Debug|Mixed Platforms.ActiveCfg = Release|Win32
+ {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Debug|Mixed Platforms.Build.0 = Release|Win32
{7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Debug|Win32.ActiveCfg = Debug|Win32
{7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Debug|Win32.Build.0 = Debug|Win32
{7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Debug|x64.ActiveCfg = Debug|x64
{7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Debug|x64.Build.0 = Debug|x64
- {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Release|Mixed Platforms.ActiveCfg = Release|x64
- {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Release|Mixed Platforms.Build.0 = Release|x64
+ {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Release|Mixed Platforms.Build.0 = Release|Win32
{7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Release|Win32.ActiveCfg = Release|Win32
{7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Release|Win32.Build.0 = Release|Win32
{7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Release|x64.ActiveCfg = Release|x64
{7E3990D2-3D94-465C-B58D-64A74B3ECF9B}.Release|x64.Build.0 = Release|x64
- {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Debug|Mixed Platforms.ActiveCfg = Release|x64
- {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Debug|Mixed Platforms.Build.0 = Release|x64
+ {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Debug|Mixed Platforms.ActiveCfg = Release|Win32
+ {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Debug|Mixed Platforms.Build.0 = Release|Win32
{2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Debug|Win32.ActiveCfg = Debug|Win32
{2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Debug|Win32.Build.0 = Debug|Win32
{2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Debug|x64.ActiveCfg = Debug|x64
{2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Debug|x64.Build.0 = Debug|x64
- {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Release|Mixed Platforms.ActiveCfg = Release|x64
- {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Release|Mixed Platforms.Build.0 = Release|x64
+ {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Release|Mixed Platforms.Build.0 = Release|Win32
{2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Release|Win32.ActiveCfg = Release|Win32
{2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Release|Win32.Build.0 = Release|Win32
{2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Release|x64.ActiveCfg = Release|x64
{2EC4DDED-8F75-4C86-A10B-E1E8EB29F3EE}.Release|x64.Build.0 = Release|x64
- {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Debug|Mixed Platforms.ActiveCfg = Release|x64
- {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Debug|Mixed Platforms.Build.0 = Release|x64
+ {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Debug|Mixed Platforms.ActiveCfg = Release|Win32
+ {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Debug|Mixed Platforms.Build.0 = Release|Win32
{838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Debug|Win32.ActiveCfg = Debug|Win32
{838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Debug|Win32.Build.0 = Debug|Win32
{838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Debug|x64.ActiveCfg = Debug|x64
{838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Debug|x64.Build.0 = Debug|x64
- {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Release|Mixed Platforms.ActiveCfg = Release|x64
- {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Release|Mixed Platforms.Build.0 = Release|x64
+ {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Release|Mixed Platforms.Build.0 = Release|Win32
{838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Release|Win32.ActiveCfg = Release|Win32
{838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Release|Win32.Build.0 = Release|Win32
{838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Release|x64.ActiveCfg = Release|x64
{838B25C2-D19E-49FE-8CB0-9A977CA3C7E8}.Release|x64.Build.0 = Release|x64
- {6A066806-F43F-4B31-A4E3-57179674F460}.Debug|Mixed Platforms.ActiveCfg = Release|x64
- {6A066806-F43F-4B31-A4E3-57179674F460}.Debug|Mixed Platforms.Build.0 = Release|x64
+ {6A066806-F43F-4B31-A4E3-57179674F460}.Debug|Mixed Platforms.ActiveCfg = Release|Win32
+ {6A066806-F43F-4B31-A4E3-57179674F460}.Debug|Mixed Platforms.Build.0 = Release|Win32
{6A066806-F43F-4B31-A4E3-57179674F460}.Debug|Win32.ActiveCfg = Debug|Win32
{6A066806-F43F-4B31-A4E3-57179674F460}.Debug|Win32.Build.0 = Debug|Win32
{6A066806-F43F-4B31-A4E3-57179674F460}.Debug|x64.ActiveCfg = Debug|x64
{6A066806-F43F-4B31-A4E3-57179674F460}.Debug|x64.Build.0 = Debug|x64
- {6A066806-F43F-4B31-A4E3-57179674F460}.Release|Mixed Platforms.ActiveCfg = Release|x64
- {6A066806-F43F-4B31-A4E3-57179674F460}.Release|Mixed Platforms.Build.0 = Release|x64
+ {6A066806-F43F-4B31-A4E3-57179674F460}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {6A066806-F43F-4B31-A4E3-57179674F460}.Release|Mixed Platforms.Build.0 = Release|Win32
{6A066806-F43F-4B31-A4E3-57179674F460}.Release|Win32.ActiveCfg = Release|Win32
{6A066806-F43F-4B31-A4E3-57179674F460}.Release|Win32.Build.0 = Release|Win32
{6A066806-F43F-4B31-A4E3-57179674F460}.Release|x64.ActiveCfg = Release|x64
{6A066806-F43F-4B31-A4E3-57179674F460}.Release|x64.Build.0 = Release|x64
- {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Debug|Mixed Platforms.ActiveCfg = Release|x64
- {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Debug|Mixed Platforms.Build.0 = Release|x64
+ {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Debug|Mixed Platforms.ActiveCfg = Release|Win32
+ {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Debug|Mixed Platforms.Build.0 = Release|Win32
{C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Debug|Win32.ActiveCfg = Debug|Win32
{C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Debug|Win32.Build.0 = Debug|Win32
{C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Debug|x64.ActiveCfg = Debug|x64
{C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Debug|x64.Build.0 = Debug|x64
- {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Release|Mixed Platforms.ActiveCfg = Release|x64
- {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Release|Mixed Platforms.Build.0 = Release|x64
+ {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Release|Mixed Platforms.Build.0 = Release|Win32
{C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Release|Win32.ActiveCfg = Release|Win32
{C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Release|Win32.Build.0 = Release|Win32
{C5AA09D0-6594-4CD3-BD92-1D380C7B3B50}.Release|x64.ActiveCfg = Release|x64
@@ -263,7 +263,8 @@ Global
{DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.Release|Mixed Platforms.Build.0 = Release|Win32
{DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.Release|Win32.ActiveCfg = Release|Win32
{DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.Release|Win32.Build.0 = Release|Win32
- {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.Release|x64.ActiveCfg = Release|Win32
+ {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.Release|x64.ActiveCfg = Release|x64
+ {DA2AA800-ED64-4649-8B3B-E7F1E3968B78}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/Code/Game/DanBiasGame/DanBiasGame.vcxproj b/Code/Game/DanBiasGame/DanBiasGame.vcxproj
index ff05bc23..bdec78cb 100644
--- a/Code/Game/DanBiasGame/DanBiasGame.vcxproj
+++ b/Code/Game/DanBiasGame/DanBiasGame.vcxproj
@@ -71,32 +71,32 @@
$(SolutionDir)..\Bin\DLL\
$(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\
$(ProjectName)_$(PlatformShortName)D
- $(SolutionDir)..\External\Lib\Input;$(SolutionDir)..\Bin\DLL;$(LibraryPath)
- $(SolutionDir)..\External\Include\;$(SolutionDir)Game\GameProtocols\;$(SolutionDir)Network/NetworkAPI;$(IncludePath)
+ $(SolutionDir)..\External\Lib\Input;$(SolutionDir)..\Bin\DLL;C:\Program Files %28x86%29\Visual Leak Detector\lib\Win32;$(LibraryPath)
+ $(SolutionDir)..\External\Include\;$(SolutionDir)Game\GameProtocols\;$(SolutionDir)Network/NetworkAPI;$(IncludePath);C:\Program Files %28x86%29\Visual Leak Detector\include
true
$(SolutionDir)..\Bin\DLL\
$(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\
$(ProjectName)_$(PlatformShortName)D
- $(SolutionDir)..\External\Lib\Input;$(SolutionDir)..\Bin\DLL;$(LibraryPath)
- $(SolutionDir)..\External\Include\;$(IncludePath)
+ $(SolutionDir)..\External\Lib\Input;$(SolutionDir)..\Bin\DLL;C:\Program Files %28x86%29\Visual Leak Detector\lib\Win64;$(LibraryPath)
+ $(SolutionDir)..\External\Include\;$(IncludePath);C:\Program Files %28x86%29\Visual Leak Detector\include
false
$(SolutionDir)..\Bin\DLL\
$(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\
$(ProjectName)_$(PlatformShortName)
- $(SolutionDir)..\External\Lib\Input;$(SolutionDir)..\Bin\DLL;$(LibraryPath)
- $(SolutionDir)..\External\Include\;$(IncludePath)
+ $(SolutionDir)..\External\Lib\Input;$(SolutionDir)..\Bin\DLL;C:\Program Files %28x86%29\Visual Leak Detector\lib\Win32;$(LibraryPath)
+ $(SolutionDir)..\External\Include\;$(IncludePath);C:\Program Files %28x86%29\Visual Leak Detector\include
false
$(SolutionDir)..\Bin\DLL\
$(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\
$(ProjectName)_$(PlatformShortName)
- $(SolutionDir)..\External\Lib\Input;$(SolutionDir)..\Bin\DLL;$(LibraryPath)
- $(SolutionDir)..\External\Include\;$(IncludePath)
+ $(SolutionDir)..\External\Lib\Input;$(SolutionDir)..\Bin\DLL;C:\Program Files %28x86%29\Visual Leak Detector\lib\Win64;$(LibraryPath)
+ $(SolutionDir)..\External\Include\;$(IncludePath);C:\Program Files %28x86%29\Visual Leak Detector\include
diff --git a/Code/Game/DanBiasGame/DanBiasGame_Impl.cpp b/Code/Game/DanBiasGame/DanBiasGame_Impl.cpp
index 15e799bf..cad0bd75 100644
--- a/Code/Game/DanBiasGame/DanBiasGame_Impl.cpp
+++ b/Code/Game/DanBiasGame/DanBiasGame_Impl.cpp
@@ -34,10 +34,10 @@ namespace DanBias
Client::GameClientState::ProtocolStruct* protocolData;
switch (pType)
{
- case protocol_PlayerNavigation:
+ case protocol_Gamplay_PlayerNavigation:
break;
- case protocol_PlayerPosition:
+ case protocol_Gamplay_PlayerPosition:
protocolData = new Client::GameClientState::PlayerPos;
for(int i = 0; i< 3; i++)
{
@@ -49,7 +49,7 @@ namespace DanBias
break;
- case protocol_ObjectPosition:
+ case protocol_Gamplay_ObjectPosition:
protocolData = new Client::GameClientState::ObjPos;
for(int i = 0; i< 16; i++)
{
diff --git a/Code/Game/DanBiasLauncher/Launcher.cpp b/Code/Game/DanBiasLauncher/Launcher.cpp
index 8ae0f29c..7d5727b7 100644
--- a/Code/Game/DanBiasLauncher/Launcher.cpp
+++ b/Code/Game/DanBiasLauncher/Launcher.cpp
@@ -6,8 +6,8 @@
#include
-//#include "DanBiasServerAPI.h"
-#include "DanBiasGame.h"
+#include "DanBiasServerAPI.h"
+//#include "DanBiasGame.h"
int WINAPI WinMain( HINSTANCE hinst, HINSTANCE prevInst, PSTR cmdLine, int cmdShow)
diff --git a/Code/Game/DanBiasServer/GameServer.cpp b/Code/Game/DanBiasServer/GameServer.cpp
index c0601b30..cb5a7ae3 100644
--- a/Code/Game/DanBiasServer/GameServer.cpp
+++ b/Code/Game/DanBiasServer/GameServer.cpp
@@ -18,7 +18,7 @@ namespace DanBias
using namespace Oyster::Network;
- void GameServer::ClientConnectCallback(NetworkClient& client)
+ void GameServer::ClientConnectCallback(NetworkClient* client)
{
printf("Client connected!\n");
diff --git a/Code/Game/DanBiasServer/GameServer.h b/Code/Game/DanBiasServer/GameServer.h
index 4045295f..251aab7a 100644
--- a/Code/Game/DanBiasServer/GameServer.h
+++ b/Code/Game/DanBiasServer/GameServer.h
@@ -23,7 +23,7 @@ namespace DanBias
private:
//static void ClientConnectCallbackFunction(Oyster::Network::NetworkClient& connectedClient);
- void ClientConnectCallback(Oyster::Network::NetworkClient& client) override;
+ void ClientConnectCallback(Oyster::Network::NetworkClient* client) override;
bool initiated;
bool running;
diff --git a/Code/Game/DanBiasServer/ServerObjects/ClientObject.cpp b/Code/Game/DanBiasServer/ServerObjects/ClientObject.cpp
index 638d8237..c9452b45 100644
--- a/Code/Game/DanBiasServer/ServerObjects/ClientObject.cpp
+++ b/Code/Game/DanBiasServer/ServerObjects/ClientObject.cpp
@@ -2,15 +2,15 @@
using namespace DanBias;
-ClientObject::ClientObject(const Oyster::Network::NetworkClient& client)
+ClientObject::ClientObject(Oyster::Network::NetworkClient* client)
{
this->client = client;
- this->client.SetRecieverObject(this, Oyster::Network::NetworkProtocolCallbackType_Object);
+ this->client->SetRecieverObject(this, Oyster::Network::NetworkProtocolCallbackType_Object);
this->box = 0;
}
ClientObject::~ClientObject()
{
- this->client.Disconnect();
+ this->client->Disconnect();
}
void ClientObject::SetPostbox(Oyster::PostBox* box)
@@ -23,7 +23,7 @@ GameLogic::Player* ClientObject::Logic_Object()
}
Oyster::Network::NetworkClient* ClientObject::NetClient_Object()
{
- return &this->client;
+ return this->client;
}
void ClientObject::ProtocolRecievedCallback(Oyster::Network::CustomNetProtocol& protocol)
diff --git a/Code/Game/DanBiasServer/ServerObjects/ClientObject.h b/Code/Game/DanBiasServer/ServerObjects/ClientObject.h
index 7a69eb94..f44e70d0 100644
--- a/Code/Game/DanBiasServer/ServerObjects/ClientObject.h
+++ b/Code/Game/DanBiasServer/ServerObjects/ClientObject.h
@@ -13,7 +13,7 @@ namespace DanBias
:public Oyster::Network::ProtocolRecieverObject
{
public:
- ClientObject(const Oyster::Network::NetworkClient& client);
+ ClientObject(Oyster::Network::NetworkClient* client);
~ClientObject();
void SetPostbox(Oyster::PostBox* box);
@@ -26,7 +26,7 @@ namespace DanBias
private:
GameLogic::Player logicPlayer;
- Oyster::Network::NetworkClient client;
+ Utility::DynamicMemory::SmartPointer client;
Oyster::IPostBox* box;
};
diff --git a/Code/Game/GameProtocols/GameProtocols.vcxproj b/Code/Game/GameProtocols/GameProtocols.vcxproj
index 4b0d7c39..12584afb 100644
--- a/Code/Game/GameProtocols/GameProtocols.vcxproj
+++ b/Code/Game/GameProtocols/GameProtocols.vcxproj
@@ -154,7 +154,6 @@
-
diff --git a/Code/Game/GameProtocols/ObjectProtocols.h b/Code/Game/GameProtocols/ObjectProtocols.h
index 101c5f42..5619c8b2 100644
--- a/Code/Game/GameProtocols/ObjectProtocols.h
+++ b/Code/Game/GameProtocols/ObjectProtocols.h
@@ -15,7 +15,7 @@ namespace GameLogic
Protocol_ObjectPosition()
{
- this->protocol[0].value = protocol_PlayerPosition;
+ this->protocol[0].value = protocol_Gamplay_ObjectPosition;
this->protocol[0].type = Oyster::Network::NetAttributeType_Int;
this->protocol[1].type = Oyster::Network::NetAttributeType_Float;
@@ -41,20 +41,21 @@ namespace GameLogic
this->protocol[1].value = worldMatrix[0];
this->protocol[2].value = worldMatrix[1];
- this->protocol[3].value = worldMatrix[2]; //Forgot?
- this->protocol[4].value = worldMatrix[4]; //Forgot?
- this->protocol[5].value = worldMatrix[5];
- this->protocol[6].value = worldMatrix[6];
- this->protocol[7].value = worldMatrix[7];
- this->protocol[8].value = worldMatrix[8];
- this->protocol[9].value = worldMatrix[9];
- this->protocol[10].value = worldMatrix[10];
- this->protocol[11].value = worldMatrix[11];
- this->protocol[12].value = worldMatrix[12];
- this->protocol[13].value = worldMatrix[13];
- this->protocol[14].value = worldMatrix[14];
- this->protocol[15].value = worldMatrix[15];
- this->protocol[16].value = worldMatrix[16];
+ this->protocol[3].value = worldMatrix[2];
+ this->protocol[4].value = worldMatrix[3];
+ this->protocol[5].value = worldMatrix[4];
+ this->protocol[6].value = worldMatrix[5];
+ this->protocol[7].value = worldMatrix[6];
+ this->protocol[8].value = worldMatrix[7];
+ this->protocol[9].value = worldMatrix[8];
+ this->protocol[10].value = worldMatrix[9];
+ this->protocol[11].value = worldMatrix[10];
+ this->protocol[12].value = worldMatrix[11];
+ this->protocol[13].value = worldMatrix[12];
+ this->protocol[14].value = worldMatrix[13];
+ this->protocol[15].value = worldMatrix[14];
+ this->protocol[16].value = worldMatrix[15];
+ this->protocol[17].value = worldMatrix[16];
return &protocol;
}
diff --git a/Code/Game/GameProtocols/PlayerProtocols.h b/Code/Game/GameProtocols/PlayerProtocols.h
index f0464ffc..4334b87a 100644
--- a/Code/Game/GameProtocols/PlayerProtocols.h
+++ b/Code/Game/GameProtocols/PlayerProtocols.h
@@ -15,7 +15,6 @@ namespace GameLogic
{
struct Protocol_PlayerMovement :public Oyster::Network::CustomProtocolObject
{
- int ProtocolID;
bool bForward;
bool bBackward;
bool bTurnLeft;
@@ -25,9 +24,9 @@ namespace GameLogic
Protocol_PlayerMovement()
{
- this->protocol[0].value = ProtocolID = protocol_Gamplay_PlayerNavigation;
+ this->protocol[0].value = protocol_Gamplay_PlayerNavigation;
- this->protocol[0].type = Oyster::Network::NetAttributeType_Int;
+ this->protocol[0].type = Oyster::Network::NetAttributeType_Short;
this->protocol[1].type = Oyster::Network::NetAttributeType_Bool;
this->protocol[2].type = Oyster::Network::NetAttributeType_Bool;
this->protocol[3].type = Oyster::Network::NetAttributeType_Bool;
@@ -68,7 +67,6 @@ namespace GameLogic
}
Oyster::Network::CustomNetProtocol* GetProtocol() override
{
-
this->protocol[1].value = position[0];
this->protocol[2].value = position[1];
this->protocol[3].value = position[2];
diff --git a/Code/Misc/Thread/OysterThread_Impl.cpp b/Code/Misc/Thread/OysterThread_Impl.cpp
index b8a9b962..f4ff458c 100644
--- a/Code/Misc/Thread/OysterThread_Impl.cpp
+++ b/Code/Misc/Thread/OysterThread_Impl.cpp
@@ -84,7 +84,13 @@ using namespace Utility::DynamicMemory;
}
~PrivateData()
{
- threadData.Release();
+ //if(threadData.Release() == 0)
+ //{
+ // if(this->threadData->workerThread->joinable())
+ // {
+ // this->threadData->workerThread->join();
+ // }
+ //}
}
};
@@ -115,7 +121,8 @@ theBegining:
std::this_thread::yield();
break;
}
- if(w->owner) shouldContinue = w->owner->DoWork();
+ if(w->owner)
+ shouldContinue = w->owner->DoWork();
if(w->state == OYSTER_THREAD_STATE_RESET) goto theBegining;
else if(w->msec > 0) std::this_thread::sleep_for(std::chrono::milliseconds(w->msec));
@@ -125,7 +132,8 @@ theBegining:
if(w->state == OYSTER_THREAD_STATE_DEAD)
{
- if(w->workerThread->joinable()) w->workerThread->detach();
+ if(w->workerThread->joinable())
+ w->workerThread->detach();
return;
}
@@ -159,6 +167,7 @@ OysterThread::~OysterThread()
OYSTER_THREAD_ERROR OysterThread::Create(IThreadObject* worker, bool start)
{
if(!this->privateData) return OYSTER_THREAD_ERROR_FAILED;
+ if(this->IsCreated()) return OYSTER_THREAD_ERROR_FAILED;
if(this->privateData->threadData->workerThread) return OYSTER_THREAD_ERROR_FAILED;
this->privateData->threadData->owner = worker;
@@ -175,6 +184,8 @@ OYSTER_THREAD_ERROR OysterThread::Create(IThreadObject* worker, bool start)
{
this->privateData->threadData->state = OYSTER_THREAD_STATE_RUNNING;
}
+
+ this->privateData->isCreated = true;
return OYSTER_THREAD_ERROR_SUCCESS;
}
OYSTER_THREAD_ERROR OysterThread::Start()
diff --git a/Code/Network/NetworkAPI/NetworkCallbackHelper.h b/Code/Network/NetworkAPI/NetworkCallbackHelper.h
index c99f2c5f..b088ea5c 100644
--- a/Code/Network/NetworkAPI/NetworkCallbackHelper.h
+++ b/Code/Network/NetworkAPI/NetworkCallbackHelper.h
@@ -26,11 +26,11 @@ namespace Oyster
class NetworkClient;
class CustomNetProtocol;
- typedef void (*ClientConnectCallbackMethod)(NetworkClient);
+ typedef void (*ClientConnectCallbackMethod)(NetworkClient*);
typedef void(*ProtocolRecieverFunction)(CustomNetProtocol& protocol);
struct ClientConnectedObject
{
- virtual void ClientConnectCallback(NetworkClient& client) = 0;
+ virtual void ClientConnectCallback(NetworkClient* client) = 0;
};
struct ProtocolRecieverObject
{
diff --git a/Code/Network/NetworkAPI/NetworkClient.cpp b/Code/Network/NetworkAPI/NetworkClient.cpp
index 365d7432..e5f910e8 100644
--- a/Code/Network/NetworkAPI/NetworkClient.cpp
+++ b/Code/Network/NetworkAPI/NetworkClient.cpp
@@ -85,10 +85,10 @@ struct NetworkClient::PrivateData : public IThreadObject
{
if(!this->data)return true;
if(!this->data->connection.IsConnected()) return true;
-
+
Send();
Recv();
-
+
return true;
}
@@ -122,32 +122,30 @@ struct NetworkClient::PrivateData : public IThreadObject
{
int errorCode = -1;
- if(this->data->callbackType == NetworkProtocolCallbackType_Function)
- {
- OysterByte temp = OysterByte();
- errorCode = this->data->connection.Recieve(temp);
-
- if(errorCode == 0)
- {
- CustomNetProtocol protocol;
- bool ok = this->data->translator.Unpack(protocol, temp);
+ OysterByte temp = OysterByte();
+ errorCode = this->data->connection.Recieve(temp);
- //Check if the protocol was unpacked correctly
- if(ok)
+ if(errorCode == 0 && temp.GetSize())
+ {
+ CustomNetProtocol protocol;
+ bool ok = this->data->translator.Unpack(protocol, temp);
+
+ //Check if the protocol was unpacked correctly
+ if(ok)
+ {
+ this->data->recvObjMutex.lock();
+ if(this->data->callbackType == NetworkProtocolCallbackType_Function)
{
- this->data->recvObjMutex.lock();
- if(this->data->callbackType == NetworkProtocolCallbackType_Function)
- {
- this->data->recvObj.protocolRecieverFnc(protocol);
- }
- else if(this->data->callbackType == NetworkProtocolCallbackType_Object)
- {
- this->data->recvObj.protocolRecievedObject->ProtocolRecievedCallback(protocol);
- }
- this->data->recvObjMutex.unlock();
+ this->data->recvObj.protocolRecieverFnc(protocol);
}
+ else if(this->data->callbackType == NetworkProtocolCallbackType_Object)
+ {
+ this->data->recvObj.protocolRecievedObject->ProtocolRecievedCallback(protocol);
+ }
+ this->data->recvObjMutex.unlock();
}
}
+
return errorCode;
}
diff --git a/Code/Network/NetworkAPI/NetworkServer.cpp b/Code/Network/NetworkAPI/NetworkServer.cpp
index e7570281..5a02d767 100644
--- a/Code/Network/NetworkAPI/NetworkServer.cpp
+++ b/Code/Network/NetworkAPI/NetworkServer.cpp
@@ -156,12 +156,12 @@ void NetworkServer::PrivateData::CheckForNewClient()
//Create client and Proc function if the pointer is not NULL
if(initDesc.callbackType == NetworkClientCallbackType_Function)
{
- Oyster::Network::NetworkClient client(clientSocketNum);
+ Oyster::Network::NetworkClient *client = new Oyster::Network::NetworkClient(clientSocketNum);
initDesc.recvObj.clientConnectFnc(client);
}
else if(initDesc.callbackType == NetworkClientCallbackType_Object)
{
- Oyster::Network::NetworkClient client(clientSocketNum);
+ Oyster::Network::NetworkClient *client = new Oyster::Network::NetworkClient(clientSocketNum);
initDesc.recvObj.clientConnectObject->ClientConnectCallback(client);
}
}
diff --git a/Code/Network/NetworkDependencies/Connection.cpp b/Code/Network/NetworkDependencies/Connection.cpp
index 84a0cbcc..6b1e72bd 100644
--- a/Code/Network/NetworkDependencies/Connection.cpp
+++ b/Code/Network/NetworkDependencies/Connection.cpp
@@ -7,23 +7,37 @@
using namespace Oyster::Network;
+int CloseSocket(int &socket)
+{
+ if(socket == -1) return 0;
+
+ if(closesocket( socket ) == SOCKET_ERROR)
+ {
+ return WSAGetLastError();
+ }
+
+ socket = -1;
+
+ return 0;
+}
+
Connection::Connection()
{
this->socket = -1;
- bool stillSending = false;
- bool closed = true;
+ this->stillSending = false;
+ this->closed = true;
}
Connection::Connection(int socket)
{
this->socket = socket;
- bool stillSending = false;
- bool closed = true;
+ this->stillSending = true;
+ this->closed = false;
}
Connection::~Connection()
{
- closesocket( this->socket );
+ CloseSocket( this->socket );
}
int Connection::Connect(unsigned short port , const char serverName[])
@@ -68,7 +82,7 @@ int Connection::InitiateServer(unsigned short port)
if(bind(this->socket, (sockaddr*)&server, sizeof(server)) == SOCKET_ERROR)
{
errorCode = WSAGetLastError();
- closesocket(this->socket);
+ CloseSocket(this->socket);
return errorCode;
}
@@ -76,7 +90,7 @@ int Connection::InitiateServer(unsigned short port)
if(listen(this->socket, 5) == SOCKET_ERROR)
{
errorCode = WSAGetLastError();
- closesocket(this->socket);
+ CloseSocket(this->socket);
return errorCode;
}
@@ -94,14 +108,7 @@ int Connection::InitiateClient()
int Connection::Disconnect()
{
- int result = closesocket(this->socket);
-
- if(result == SOCKET_ERROR)
- {
- return WSAGetLastError();
- }
-
- return 0;
+ return CloseSocket(this->socket);
}
int Connection::Send(OysterByte &bytes)
@@ -186,6 +193,8 @@ int Connection::SetBlockingMode(bool blocking)
///////////////////////////////////////
int Connection::InitiateSocket()
{
+ if(this->socket != -1) return 0;
+
this->socket = (int)::socket(AF_INET, SOCK_STREAM, 0);
if(this->socket == SOCKET_ERROR)
{
diff --git a/Code/Network/OysterNetworkClient/ClientMain.cpp b/Code/Network/OysterNetworkClient/ClientMain.cpp
index a04294c6..7f8c9cf5 100644
--- a/Code/Network/OysterNetworkClient/ClientMain.cpp
+++ b/Code/Network/OysterNetworkClient/ClientMain.cpp
@@ -7,6 +7,8 @@
#include "../../Misc/Utilities.h"
#include "../NetworkAPI/NetworkClient.h"
+#include "..\..\Game\GameProtocols\PlayerProtocols.h"
+
using namespace std;
using namespace Oyster::Network;
@@ -34,6 +36,8 @@ int main()
errorCode = client.Connect(15151, "127.0.0.1");
client.SetRecieverObject(proc, NetworkProtocolCallbackType_Function);
+
+
if(errorCode != 1)
{
printf("%d", errorCode);
@@ -41,11 +45,14 @@ int main()
}
//client.SetRecieverObject(proc, NetworkProtocolCallbackType_Function);
- cout << "Done" << endl;
+ std::cout << "Done" << endl;
+ GameLogic::Protocol_PlayerMovement p;
while(1)
{
-
+ std::cout << ". ";
+ client.Send(p);
+ Sleep(100000);
}
ShutdownWinSock();
diff --git a/Code/Network/OysterNetworkClient/OysterNetworkClient.vcxproj b/Code/Network/OysterNetworkClient/OysterNetworkClient.vcxproj
index 81d1d6ee..508cd9a2 100644
--- a/Code/Network/OysterNetworkClient/OysterNetworkClient.vcxproj
+++ b/Code/Network/OysterNetworkClient/OysterNetworkClient.vcxproj
@@ -69,28 +69,28 @@
$(SolutionDir)..\Bin\Executable\
$(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\
$(ProjectName)_$(PlatformShortName)D
- C:\Program Files %28x86%29\Visual Leak Detector\include;$(IncludePath)
+ C:\Program Files %28x86%29\Visual Leak Detector\include;$(SolutionDir)Network\NetworkAPI\;$(IncludePath)
$(LibraryPath);$(SolutionDir)..\External\Lib\NetworkAPI;C:\Program Files (x86)\Visual Leak Detector\lib\Win32;C:\Program Files %28x86%29\Visual Leak Detector\lib\Win32;$(OutDir)..\DLL\
$(SolutionDir)..\Bin\Executable\
$(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\
$(ProjectName)_$(PlatformShortName)
- C:\Program Files %28x86%29\Visual Leak Detector\include;$(IncludePath)
+ C:\Program Files %28x86%29\Visual Leak Detector\include;$(SolutionDir)Network\NetworkAPI\;$(IncludePath)
C:\Program Files (x86)\Visual Leak Detector\lib\Win32;$(LibraryPath);$(OutDir)..\DLL\;C:\Program Files %28x86%29\Visual Leak Detector\lib\Win32
$(SolutionDir)..\Bin\Executable\
$(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\
$(ProjectName)_$(PlatformShortName)D
- C:\Program Files %28x86%29\Visual Leak Detector\include;$(IncludePath)
+ C:\Program Files %28x86%29\Visual Leak Detector\include;$(SolutionDir)Network\NetworkAPI\;$(IncludePath)
C:\Program Files (x86)\Visual Leak Detector\lib\Win64;$(LibraryPath);$(OutDir)..\DLL\
$(SolutionDir)..\Bin\Executable\
$(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\
$(ProjectName)_$(PlatformShortName)
- C:\Program Files %28x86%29\Visual Leak Detector\include;$(IncludePath)
+ C:\Program Files %28x86%29\Visual Leak Detector\include;$(SolutionDir)Network\NetworkAPI\;$(IncludePath)
C:\Program Files (x86)\Visual Leak Detector\lib\Win64;$(LibraryPath);$(OutDir)..\DLL\
@@ -159,6 +159,14 @@
+
+ {da2aa800-ed64-4649-8b3b-e7f1e3968b78}
+ false
+ true
+ false
+ true
+ true
+
{2ec4dded-8f75-4c86-a10b-e1e8eb29f3ee}