// Common includes #include #include #include #include "RakNetworkFactory.h" #include "GetTime.h" #include "RakPeerInterface.h" #include "PacketEnumerations.h" #include "BitStream.h" #include "StringCompressor.h" #include "FileListTransfer.h" // Server only includes #include "AutopatcherServer.h" // Replace this repository with your own implementation if you don't want to use PostgreSQL #include "PostgreRepository.h" #ifdef _WIN32 #include // Sleep #else #include // usleep #endif void main(int argc, char **argv) { RakPeerInterface *rakPeer; rakPeer = RakNetworkFactory::GetRakPeerInterface(); printf("Server starting... "); rakPeer->Initialize(8,60000,0,0); rakPeer->SetMaximumIncomingConnections(8); printf("started.\n"); AutopatcherServer autopatcherServer; rakPeer->AttachPlugin(&autopatcherServer); PostgreRepository postgre; autopatcherServer.SetAutopatcherRepositoryInterface(&postgre); FileListTransfer fileListTransfer; autopatcherServer.SetFileListTransferPlugin(&fileListTransfer); rakPeer->AttachPlugin(&fileListTransfer); // printf("Enter database password:\n"); char connectionString[256]; //, password[128]; char username[256]; strcpy(username, "postgres"); // gets(password); strcpy(connectionString, "user="); strcat(connectionString, username); // strcat(connectionString, " password="); // strcat(connectionString, password); if (postgre.Connect(connectionString)==false) { printf("Database connection failed.\n"); return; } printf("Database connection suceeded.\n"); printf("(D)rop database\n(C)reate database.\n(A)dd application\n(U)pdate revision.\n(R)emove application\n(Q)uit\n"); char ch; Packet *p; while (1) { p=rakPeer->Receive(); while (p) { if (p->data[0]==ID_NEW_INCOMING_CONNECTION) printf("ID_NEW_INCOMING_CONNECTION\n"); else if (p->data[0]==ID_DISCONNECTION_NOTIFICATION) printf("ID_DISCONNECTION_NOTIFICATION\n"); else if (p->data[0]==ID_CONNECTION_LOST) printf("ID_CONNECTION_LOST\n"); rakPeer->DeallocatePacket(p); p=rakPeer->Receive(); } if (kbhit()) { ch=getch(); if (ch=='q') break; else if (ch=='c') { if (postgre.CreateAutopatcherTables()==false) printf("%s", postgre.GetLastError()); } else if (ch=='d') { if (postgre.DestroyAutopatcherTables()==false) printf("%s", postgre.GetLastError()); } else if (ch=='a') { printf("Enter application name to add: "); char appName[512]; gets(appName); if (appName[0]==0) strcpy(appName, "TestApp"); if (postgre.AddApplication(appName, username)==false) printf("%s", postgre.GetLastError()); else printf("Done\n"); } else if (ch=='r') { printf("Enter application name to remove: "); char appName[512]; gets(appName); if (appName[0]==0) strcpy(appName, "TestApp"); if (postgre.RemoveApplication(appName)==false) printf("%s", postgre.GetLastError()); else printf("Done\n"); } else if (ch=='u') { printf("Enter application name: "); char appName[512]; gets(appName); if (appName[0]==0) strcpy(appName, "TestApp"); printf("Enter application directory: "); char appDir[512]; gets(appDir); if (appDir[0]==0) strcpy(appDir, "C:/temp/autopatcherserver"); if (postgre.UpdateApplicationFiles(appName, appDir, username)==false) { printf("%s", postgre.GetLastError()); } else { printf("Update success.\n"); } } } Sleep(30); } RakNetworkFactory::DestroyRakPeerInterface(rakPeer); }