/************************************************************************
MeOS - Orienteering Software
Copyright (C) 2009-2019 Melin Software HB
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
Melin Software HB - software@melin.nu - www.melin.nu
Eksoppsvägen 16, SE-75646 UPPSALA, Sweden
************************************************************************/
// meosdb.cpp : Defines the exported functions for the DLL application.
//
#include "stdafx.h"
#ifdef c
#include "meosdb.h"
#else
#define MEOSDB_API
#endif
#include
#include
#include
#include
#include
#include "MeosSQL.h"
#include "../meos_util.h"
using namespace std;
#include "../oRunner.h"
#include "../oEvent.h"
#include "../Localizer.h"
#include
#ifdef BUILD_DB_DLL
HINSTANCE hInst=0;
Localizer lang;
#endif
int MEOSDB_API getMeosVersion()
{
return getMeosBuild();
}
MeosSQL msql;
static int nSynchList = 0;
static int nSynchEnt = 0;
int getListMask(oEvent &oe) {
return msql.getModifiedMask(oe);
}
bool MEOSDB_API msSynchronizeList(oEvent *oe, oListId lid)
{
nSynchList++;
if (nSynchList % 100 == 99)
OutputDebugString(L"Synchronized 100 lists\n");
if (lid == oListId::oLRunnerId)
return msql.syncListRunner(oe);
else if (lid == oListId::oLClassId)
return msql.syncListClass(oe);
else if (lid == oListId::oLCourseId)
return msql.syncListCourse(oe);
else if (lid == oListId::oLControlId)
return msql.syncListControl(oe);
else if (lid == oListId::oLClubId)
return msql.syncListClub(oe);
else if (lid == oListId::oLCardId)
return msql.syncListCard(oe);
else if (lid == oListId::oLPunchId)
return msql.syncListPunch(oe);
else if (lid == oListId::oLTeamId)
return msql.syncListTeam(oe);
return false;
}
int MEOSDB_API msSynchronizeUpdate(oBase *obj)
{
if (typeid(*obj)==typeid(oRunner)){
return msql.syncUpdate((oRunner *) obj, false);
}
else if (typeid(*obj)==typeid(oClass)){
return msql.syncUpdate((oClass *) obj, false);
}
else if (typeid(*obj)==typeid(oCourse)){
return msql.syncUpdate((oCourse *) obj, false);
}
else if (typeid(*obj)==typeid(oControl)){
return msql.syncUpdate((oControl *) obj, false);
}
else if (typeid(*obj)==typeid(oClub)){
return msql.syncUpdate((oClub *) obj, false);
}
else if (typeid(*obj)==typeid(oCard)){
return msql.syncUpdate((oCard *) obj, false);
}
else if (typeid(*obj)==typeid(oFreePunch)){
return msql.syncUpdate((oFreePunch *) obj, false);
}
else if (typeid(*obj)==typeid(oEvent)){
return msql.SyncUpdate((oEvent *) obj);
}
else if (typeid(*obj)==typeid(oTeam)){
return msql.syncUpdate((oTeam *) obj, false);
}
return 0;
}
int MEOSDB_API msSynchronizeRead(oBase *obj)
{
nSynchEnt++;
if (nSynchEnt % 100 == 99)
OutputDebugString(L"Synchronized 100 entities\n");
if (typeid(*obj)==typeid(oRunner)){
return msql.syncRead(false, (oRunner *) obj );
}
else if (typeid(*obj)==typeid(oClass)){
return msql.syncRead(false, (oClass *) obj);
}
else if (typeid(*obj)==typeid(oCourse)){
return msql.syncRead(false, (oCourse *) obj);
}
else if (typeid(*obj)==typeid(oControl)){
return msql.syncRead(false, (oControl *) obj);
}
else if (typeid(*obj)==typeid(oClub)){
return msql.syncRead(false, (oClub *) obj);
}
else if (typeid(*obj)==typeid(oCard)){
return msql.syncRead(false, (oCard *) obj);
}
else if (typeid(*obj)==typeid(oFreePunch)){
return msql.syncRead(false, (oFreePunch *) obj, true);
}
else if (typeid(*obj)==typeid(oTeam)){
return msql.syncRead(false, (oTeam *) obj);
}
else if (typeid(*obj)==typeid(oEvent)){
return msql.SyncRead((oEvent *) obj);
}
return 0;
}
// Removes (marks it as removed) an entry from the database.
int MEOSDB_API msRemove(oBase *obj)
{
return msql.Remove(obj);
}
// Checks the database connection, lists other connected components
// and register ourself in the database. The value oe=0 unregister us.
int MEOSDB_API msMonitor(oEvent *oe)
{
return msql.checkConnection(oe);
}
// Tries to open the database defined by oe.
int MEOSDB_API msUploadRunnerDB(oEvent *oe)
{
return msql.uploadRunnerDB(oe);
}
// Tries to open the database defined by oe.
int MEOSDB_API msOpenDatabase(oEvent *oe)
{
return msql.openDB(oe);
}
// Tries to remove the database defined by oe.
int MEOSDB_API msDropDatabase(oEvent *oe)
{
return msql.dropDatabase(oe);
}
// Tries to connect to the server defined by oe.
int MEOSDB_API msConnectToServer(oEvent *oe)
{
return msql.listCompetitions(oe, false);
}
// Reloads competitions. Assumes a connection.
int MEOSDB_API msListCompetitions(oEvent *oe)
{
return msql.listCompetitions(oe, true);
}
// Fills string msgBuff with the current error stage
bool MEOSDB_API msGetErrorState(char *msgBuff)
{
return msql.getErrorMessage(msgBuff);
}
// Close database connection.
bool MEOSDB_API msResetConnection()
{
return msql.closeDB();
}
// Try to reconnect to the database. Returns true if successful.
bool MEOSDB_API msReConnect()
{
return msql.reConnect();
}
bool repairTables(const string &db, vector &output) {
return msql.repairTables(db, output);
}
#ifdef BUILD_DB_DLL
bool getUserFile(char *file, const char *in)
{
throw 0;
strcpy_s(file, 256, in);
return true;
}
string MakeDash(string)
{
throw 0;
return "";
}
bool __cdecl GetRandomBit()
{
throw 0;
return true;
}
int __cdecl GetRandomNumber(int)
{
throw 0;
return 0;
}
#endif