//-------------------------------------------------------------------------- bool VeRTTI::CopyName(VeChar8* acNameBuffer, VeUInt32 u32MaxSize) const { const VeChar8* pcName = GetName(); if(!pcName || !acNameBuffer) { VeStrcpy(acNameBuffer, u32MaxSize, "\0"); return false; } VeStrcpy(acNameBuffer, u32MaxSize, pcName); return true; }
//-------------------------------------------------------------------------- VE_BOOL VeWindows::AddDisplay(LPSTR DeviceName) { VeDevice::VideoDisplay kDisplay; DisplayData* pkDisplayData; VeDevice::DisplayMode kMode; DISPLAY_DEVICE kDevice; if(!GetDisplayMode(DeviceName, ENUM_CURRENT_SETTINGS, &kMode)) { return VE_FALSE; } pkDisplayData = VE_NEW DisplayData; if(!pkDisplayData) { return VE_FALSE; } VeStrcpy(pkDisplayData->m_acDeviceName, DeviceName); kDevice.cb = sizeof(kDevice); if (EnumDisplayDevices(DeviceName, 0, &kDevice, 0)) { kDisplay.m_kName = kDevice.DeviceString; } kDisplay.m_kDesktopMode = kMode; kDisplay.m_kCurrentMode = kMode; kDisplay.m_spDriverData = pkDisplayData; m_kDisplays.PushBack(kDisplay); return VE_TRUE; }
//-------------------------------------------------------------------------- VeFixedString ToStr(const TCHAR* pcStr) noexcept { VeChar8* pcBuffer = nullptr; VeInt32 i32Size; # ifdef _UNICODE i32Size = WideCharToMultiByte(CP_UTF8, 0, pcStr, -1, 0, 0, 0, FALSE); if (i32Size > 0) { pcBuffer = VeStackAlloc(VeChar8, i32Size + 1); WideCharToMultiByte(CP_UTF8, 0, pcStr, -1, pcBuffer, i32Size, 0, FALSE); } # else i32Size = (VeInt32)VeStrlen(pcStr); if (i32Size > 0) { pcBuffer = VeStackAlloc(VeChar8, i32Size + 1); VeStrcpy(pcBuffer, i32Size + 1, pcStr); } # endif VeFixedString kRes; if (pcBuffer) { kRes = pcBuffer; VeStackFree(pcBuffer); pcBuffer = nullptr; } return kRes; }
//-------------------------------------------------------------------------- void VeWindows::InitDisplayModes() { DISPLAY_DEVICE kDevice; kDevice.cb = sizeof(DISPLAY_DEVICE); for(VeInt32 i32Pass(0); i32Pass < 2; ++i32Pass) { for(VeDWord i(0); ; ++i) { VeChar8 acDeviceName[32]; if(!EnumDisplayDevicesA(NULL, i, &kDevice, 0)) break; if(!(kDevice.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)) continue; if(i32Pass == 0) { if(!(kDevice.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE)) continue; } else { if(kDevice.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE) continue; } VeStrcpy(acDeviceName, kDevice.DeviceName); VeDWord dwCount(0); for(VeDWord j(0); ; ++j) { if(!EnumDisplayDevices(acDeviceName, j, &kDevice, 0)) break; if(!(kDevice.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)) continue; if(i32Pass == 0) { if(!(kDevice.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE)) continue; } else { if(kDevice.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE) continue; } dwCount += AddDisplay(kDevice.DeviceName); } if(dwCount == 0) { AddDisplay(acDeviceName); } } } VE_ASSERT(m_kDisplays.Size()); }
//-------------------------------------------------------------------------- VeFixedString ToStrReplaceIegality(const TCHAR* pcStr) noexcept { VeChar8* pcBuffer = nullptr; VeInt32 i32Size; # ifdef _UNICODE i32Size = WideCharToMultiByte(CP_UTF8, 0, pcStr, -1, 0, 0, 0, FALSE); if (i32Size > 0) { pcBuffer = VeStackAlloc(VeChar8, i32Size + 1); WideCharToMultiByte(CP_UTF8, 0, pcStr, -1, pcBuffer, i32Size, 0, FALSE); } # else i32Size = (VeInt32)VeStrlen(pcStr); if (i32Size > 0) { pcBuffer = VeStackAlloc(VeChar8, i32Size + 1); VeStrcpy(pcBuffer, i32Size + 1, pcStr); } # endif VeFixedString kRes; if (pcBuffer) { { VeChar8* pcTemp = pcBuffer; while (*pcTemp) { VeChar8 c = *pcTemp; if (c == ' ' || c == '/' || c == '\\' || c == ':' || c == '#' || c == '.') { *pcTemp = '_'; } ++pcTemp; } } kRes = pcBuffer; VeStackFree(pcBuffer); pcBuffer = nullptr; } return kRes; }
//-------------------------------------------------------------------------- void Server::Start() { VeXMLElement* pkServer = m_kConfig.RootElement()->FirstChildElement("Server"); const VeChar8* pcVersion = pkServer->FirstChildElement("Version")->GetText(); { VeZeroMemory(&m_kVersion, sizeof(Version)); VeChar8 acBuffer[64]; VeStrcpy(acBuffer, 64, pcVersion); VeChar8* pcContext; const VeChar8* pcTemp = VeStrtok(acBuffer, ".", &pcContext); VeUInt32 i(0); while(pcTemp && i < 4) { m_kVersion.m_au8Version[i] = VeAtoi(pcTemp); pcTemp = VeStrtok(NULL, ".", &pcContext); ++i; } } VeUInt16 u16Port; VE_ASSERT_EQ(VeStringA(pkServer->FirstChildElement("ServerPort")->GetText()).To(u16Port), true); VeUInt16 u16MaxConnections; VE_ASSERT_EQ(VeStringA(pkServer->FirstChildElement("MaxConnections")->GetText()).To(u16MaxConnections), true); VeUInt32 u32TimeOut; VE_ASSERT_EQ(VeStringA(pkServer->FirstChildElement("TimeOut")->GetText()).To(u32TimeOut), true); const VeChar8* pcPassword = pkServer->FirstChildElement("Password")->GetText(); m_pkPeer->SetIncomingPassword(pcPassword, (VeInt32)VeStrlen(pcPassword)); m_pkPeer->SetTimeoutTime(u32TimeOut, UNASSIGNED_SYSTEM_ADDRESS); SocketDescriptor akSocketDesc[2]; akSocketDesc[0].port = u16Port; akSocketDesc[0].socketFamily = AF_INET; akSocketDesc[1].port = u16Port; akSocketDesc[1].socketFamily = AF_INET6; bool bRes = m_pkPeer->Startup(u16MaxConnections, akSocketDesc, 2, 30) == VENET_STARTED; m_pkPeer->SetMaximumIncomingConnections(u16MaxConnections); if(bRes) { printf("%s Server Started, Waiting For Connections.\n", m_kName); } else { bRes = m_pkPeer->Startup(u16MaxConnections, akSocketDesc, 1, 30) == VENET_STARTED; if(!bRes) { VeChar8 acBuffer[256]; VeSprintf(acBuffer, 256, "%s Server failed to start. Terminating.", m_kName); puts(acBuffer); exit(1); } printf("%s Server Started, Waiting For Connections.\n", m_kName); } m_pkPeer->SetOccasionalPing(true); m_pkPeer->SetUnreliableTimeout(1000); DataStructures::List< VENetSmartPtr<VENetSocket> > kSockets; m_pkPeer->GetSockets(kSockets); for(VeUInt32 i(0); i < kSockets.Size(); ++i) { printf("Ports Used By :%i. %i\n", i+1, kSockets[i]->boundAddress.ToString(true)); } for(VeUInt32 i(0); i < m_pkPeer->GetNumberOfAddresses(); ++i) { printf("\n本机可提供服务的IP :\n%i. %s\n", i+1, m_pkPeer->GetLocalIP(i)); } printf("%s Server GUID is %s\n", m_kName, m_pkPeer->GetGuidFromSystemAddress(UNASSIGNED_SYSTEM_ADDRESS).ToString()); { VeXMLElement* pkDBLink = m_kConfig.RootElement()->FirstChildElement("DBLink"); VeStringA kAccount = pkDBLink->FirstChildElement("Account")->GetText(); VeStringA kPassword = pkDBLink->FirstChildElement("Password")->GetText(); VeStringA kDBSource = pkDBLink->FirstChildElement("DBSource")->GetText(); printf("\nDBSource :%s\n", pkDBLink->FirstChildElement("DBSource")->GetText()); m_kDatabase = VE_NEW DBBusiness(kAccount,kPassword,kDBSource); } LoadProperties(); m_u64ServerStartTime = m_u64ServerTime; AttachByDelay(TIMER(_SyncToDatabase), SAVE_DB_DELAY); OnStart(); }