This commit is contained in:
darthsandmann
2016-10-16 21:53:15 +02:00
parent 0d10f8b9dc
commit c9f3117da1
412 changed files with 137942 additions and 0 deletions

View File

@ -0,0 +1,37 @@
# coding: utf-8
import os
import time
import codecs
import json
from app import stream
class manager_cl(object):
exposed = True
def __init__(self):
self.stream = stream.stream_cl()
def LIST(self):
#ausliefern der liste der Auktionen
filelist = {}
filenames = os.listdir('data')
for name in filenames:
if name.endswith('.json'):
charge = codecs.open(os.path.join('data', name), 'rU', 'utf-8')
chargeData = charge.read()
charge.close()
filelist[name]['chargeNr'] = name
filelist[name]['chargeName'] = chargeData['info']['name']
print(filelist)
def LOS(self, charge, los_nr):
#gibt Daten vom Los zurück
pass
def RECEIVE(self, charge):
#erhält Daten einer Charge und legt diese an oder überschreibt sie
#wenn sie bereits existiert
pass

View File

@ -0,0 +1,3 @@
# coding: utf-8
# hier können Paket-Initialisierungen eingetragen werden

View File

@ -0,0 +1,33 @@
# coding: utf-8
import time
import codecs
import json
from app import stream
class chargen_cl(object):
exposed = True
chargenCounter = 1
def __init__(self):
self.stream = stream.stream_cl()
def NEXT(self):
if(self.chargenCounter > self.stream.anzChargen()):
self.chargenCounter = 1
# timeout = 0
# while(self.chargenCounter > self.stream.anzChargen()):
# print(self.stream.anzChargen())
# time.sleep(1)
# timeout += 1
# if(timeout > 3600):
# return -1
newCharge = self.stream.loadCharge(self.chargenCounter)
self.chargenCounter += 1
return json.dumps(newCharge)

View File

@ -0,0 +1,47 @@
# coding: utf-8
import os
import time
import codecs
import json
from app import stream
class log_cl(object):
exposed = True
def __init__(self):
self.stream = stream.stream_cl()
def SEND(self, user, charge, los, preis):
file = codecs.open(os.path.join('data', 'log.txt'), 'r', 'utf-8')
log = json.loads(file.read())
file.close()
counter = 1
for x in log:
counter += 1
counter = str(counter)
log[counter] = {}
log[counter]['user'] = user
log[counter]['charge'] = charge
log[counter]['los'] = los
log[counter]['preis'] = preis
log[counter]['time'] = time.time()
print(log)
file = codecs.open(os.path.join('data', 'log.txt'), 'w', 'utf-8')
file.write(json.dumps(log, indent=3, ensure_ascii=True))
file.close()
def REQ(self):
file = codecs.open(os.path.join('data', 'log.txt'), 'r', 'utf-8')
log = json.loads(file.read())
file.close()
return json.dumps(log)

View File

@ -0,0 +1,35 @@
# coding: utf-8
import os
import time
import codecs
import json
from app import stream
class manager_cl(object):
exposed = True
def __init__(self):
self.stream = stream.stream_cl()
def LIST(self):
chargenliste = {'1': {}, '2': {}}
filenames = os.listdir('data')
for filename in filenames:
if filename.endswith('.json'):
charge = codecs.open(os.path.join('data', filename), 'r', 'utf-8')
chargeData = eval(charge.read())
charge.close()
charge_id = filename[:-5]
chargenliste[charge_id]['chargeName'] = chargeData['info']['name']
print(chargenliste)
return json.dumps(chargenliste)
def LOS(self, charge, los_nr):
pass
def RECEIVE(self, charge):
pass

View File

@ -0,0 +1,31 @@
# coding: utf-8
import os
import os.path
import codecs
import json
class stream_cl(object):
exposed = True
def __init__(self):
pass
def loadCharge(self, id):
filename = str(id)
filename += '.json'
file = codecs.open(os.path.join('data', filename), 'r', 'utf-8')
charge = file.read()
file.close()
return charge
def anzChargen(self):
files = os.listdir('data')
fileCounter = 0
for file in files:
if file.endswith('.json'):
fileCounter += 1
return fileCounter

View File

@ -0,0 +1,55 @@
# coding: utf-8
#not planned
import json
import os
import codecs
import cherrypy
# Method-Dispatching!
# Übersicht Anforderungen / Methoden
# (beachte: / relativ zu /template, siehe Konfiguration Server!)
"""
Anforderung GET PUT POST DELETE
----------------------------------------------------------------
/ Alle - - -
Templates
liefern
"""
#----------------------------------------------------------
class Template_cl(object):
#----------------------------------------------------------
exposed = True # gilt für alle Methoden
#-------------------------------------------------------
def __init__(self):
#-------------------------------------------------------
pass
#-------------------------------------------------------
def GET(self):
#-------------------------------------------------------
retVal_o = {
'templates': {}
}
files_a = os.listdir('templates/engine')
for fileName_s in files_a:
file_o = codecs.open(os.path.join('templates/engine', fileName_s), 'rU', 'utf-8')
content_s = file_o.read()
file_o.close()
retVal_o["templates"][fileName_s] = content_s
return json.dumps(retVal_o)
# EOF

View File

@ -0,0 +1,428 @@
version:
a0.21
date/time:
18.06.15/21:05
fixed:
-
known issues:
- Bots laufen weiter wenn man in anderer Ansicht ist und erzeugen Fehler
- Wechsel von Ansicht Chargenmanager zu Auktion l<>dt irgend ein altes Template (Button Chargenmananger
ohne Funktion), Versionspingpong?
- wenn Auktionszeit = 0 bei Wechsel ansicht, wird beim Wechsel zur<75>ck zu Auktion Canvas nicht mehr angezeigt
- Sinn von 'auktionPreis' unklar
- "uncaught exception: out of memory" tritt sporadisch auf, hat aber keinen Einfluss auf Funktionsweise
- User kann Logfile noch nicht anzeigen
- Logfile wird in "falscher" Reihenfolge angezeigt
- Uhrzeit in Logfiles wird nicht korrekt dargestellt
- [F5] skippt aktuelle Charge
- Chargenliste nicht flexibel, kann nur Charge 1 & 2
new:
- Chargenmanager: Chargenliste
planned:
- Python
- Chargensystem
- Funktion zum Empfangen neuer/bearbeiteter Chargen (Chargenmanager)
- Funtion zum L<>schen einer Charge (Chargenmanager)
- JS, AJAX
- Chargenmanager
- chargen<65>bersicht
- Wizard
- Ansicht
- NavLeiste
- Markup <20>berarbeiten (TemplateEngine implementieren)
- CSS
- verwendung uikit(css framework)
- verwendung inheritance
- verwendung eventService
- Gestaltgesetze
- Doku
######################################################################################
version:
a0.20
date/time:
18.06.15/15:00
fixed:
-
known issues:
- Bots laufen weiter wenn man in anderer Ansicht ist und erzeugen Fehler
- Wechsel von Ansicht Chargenmanager zu Auktion l<>dt irgend ein altes Template (Button Chargenmananger
ohne Funktion), Versionspingpong?
- wenn Auktionszeit = 0 bei Wechsel ansicht, wird beim Wechsel zur<75>ck zu Auktion Canvas nicht mehr angezeigt
- Sinn von 'auktionPreis' unklar
- "uncaught exception: out of memory" tritt sporadisch auf, hat aber keinen Einfluss auf Funktionsweise
- User kann Logfile noch nicht anzeigen
- Logfile wird in "falscher" Reihenfolge angezeigt
- Uhrzeit in Logfiles wird nicht korrekt dargestellt
- [F5] skippt aktuelle Charge
new:
- TemplateEngine implementiert
- Logfile Anzeige implementiert
- Loggingsystem vollst<73>ndig implementiert
- Auktionstakt pausieren/weiter f<>r Wechsel in Chargenmanageransicht und Logfile Ansicht
planned:
- Python
- Chargensystem
- Funktion zum Empfangen neuer/bearbeiteter Chargen (Chargenmanager)
- Funtion zum L<>schen einer Charge (Chargenmanager)
- JS, AJAX
- Chargenmanager
- chargen<65>bersicht
- Wizard
- Ansicht
- NavLeiste
- Markup <20>berarbeiten (TemplateEngine implementieren)
- CSS
- verwendung uikit(css framework)
- verwendung inheritance
- verwendung eventService
- Gestaltgesetze
- Doku
######################################################################################
version:
a0.18
date/time:
17.06.15/20:24
fixed:
- Dateistruktur intuitiver gestaltet
- Testcharge aus chargenloader.js entfernt da nicht mehr notwendig
known issues:
- Sinn von 'auktionPreis' unklar
- "uncaught exception: out of memory" tritt sporadisch auf, hat aber keinen Einfluss auf Funktionsweise
- User kann Logfile noch nicht anzeigen
new:
- erste Version Loggingsystem: Logs werden angelegt
planned:
- Python
- Chargensystem
- Funktion zum Empfangen neuer/bearbeiteter Chargen (Chargenmanager)
- Funtion zum L<>schen einer Charge (Chargenmanager)
- Logfile
- JS, AJAX
- Auktionstakt pausieren/weiter f<>r Wechsel in Chargenmanageransicht
- Chargenmanager
- chargen<65>bersicht
- Wizard
- Ansicht
- NavLeiste
- Loggingsystem implementieren
- Markup <20>berarbeiten (TemplateEngine implementieren)
- CSS
- verwendung uikit(css framework)
- verwendung inheritance
- verwendung eventService
- Gestaltgesetze
- Doku
######################################################################################
version:
a0.17
date/time:
17.06.15/14:15
fixed:
-
known issues:
- Sinn von 'auktionPreis' (transfer.js / var testcharge) unklar
- "uncaught exception: out of memory" tritt sporadisch auf, hat aber keinen Einfluss auf Funktionsweise
new:
- bei Kauf durch Bot farbliche Signalisierung am BotButton
planned:
- Python
- Chargensystem
- Funktion zum Empfangen neuer/bearbeiteter Chargen (Chargenmanager)
- Funtion zum L<>schen einer Charge (Chargenmanager)
- Logfile
- JS, AJAX
- Auktionstakt pausieren/weiter f<>r Wechsel in Chargenmanageransicht
- Chargenmanager
- chargen<65>bersicht
- Wizard
- Ansicht
- NavLeiste
- Loggingsystem implementieren
- Markup <20>berarbeiten (TemplateEngine implementieren)
- CSS
- Gestaltgesetze
- Doku
######################################################################################
version:
a0.16
date/time:
17.06.15/13:10
fixed:
- Bots kann man nur einschalten, nicht aus
- Bots "kaufen" weiter nach letzer Auktion
known issues:
- Sinn von 'auktionPreis' (transfer.js / var testcharge) unklar
new:
- Server stellt die Chargen in Endlosschleife zu verf<72>gung -> kein Simulationsende weil keine
Chargen mehr auf Server, somit ist der Aspekt "Chargen zur Verf<72>gungstellen" server und clientseitig
fertig
- Botbuttons togglen bei Click Funktion (start/stop) und Farbe (gr<67>n/grau)
planned:
- Python
- Chargensystem
- Funktion zum Empfangen neuer/bearbeiteter Chargen (Chargenmanager)
- Funtion zum L<>schen einer Charge (Chargenmanager)
- Logfile
- JS, AJAX
- bei Kauf durch Bot farbliche Signalisierung am BotButton
- Chargenmanager
- chargen<65>bersicht
- Wizard
- Ansicht
- NavLeiste
- Loggingsystem implementieren
- Markup <20>berarbeiten (TemplateEngine implementieren)
- CSS
- Gestaltgesetze
- Doku
######################################################################################
version:
a0.15
date/time:
10.06.15/20:20
fixed:
- Verarbeitung mehrerer Chargen
known issues:
- Bots "kaufen" weiter nach letzer Auktion
- Bots kann man nur einschalten, nicht aus
- Sinn von 'auktionPreis' (transfer.js / var testcharge) unklar
new:
-
planned:
- Python
- Chargensystem
- Weiterverarbeitung fertiger Chargen
- LeerCharge
- Funktion zum Empfangen neuer Chargen
- Loggingfile
- JS, AJAX
- Serveranfrage Chargendaten
- Chargenmanager
- Loggingsystem implementieren
- Markup <20>berarbeiten (TemplateEngine implementieren)
- CSS
######################################################################################
version:
a0.14
date/time:
10.06.15/19:19
fixed:
- Chargendaten werden jetzt "geparst" und vom Client weiterverarbeitet
known issues:
- Server verarbeitet nur die erste Charge
- Bots "kaufen" weiter nach letzer Auktion
- Bots kann man nur einschalten, nicht aus
- Sinn von 'auktionPreis' (transfer.js / var testcharge) unklar
new:
-
planned:
- Python
- Chargensystem
- LeerCharge
- Funktion zum Empfangen neuer Chargen
- Loggingfile
- JS, AJAX
- Serveranfrage Chargendaten
- Chargenmanager
- Loggingsystem implementieren
- Markup <20>berarbeiten (TemplateEngine implementieren)
- CSS
######################################################################################
version:
a0.13
date/time:
09.06.15/23:57
fixed:
-
known issues:
- vom Server erhaltene Chargendaten werden nicht korrekt weiterverarbeitet
- Bots "kaufen" weiter nach letzer Auktion
- Bots kann man nur einschalten, nicht aus
- Sinn von 'auktionPreis' (transfer.js / var testcharge) unklar
new:
- Implementierung der Abfrage und Auslieferung der bestehenden Chargen
an den Client
planned:
- Python
- Chargensystem
- LeerCharge
- Funktion zum Empfangen neuer Chargen
- Loggingfile
- JS, AJAX
- Serveranfrage Chargendaten
- Chargenmanager
- Loggingsystem implementieren
- Markup <20>berarbeiten (TemplateEngine implementieren)
- CSS
######################################################################################
version:
a0.12
date/time:
09.06.15/21:54
fixed:
-
known issues:
- Bots "kaufen" weiter nach letzer Auktion
- Bots kann man nur einschalten, nicht aus
- Sinn von 'auktionPreis' (transfer.js / var testcharge) unklar
new:
- Testchargen angelegt
- Erstellung der grundlegenden Serverstrukturen
planned:
- Python
- Chargensystem
- Testchargen
- LeerCharge
- Funktion zur Auslieferung
- Funktion zum Empfangen neuer Chargen
- Loggingfile
- JS, AJAX
- Serveranfrage Chargendaten
- Chargenmanager
- Loggingsystem implementieren
- Markup <20>berarbeiten (TemplateEngine implementieren)
- CSS
######################################################################################
version:
a.0.11
date/time:
06.06.15/16:15
fixed:
-
known issues:
- Bots "kaufen" weiter nach letzer Auktion
- Bots kann man nur einschalten, nicht aus
- Sinn von 'auktionPreis' (transfer.js / var testcharge) unklar
new:
- grundlegende Serverstruktur
planned:
- Server f<>r Datenhaltung
- Seitenwechsel mit Ajax
- Umstrukturierung HTML-Seite
- Chargenmanager
- Verwendung Template-Engine
- Logfile f<>r Auktionsverl<72>ufe
- <20>berarbeitung der Darstellung der Button zur Simulationssteuerung
######################################################################################
version:
a0.10
date/time:
06.06.2015/15:46
fixed:
-
known issues:
- Bots "kaufen" weiter nach letzer Auktion
- Bots kann man nur einschalten, nicht aus
- Sinn von 'auktionPreis' (transfer.js / var testcharge) unklar
new:
- nur ein Backup...
planned:
- Server f<>r Datenhaltung
- Seitenwechsel mit Ajax
- Umstrukturierung HTML-Seite
- Chargenmanager
- Verwendung Template-Engine
- Logfile f<>r Auktionsverl<72>ufe
- <20>berarbeitung der Darstellung der Button zur Simulationssteuerung
######################################################################################
version:
a0.09
date/time:
20.05.2015/13:10
fixed:
-
known issues:
- Bots "kaufen" weiter nach letzer Auktion
- Bots kann man nur einschalten, nicht aus
- Sinn von 'auktionPreis' (transfer.js / var testcharge) unklar
new:
- farbliche Verdeutlichung des Auktionsfortschrittes in Canvas
planned:
- Server f<>r Datenhaltung
- Chargenmanager
- Logfile f<>r Auktionsverl<72>ufe
- <20>berarbeitung der Darstellung der Button zur Simulationssteuerung

View File

@ -0,0 +1,66 @@
#canvas{
position: absolute;
top: 0;
left: 500px;
width: 300px;
margin: 0;
height: 300px;
}
#aktuelleAuktion{
position: absolute;
top: 410px;
left: 500px;
width: 300px;
margin: 0px;
height: 150px;
background-color: #f9802f;
border-radius: 10px;
border-style: solid;
border-width: 1px;
}
#naechsteAuktion{
position: absolute;
top: 410px;
left: 150px;
width: 300px;
margin: 0;
height: 150px;
background-color: #2fdbf9;
border-radius: 10px;
border-style: solid;
border-width: 1px;
}
#letzteAuktion{
position: absolute;
top: 410px;
left: 850px;
width: 300px;
margin: 0;
height: 150px;
background-color: #dbdad9;
border-radius: 10px;
border-style: solid;
border-width: 1px;
}
#kaufen{
position: absolute;
top: 310px;
height :80px;
width: 200px;
left: 550px;
background-color: green;
border-radius: 10px;
}
#simManager{
position: absolute;
top: 20px;
right: 0;
width: 100px;
}
button{
width: 100px;
background-color: #dbdad9;
}

View File

@ -0,0 +1,11 @@
.botButtonActiveStyle{
background-color: green;
}
.botButtonInactiveStyle{
background-color: #dbdad9;
}
.botButtonBuyActionStyle{
background-color: yellow;
}

View File

@ -0,0 +1,66 @@
{
"info":{
"name": "Charge 1",
"anzAuk": 6,
},
"1":{
"beschreibung": "Charge 1, Auktion 1",
"anzGebinde": 1,
"auktionDauer": 10,
"auktionLaufzeit": 0,
"startPreis": 100,
"minPreis": 50,
"auktionPreis": -1,
"vkPreis": -1,
},
"2":{
"beschreibung": "Charge 1, Auktion 2",
"anzGebinde": 1,
"auktionDauer": 10,
"auktionLaufzeit": 0,
"startPreis": 200,
"minPreis": 100,
"auktionPreis": -1,
"vkPreis": -1,
},
"3":{
"beschreibung": "Charge 1, Auktion 3",
"anzGebinde": 1,
"auktionDauer": 10,
"auktionLaufzeit": 0,
"startPreis": 300,
"minPreis": 150,
"auktionPreis": -1,
"vkPreis": -1,
},
"4":{
"beschreibung": "Charge 1, Auktion 4",
"anzGebinde": 1,
"auktionDauer": 10,
"auktionLaufzeit": 0,
"startPreis": 400,
"minPreis": 200,
"auktionPreis": -1,
"vkPreis": -1,
},
"5":{
"beschreibung": "Charge 1, Auktion 5",
"anzGebinde": 1,
"auktionDauer": 10,
"auktionLaufzeit": 0,
"startPreis": 500,
"minPreis": 250,
"auktionPreis": -1,
"vkPreis": -1,
},
"6":{
"beschreibung": "Charge 1, Auktion 6",
"anzGebinde": 1,
"auktionDauer": 10,
"auktionLaufzeit": 0,
"startPreis": 600,
"minPreis": 300,
"auktionPreis": -1,
"vkPreis": -1,
}
}

View File

@ -0,0 +1,66 @@
{
"info":{
"name": "Charge 2",
"anzAuk": 6,
},
"1":{
"beschreibung": "Charge 2, Auktion 1",
"anzGebinde": 1,
"auktionDauer": 10,
"auktionLaufzeit": 0,
"startPreis": 110,
"minPreis": 50,
"auktionPreis": -1,
"vkPreis": -1,
},
"2":{
"beschreibung": "Charge 2, Auktion 2",
"anzGebinde": 1,
"auktionDauer": 10,
"auktionLaufzeit": 0,
"startPreis": 220,
"minPreis": 100,
"auktionPreis": -1,
"vkPreis": -1,
},
"3":{
"beschreibung": "Charge 2, Auktion 3",
"anzGebinde": 1,
"auktionDauer": 10,
"auktionLaufzeit": 0,
"startPreis": 330,
"minPreis": 150,
"auktionPreis": -1,
"vkPreis": -1,
},
"4":{
"beschreibung": "Charge 2, Auktion 4",
"anzGebinde": 1,
"auktionDauer": 10,
"auktionLaufzeit": 0,
"startPreis": 440,
"minPreis": 200,
"auktionPreis": -1,
"vkPreis": -1,
},
"5":{
"beschreibung": "Charge 2, Auktion 5",
"anzGebinde": 1,
"auktionDauer": 10,
"auktionLaufzeit": 0,
"startPreis": 550,
"minPreis": 250,
"auktionPreis": -1,
"vkPreis": -1,
},
"6":{
"beschreibung": "Charge 2, Auktion 6",
"anzGebinde": 1,
"auktionDauer": 10,
"auktionLaufzeit": 0,
"startPreis": 660,
"minPreis": 300,
"auktionPreis": -1,
"vkPreis": -1,
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,54 @@
<!DOCTYPE html>
<html>
<head>
<title>Blumenladen 333</title>
<meta charset = "UTF-8" />
<style type = "text/css">
@import url("css/auktionsansicht.css");
@import url("css/botButton.css");
</style>
<script type = "text/javascript" src = "js/import/jquery-1.9.1.js"></script>
<script type = "text/javascript" src = "js/import/inheritance.js"></script>
<script type = "text/javascript" src = "js/import/es.js"></script>
<script type = "text/javascript" src = "js/import/te.js"></script>
<script type = "text/javascript" src = "js/import/tm.js"></script>
<script type = "text/javascript" src = "js/view/viewAuktion.js"></script>
<script type = "text/javascript" src = "js/view/viewLog.js"></script>
<script type = "text/javascript" src = "js/view/viewChargenmanager.js"></script>
<script type = "text/javascript" src = "js/view/viewCanvas.js"></script>
<script type = "text/javascript" src = "js/transfer/chargenloader.js"></script>
<script type = "text/javascript" src = "js/transfer/log.js"></script>
<script type = "text/javascript" src = "js/transfer/managerloader.js"></script>
<script type = "text/javascript" src = "js/bot/bot.js"></script>
<script type = "text/javascript" src = "js/bot/botButtonStyle.js"></script>
<script type = "text/javascript" src = "js/kaufen.js"></script>
<script type = "text/javascript" src = "js/main.js"></script>
</head>
<body>
<div id = "content">
<canvas id = "canvas" width = "300" height = "300">Canvas</canvas>
<section id = "kaufen" onclick = kaufen('User')><center><h1>Kaufen</h1></center></section>
<section id = "aktuelleAuktion">aktuelle Auktion</section>
<section id = "naechsteAuktion">n<EFBFBD>chste Auktion</section>
<section id = "letzteAuktion">letzte Auktion</section>
<section id = "simManager">
<p><button id = "bot1Button" class = "botButtonInactiveStyle" onclick = botStart(1)>Bot 1</button></p>
<p><button id = "bot2Button" class = "botButtonInactiveStyle" onclick = botStart(2)>Bot 2</button></p>
<p><button onclick = viewChargenubersicht()>Chargen-Manager</button></p>
<p><button onclick = viewLogfile()>Log-Files</button></p>
</section>
</div>
<input type = "hidden" id = "los_nr" value = "-1">
</body>
</html>

View File

@ -0,0 +1,47 @@
var bot1ID = 0;
var bot2ID = 0;
function randomizer(los_nr){
return (Math.random() * (charge_data[los_nr]['startPreis'] - charge_data[los_nr]['minPreis']) + charge_data[los_nr]['minPreis']);
};
function buyBot(bot){
los_nr = document.getElementById('los_nr').value;
var bet = randomizer(los_nr);
if(charge_data[los_nr]['vkPreis'] < bet){
setBotButtonStyle(bot, 'buyAction');
var botname = 'Bot' + bot;
kaufen(botname);
}
};
function botStart(bot){
setBotButtonStyle(bot, 'active');
if(bot == 1){
bot1ID = setInterval(function(){buyBot(1)}, 1000);
}
else if(bot == 2){
bot2ID = setInterval(function(){buyBot(2)}, 1000);
}
else{
alert("Fehler beim Aktivieren eines Bots");
}
};
function botStop(bot){
setBotButtonStyle(bot, 'inactive');
if(bot == 1){
clearInterval(bot1ID);
bot1ID = 0;
}
else if(bot == 2){
clearInterval(bot2ID);
bot2ID = 0;
}
else{
alert("Fehler beim Aktivieren eines Bots");
}
};

View File

@ -0,0 +1,56 @@
function setBotButtonStyle(bot, style){
var htmlID = 0;
if(bot == 1){
if(style == 'active'){
document.getElementById('bot1Button').className = "botButtonActiveStyle";
document.getElementById('bot1Button').onclick = function onclick(event){ botStop(1);};
}
else if(style == 'inactive'){
document.getElementById('bot1Button').className = "botButtonInactiveStyle";
document.getElementById('bot1Button').onclick = function onclick(event){ botStart(1);};
}
else if(style == 'buyAction'){
document.getElementById('bot1Button').className = "botButtonBuyActionStyle";
setTimeout(function(){ botButtonStyleCheck() }, 500);
}
else{
alert("Fehler beim Stylen von Botbutton");
}
}
else if(bot == 2){
if(style == 'active'){
document.getElementById('bot2Button').className = "botButtonActiveStyle";
document.getElementById('bot2Button').onclick = function onclick(event){ botStop(2);};
}
else if(style == 'inactive'){
document.getElementById('bot2Button').className = "botButtonInactiveStyle";
document.getElementById('bot2Button').onclick = function onclick(event){ botStart(2);};
}
else if(style == 'buyAction'){
document.getElementById('bot2Button').className = "botButtonBuyActionStyle";
setTimeout(function(){ botButtonStyleCheck() }, 500);
}
else{
alert("Fehler beim Stylen von Botbutton");
}
}
else{
alert("Fehler Auswahl eines Botbuttons f<>r Styling");
}
};
function botButtonStyleCheck(){
if(bot1ID != 0){
setBotButtonStyle(1, 'active');
}
else{
setBotButtonStyle(1, 'inactive');
}
if(bot2ID !=0){
setBotButtonStyle(2, 'active');
}
else{
setBotButtonStyle(2, 'inactive');
}
};

View File

@ -0,0 +1,91 @@
//------------------------------------------------------------------------------
// Event-Service: asynchroner Nachrichtenaustausch
//------------------------------------------------------------------------------
// depends-on:
// jquery
// inheritance
// underscore
//------------------------------------------------------------------------------
function defer_p (notifier_ppl, entry_opl, message_spl, data_opl) {
return setTimeout(function() {
return notifier_ppl.apply(entry_opl, [entry_opl, message_spl, data_opl]);
}, 1);
}
function each(object_opl, iterator, context) {
for (var key in object_opl) {
iterator.call(context, object_opl[key], key);
}
}
function findAll(object_opl, iterator, context) {
var results = [];
each(object_opl, function(value, index) {
if (iterator.call(context, value, index))
results.push(value);
});
return results;
}
function compact(object_opl) {
return findAll(object_opl, function(value) {
return value != null;
});
}
//------------------------------------------------------------------------------
var EventService_cl = Class.create({
//------------------------------------------------------------------------------
initialize: function () {
this.Data_o = null;
this.Subscriber_o = {};
this.Method_o = null;
},
subscribe_px: function (Subscriber_opl, Message_spl) {
if (Message_spl in this.Subscriber_o) {
// Message bekannt, Liste der Subscriber untersuchen
if (this.Subscriber_o[Message_spl].indexOf(Subscriber_opl) == -1) {
this.Subscriber_o[Message_spl].push(Subscriber_opl);
}
} else {
// Message noch nicht vorhanden, neu eintragen
this.Subscriber_o[Message_spl] = [Subscriber_opl];
}
},
unSubscribe_px: function (Subscriber_opl, Message_spl) {
if (Message_spl in this.Subscriber_o) {
// Message bekannt, Liste der Subscriber untersuchen
var Entry_a = this.Subscriber_o[Message_spl];
var index_i = Entry_a.indexOf(Subscriber_opl);
if (index_i >= 0) {
// Eintrag entfernen
Entry_a[index_i] = null;
Entry_a = compact(Entry_a); // compact liefert Kopie!
if (Entry_a.length == 0) {
// keine Subscriber mehr, kann entfernt werden
delete this.Subscriber_o[Message_spl];
}
}
} else {
// Message nicht vorhanden, falsche Anforderung
}
},
publish_px: function (Message_spl, Data_opl) {
console.info('es - publish ' + Message_spl);
each(this.Subscriber_o, function (value_apl, key_spl) {
// geliefert wird jeweils ein Wert, hier ein Array, und der Key
if (key_spl == Message_spl) {
// an alle Subscriber weitergeben
each(value_apl, function (entry_opl, index_ipl) {
// geliefert wird hier das Element und der Index
//_.defer(entry_opl.notify_px, entry_opl, Message_spl, Data_opl);
defer_p(entry_opl.notify_px, entry_opl, Message_spl, Data_opl);
}, this
);
}
}, this
)
}
});
// EOF

View File

@ -0,0 +1,122 @@
/*
Class, version 2.7
Copyright (c) 2006, 2007, 2008, Alex Arnell <alex@twologic.com>
Licensed under the new BSD License. See end of file for full license terms.
*/
var Class = (function() {
var __extending = {};
return {
extend: function(parent, def) {
if (arguments.length == 1) { def = parent; parent = null; }
var func = function() {
if (arguments[0] == __extending) { return; }
this.initialize.apply(this, arguments);
};
if (typeof(parent) == 'function') {
func.prototype = new parent( __extending);
}
var mixins = [];
if (def && def.include) {
if (def.include.reverse) {
// methods defined in later mixins should override prior
mixins = mixins.concat(def.include.reverse());
} else {
mixins.push(def.include);
}
delete def.include; // clean syntax sugar
}
if (def) Class.inherit(func.prototype, def);
for (var i = 0; (mixin = mixins[i]); i++) {
Class.mixin(func.prototype, mixin);
}
return func;
},
mixin: function (dest, src, clobber) {
clobber = clobber || false;
if (typeof(src) != 'undefined' && src !== null) {
for (var prop in src) {
if (clobber || (!dest[prop] && typeof(src[prop]) == 'function')) {
dest[prop] = src[prop];
}
}
}
return dest;
},
inherit: function(dest, src, fname) {
if (arguments.length == 3) {
var ancestor = dest[fname], descendent = src[fname], method = descendent;
descendent = function() {
var ref = this.parent; this.parent = ancestor;
var result = method.apply(this, arguments);
ref ? this.parent = ref : delete this.parent;
return result;
};
// mask the underlying method
descendent.valueOf = function() { return method; };
descendent.toString = function() { return method.toString(); };
dest[fname] = descendent;
} else {
for (var prop in src) {
if (dest[prop] && typeof(src[prop]) == 'function') {
Class.inherit(dest, src, prop);
} else {
dest[prop] = src[prop];
}
}
}
return dest;
},
singleton: function() {
var args = arguments;
if (args.length == 2 && args[0].getInstance) {
var klass = args[0].getInstance(__extending);
// we're extending a singleton swap it out for it's class
if (klass) { args[0] = klass; }
}
return (function(args){
// store instance and class in private variables
var instance = false;
var klass = Class.extend.apply(args.callee, args);
return {
getInstance: function () {
if (arguments[0] == __extending) return klass;
if (instance) return instance;
return (instance = new klass());
}
};
})(args);
}
};
})();
// finally remap Class.create for backward compatability with prototype
Class.create = function() {
return Class.extend.apply(this, arguments);
};
/*
Redistribution and use in source and binary forms, with or without modification, are
permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
* Neither the name of typicalnoise.com nor the names of its contributors may be
used to endorse or promote products derived from this software without specific prior
written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,308 @@
//------------------------------------------------------------------------------
// Template-Engine
//------------------------------------------------------------------------------
// depends-on:
// inheritance
//------------------------------------------------------------------------------
// String-Methoden ergänzen
APPCO = {};
APPCO.apply = function(o, c, defaults){
// no "this" reference for friendly out of scope calls
if (defaults) {
APPCO.apply(o, defaults);
}
if (o && c && typeof c == 'object') {
for (var p in c) {
o[p] = c[p];
}
}
return o;
};
// quick and dirty! Manche Autoren lehnen solche Erweiterungen ab
APPCO.apply(String.prototype, {
include: function (pattern) {
return this.indexOf(pattern) > -1;
},
startsWith: function (pattern) {
return this.lastIndexOf(pattern, 0) === 0;
},
endsWith: function (pattern) {
var d = this.length - pattern.length;
return d >= 0 && this.indexOf(pattern, d) === d;
}
});
APPCO.apply(String, {
interpret: function(value) {
return value == null ? '' : String(value);
}
});
// Namensraum
var TELIB = {};
TELIB.Generator_cl = Class.create({
initialize: function () {
this.reset_px();
},
reset_px: function () {
this.code_a = ['var result_a = [];\n'];
},
write_px: function (text_spl) {
// Escape-Zeichen bei Strings ergänzen
var text_s = text_spl.replace(/"/g, '\\"');
text_s = text_s.replace(/'/g, "\\'");
this.code_a.push('result_a.push("' + text_s + '");\n');
},
code_px: function (code_spl) {
if (code_spl.startsWith('if')) {
this.code_a.push('if (' + code_spl.substr(2) + ') {\n');
} else if (code_spl.startsWith('else')) {
this.code_a.push('} else {\n');
} else if (code_spl.startsWith('endif')) {
this.code_a.push('}\n');
} else if (code_spl.startsWith('for')) {
this.code_a.push('for (' + code_spl.substr(3) + ') {\n');
} else if (code_spl.startsWith('endfor')) {
this.code_a.push('}\n');
} else {
this.code_a.push(code_spl + '\n');
}
},
substitute_px: function (subst_spl) {
this.code_a.push('result_a.push(' + String.interpret(subst_spl) + ');\n');
},
generate_px: function () {
var result_s = this.code_a.join('') + ' return result_a.join("");';
var f_o = new Function ('context', result_s);
return f_o;
}
});
TELIB.TemplateCompiler_cl = Class.create({
initialize: function () {
this.gen_o = new TELIB.Generator_cl();
this.reset_px();
},
reset_px: function () {
this.gen_o.reset_px();
this.preservePreWS_b = false;
this.preservePostWS_b = false;
},
setPreWS_px: function (on_bpl) {
if ((on_bpl == undefined) || (on_bpl == false)) {
this.preservePreWS_b = false;
} else {
this.preservePreWS_b = true;
}
},
setPostWS_px: function (on_bpl) {
if ((on_bpl == undefined) || (on_bpl == false)) {
this.preservePostWS_b = false;
} else {
this.preservePostWS_b = true;
}
},
compile_px: function (source_spl) {
var state_i = 0;
var pos_i = 0;
var len_i = source_spl.length;
var text_s = '';
var code_s = '';
var subst_s = '';
this.gen_o.reset_px();
var doubletest_f = function (char_spl) {
var status_b = false;
if ((pos_i + 1) < len_i) {
if ((source_spl[pos_i] == char_spl) && (source_spl[pos_i+1] == char_spl)) {
status_b = true;
}
}
return status_b;
}
while (pos_i < len_i) {
switch (state_i) {
case 0:
// outside
if (source_spl[pos_i] == '@') { // ECMA 5!
if (doubletest_f('@') == false) {
state_i = 2;
code_s = '';
} else {
// als normales Zeichen verarbeiten, ein Zeichen überlesen
state_i = 1;
text_s = '@';
pos_i++;
}
} else if (source_spl[pos_i] == '#') {
if (doubletest_f('#') == false) {
state_i = 3;
subst_s = '';
} else {
// als normales Zeichen verarbeiten, ein Zeichen überlesen
state_i = 1;
text_s = '#';
pos_i++;
}
} else if ((source_spl[pos_i] == ' ') || (source_spl[pos_i] == '\t')) {
state_i = 4;
text_s = '';
pos_i--; // Zeichen erneut verarbeiten
} else {
state_i = 1;
text_s = '';
pos_i--; // Zeichen erneut verarbeiten
}
break;
case 1:
// inText
if (source_spl[pos_i] == '@') {
if (doubletest_f('@') == false) {
// Textende, neuer Code
state_i = 0;
this.gen_o.write_px(text_s);
pos_i--; // Zeichen erneut verarbeiten
} else {
// als normales Zeichen verarbeiten, ein Zeichen überlesen
text_s += '@';
pos_i++;
}
} else if (source_spl[pos_i] == '#') {
if (doubletest_f('#') == false) {
// Textende, neue Substitution
state_i = 0;
this.gen_o.write_px(text_s);
pos_i--; // Zeichen erneut verarbeiten
// Textende, neuer Code
} else {
// als normales Zeichen verarbeiten, ein Zeichen überlesen
text_s += '#';
pos_i++;
}
} else if ((source_spl[pos_i] == ' ') || (source_spl[pos_i] == '\t')) {
// Textende
state_i = 0;
this.gen_o.write_px(text_s);
pos_i--; // Zeichen erneut verarbeiten
} else {
// sammeln
if ((source_spl[pos_i] != '\n') && (source_spl[pos_i] != '\r')) {
text_s += source_spl[pos_i];
} else if (source_spl[pos_i] == '\n') {
text_s += '\\n';
} else {
text_s += '\\r';
}
}
break;
case 2:
// inCode
if (source_spl[pos_i] == '@') {
if (doubletest_f('@') == false) {
// zu Ende, erzeugen
this.gen_o.code_px(code_s);
state_i = 5; //0
} else {
// als normales Zeichen verarbeiten, ein Zeichen überlesen
code_s += '@';
pos_i++;
}
} else {
// sammeln
code_s += source_spl[pos_i];
}
break;
case 3:
// inSubst
// Verdopplung # hier nicht zulässig!
if (source_spl[pos_i] == '#') {
// zu Ende, erzeugen
this.gen_o.substitute_px(subst_s);
state_i = 0;
} else {
// sammeln
subst_s += source_spl[pos_i];
}
break;
case 4:
// pre-code-whitespace
switch (source_spl[pos_i]) {
case ' ':
case '\t':
// sammeln
text_s += source_spl[pos_i];
break;
default:
state_i = 0;
if (source_spl[pos_i] != '@') {
this.gen_o.write_px(text_s);
} else {
if (doubletest_f('@') == false) {
// Whitespace vor Code-Beginn erkannt
if (this.preservePreWS_b == true) {
// trotzdem ausgeben
this.gen_o.write_px(text_s);
}
} // ansonsten wie normales Zeichen behandeln
}
pos_i--; // Zeichen erneut verarbeiten
}
break;
case 5:
// post-code-whitespace
switch (source_spl[pos_i]) {
case '\n':
text_s += '\\n';
state_i = 0;
break;
case '\r':
text_s += '\\r';
state_i = 0;
break;
case ' ':
case '\t':
// ggf. sammeln
text_s += source_spl[pos_i];
break;
default:
// Whitespace nach Code erkannt
if (this.preservePostWS_b == true) {
// trotzdem ausgeben
this.gen_o.write_px(text_s);
}
state_i = 0;
pos_i--; // Zeichen erneut verarbeiten
}
break;
}
pos_i++;
}
// welcher Zustand liegt abschließend vor?
if (state_i == 1) {
this.gen_o.write_px(text_s);
} else if (state_i == 2) {
this.gen_o.code_px(code_s);
} else if (state_i == 3) {
this.gen_o.substitute_px(subst_s);
} else if (state_i == 4) {
if (this.preservePreWS_b == true) {
this.gen_o.write_px(text_s);
}
} else if (state_i == 5) {
if (this.preservePostWS_b == true) {
this.gen_o.write_px(text_s);
}
}
return this.gen_o.generate_px();
}
});
// EOF

View File

@ -0,0 +1,61 @@
//------------------------------------------------------------------------------
// Template-Manager
// - Laden und Bereitstellen von Template-Quellen oder anderen Textquellen
//------------------------------------------------------------------------------
// depends-on:
// jquery
// inheritance
//------------------------------------------------------------------------------
// Namensraum TELIB verwenden
TELIB.TemplateManager_cl = Class.create({
initialize: function () {
this.templates_o = {};
this.compiled_o = {};
this.teCompiler_o = new TELIB.TemplateCompiler_cl();
// Templates als Ressource anfordern und speichern
var path_s = "/template/";
$.ajax({
dataType: "json",
url: path_s,
type: 'GET',
context: this
})
.done(function (data_opl) {
this.templates_o = data_opl['templates'];
// Benachrichtigung senden
//+++ Bezeichnung Namensraum korrigieren
//SHOP.eventService.publish_px('app', ['artikelliste', null]);
})
.fail(function(jqXHR_opl, textStatus_spl) {
alert( "[TELIB.tm] Fehler bei Anforderung: " + textStatus_spl );
});
},
get_px: function (name_spl) {
if (name_spl in this.templates_o) {
return this.templates_o[name_spl];
} else {
return null;
}
},
execute_px: function (name_spl, data_opl) {
var compiled_o = null;
if (name_spl in this.compiled_o) {
compiled_o = this.compiled_o[name_spl];
} else {
// Übersetzen und ausführen
if (name_spl in this.templates_o) {
this.teCompiler_o.reset_px();
compiled_o = this.teCompiler_o.compile_px(this.templates_o[name_spl]);
this.compiled_o[name_spl] = compiled_o;
}
}
if (compiled_o != null) {
return compiled_o(data_opl);
} else {
return null;
}
}
});
// EOF

View File

@ -0,0 +1,37 @@
function startNaechsteAuktion(los_nr){
clearInterval(interval_id);
los_nr++;
if(los_nr <= charge_data['info']['anzAuk']){
document.getElementById('los_nr').value = los_nr;
los(los_nr);
}
else{
viewLetzteAuktion(los_nr);
viewAktuelleAuktion(los_nr);
viewCanvasData(los_nr);
document.getElementById('los_nr').value == -1;
charge();
}
};
function runden2Nachkomma(zahl){
Ergebnis = Math.round(zahl *100) / 100;
return Ergebnis;
};
function calcVkPreis(los_nr){
tmp = charge_data[los_nr]['startPreis']
- (((charge_data[los_nr]['startPreis'] - charge_data[los_nr]['minPreis'])
/ charge_data[los_nr]['auktionDauer'])
* charge_data[los_nr]['auktionLaufzeit']);
charge_data[los_nr]['vkPreis'] = runden2Nachkomma(tmp);
};
function kaufen(buyguy){
los_nr = document.getElementById('los_nr').value;
startNaechsteAuktion(los_nr);
sendLog(buyguy, los_nr);
};

View File

@ -0,0 +1,46 @@
var interval_id;
var charge_data = {};
var TPL = {};
function auktion(los_nr){
if(charge_data[los_nr]['auktionLaufzeit'] <= charge_data[los_nr]['auktionDauer']){
viewCanvasData(los_nr);
calcVkPreis(los_nr);
viewAktuelleAuktion(los_nr);
viewNaechsteAuktion(los_nr);
viewLetzteAuktion(los_nr);
charge_data[los_nr]['auktionLaufzeit']++;
}
};
function los(los_nr){
calcVkPreis(los_nr);
viewLetzteAuktion(los_nr);
viewNaechsteAuktion(los_nr);
viewAktuelleAuktion(los_nr);
interval_id = setInterval( function() {auktion(los_nr)}, 1000);
};
function charge(){
// if( Number(document.getElementById('los_nr').value) == -1){
// alert("neu");
neueCharge();
// }
// else{
// alert("gebr");
// los(document.getElementById('los_nr').value);
// }
};
$(document).ready(
function(){
TPL.engine = new TELIB.TemplateManager_cl();
charge();
}
);

View File

@ -0,0 +1,16 @@
function neueCharge(){
/*der Server stellt die n<>chste Charge zur Verf<72>gung*/
$.ajax({
dataType: "json",
url: '/chargen',
type: 'NEXT'
})
.done(function(newCharge){
charge_data = eval("(" + newCharge + ")");
los('1');
document.getElementById('los_nr').value = 1;
})
.fail(function(error){
alert("R<>ckgabe von NEXT fehlerhaft");
});
};

View File

@ -0,0 +1,30 @@
function sendLog(buyguy, los_nr){
/*var log = '{' +
'buyer: ' + buyguy + ', ' +
'charge: ' + charge_data['info']['name'] + ', ' +
'los: ' + los_nr + ', ' +
'preis: ' + charge_data[los_nr]['vkPreis']
+ '}';*/
/*var log = {};
log['buyer'] = buyguy;
log['charge'] = charge_data['info']['name'];
log['los'] = los_nr;
log['preis'] = charge_data[los_nr]['vkPreis'];*/
var path = "/log";
path += '/' + buyguy;
path += '/' + charge_data['info']['name'];
path += '/' + los_nr;
path += '/' + charge_data[los_nr]['vkPreis'];
$.ajax({
// url: "/log",
url: path,
type: 'SEND'//,
// data: gelogen
})
.fail(function(){
alert("Übertragung des Logeintrags fehlgeschlagen");
});
}

View File

@ -0,0 +1,2 @@
function loadLosData(){};
function sendChargendata(){};

View File

@ -0,0 +1,54 @@
//ajax krempel hier hin pasten von main.js
function viewLetzteAuktion(los_nr){
try{
var markup = '<p>' + charge_data[(Number(los_nr) - 1)]['beschreibung'] + '</p>' +
'<p>verkauft f<>r: ' + charge_data[(Number(los_nr) - 1)]['vkPreis'] + '</p>';
$('#letzteAuktion').html(markup);
}
catch(e){
$('#letzteAuktion').html('<p>keine Auktion beendet</p>');
}
};
function viewNaechsteAuktion(los_nr){
try{
var markup = '<p>' + charge_data[(Number(los_nr) + 1)]['beschreibung'] + '</p>' +
'<p>Startpreis: ' + charge_data[(Number(los_nr) + 1)]['startPreis'] + '</p>';
$('#naechsteAuktion').html(markup);
}
catch(e){
$('#naechsteAuktion').html('<p>letzte Auktion l<>uft bereits!</p>');
}
};
function viewAktuelleAuktion(los_nr){
try{
var markup = '<p>' + charge_data[los_nr]['beschreibung'] + '</p>' +
'<p>aktueller Preis: ' + charge_data[los_nr]['vkPreis'] + '</p>';
$('#aktuelleAuktion').html(markup);
}
catch(e){
$('#aktuelleAuktion').html('<p>aktuell keine Auktionen eingestellt</p>');
}
};
function viewCanvasData(los_nr){
try{
renderCanvas((charge_data[los_nr]['auktionDauer'] - charge_data[los_nr]['auktionLaufzeit']),(((charge_data[los_nr]['auktionDauer'] - charge_data[los_nr]['auktionLaufzeit']) / charge_data[los_nr]['auktionDauer']) * 360));
}
catch(e){
$('#canvas').html('<p>aktuell keine Auktionen eingestellt</p>');
}
}
function viewAuktionen(){
$.get('templates/html/auktionsansicht.html', function(markup){
$('#content').html(markup);
})
var los_nr = document.getElementById('los_nr').value;
los(los_nr);
};

View File

@ -0,0 +1,96 @@
function deg2Rad(degree){
var factor = Math.PI/180;
return degree * factor;
};
function degreeConverter(degree){
if(degree > 0){
degree--;
}
else{
degree = 1;
}
return degree;
};
function color8Tor(requestType, degree){
switch(requestType){
case 'strokeStyle':
if(degree > 180){
return 'green';
}
if(degree <= 181 && degree > 120){
return 'yellow';
}
if(degree <= 121 && degree > 37){
return 'orange';
}
if(degree <= 36){
return 'red';
}
break;
case 'shadowColor':
if(degree > 180){
return 'lightgreen';
}
if(degree <= 181 && degree > 120){
return 'blue';
}
if(degree <= 121 && degree > 60){
return 'orange';
}
if(degree <= 61){
return 'red';
}
break;
case 'fillStyle':
if(degree > 180){
return 'green';
}
if(degree <= 181 && degree > 120){
return 'yellow';
}
if(degree <= 121 && degree > 37){
return 'orange';
}
if(degree <= 36){
return 'red';
}
break;
}
};
function renderCanvas(countDown, degree){
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
//ctx.strokeStyle = 'green';
ctx.strokeStyle = color8Tor('strokeStyle', degree);
ctx.lineWidth = 17;
ctx.lineCap = 'round';
ctx.shadowBlur = 15;
//ctx.shadowColor = 'lightgreen';
ctx.shadowColor = color8Tor('shadowColor', degree);
gradient = ctx.createRadialGradient(150, 150, 5, 150, 150, 100);
gradient.addColorStop(0, 'lightblue');
gradient.addColorStop(1, 'white');
ctx.fillStyle = gradient;
ctx.fillRect(0, 0, 300, 300);
ctx.beginPath();
degree = degreeConverter(degree);
ctx.arc(150, 150, 100, deg2Rad(270), deg2Rad(degree - 90));
ctx.stroke();
ctx.font = "30px Arial";
//ctx.fillStyle = 'green';
ctx.fillStyle = color8Tor('fillStyle', degree);
ctx.fillText(countDown, 145, 160);
}

View File

@ -0,0 +1,14 @@
function viewChargenubersicht(){
$.ajax({
dataType: "json",
url: '/manager',
type: 'LIST'
})
.done(function(liste){
markup = TPL.engine.execute_px('chargenubersicht.tpl', liste);
$("#content").html(markup);
})
.fail(function(){
alert("Chargenliste konnte nicht geladen werden");
});
}

View File

@ -0,0 +1,16 @@
function viewLogfile(){
clearInterval(interval_id);
$.ajax({
dataType: "json",
url: '/log',
type: 'REQ'
})
.done(function(log){
var markup = TPL.engine.execute_px('log.tpl', log);
$('#content').html(markup);
})
.fail(function(){});
var markup = '<h1>Logfile</h1><p><button onclick = viewAuktionen()>zur<75>ck</button></p>';
$('#content').append(markup);
}

View File

@ -0,0 +1,19 @@
[global]
tools.log_headers.on: True
tools.sessions.on: False
tools.encode.on: True
tools.encode.encoding:"utf-8"
server.socket_port: 8080
server.socket_timeout:60
server.thread_pool: 999
server.environment: "production"
log.screen: True
[/]
tools.staticdir.root: cherrypy.Application.currentDir_s
tools.staticdir.on = True
tools.staticdir.dir = '.'
tools.staticdir.index = 'index.html'

View File

@ -0,0 +1,55 @@
# coding:utf-8
import os.path
import cherrypy
from app import chargen, log, template, manager
#----------------------------------------------------------
def main():
#----------------------------------------------------------
# aktuelles Verzeichnis ermitteln, damit es in der Konfigurationsdatei als
# Bezugspunkt verwendet werden kann
try: # aktuelles Verzeichnis als absoluter Pfad
currentDir_s = os.path.dirname(os.path.abspath(__file__))
except:
currentDir_s = os.path.dirname(os.path.abspath(sys.executable))
cherrypy.Application.currentDir_s = currentDir_s
configFileName_s = 'server.conf' # im aktuellen Verzeichnis
if os.path.exists(configFileName_s) == False:
# Datei gibt es nicht
configFileName_s = None
#print("doof")
#print("cool")
# autoreload und timeout_Monitor hier abschalten
# für cherrypy-Versionen >= "3.1.0" !
print(configFileName_s)
cherrypy.engine.autoreload.unsubscribe()
cherrypy.engine.timeout_monitor.unsubscribe()
cherrypy.config.update(configFileName_s)
cherrypy.tree.mount(
None, '/', configFileName_s
)
cherrypy.tree.mount(
chargen.chargen_cl(), '/chargen', {'/': {'request.dispatch': cherrypy.dispatch.MethodDispatcher()}}
)
cherrypy.tree.mount(
log.log_cl(), '/log', {'/': {'request.dispatch': cherrypy.dispatch.MethodDispatcher()}}
)
cherrypy.tree.mount(
manager.manager_cl(), '/manager', {'/': {'request.dispatch': cherrypy.dispatch.MethodDispatcher()}}
)
cherrypy.tree.mount(
template.Template_cl(), '/template', {'/': {'request.dispatch': cherrypy.dispatch.MethodDispatcher()}}
)
cherrypy.engine.start()
cherrypy.engine.block()
#----------------------------------------------------------
if __name__ == '__main__':
#----------------------------------------------------------
main()

View File

@ -0,0 +1,20 @@
<!-- Template -->
@var rows_o = context;@
<h1>Chargenliste</h1><p><button onclick = viewAuktionen()>zurueck</button></p>
<table border = 1>
<tr>
<td>ChargenNr</td><td>Name</td>
</tr>
@for var key_s in rows_o@
@var row_o = rows_o[key_s];@
<tr id='#key_s#'>
<td>#key_s#</td><td>#row_o['chargeName']#</td>
</tr>
@endfor@
</table>
<!-- EOF -->

View File

@ -0,0 +1,20 @@
<!-- Template -->
@var rows_o = context;@
<h1>Logfile</h1><p><button onclick = viewAuktionen()>zurueck</button></p>
<table border = 1>
<tr>
<td>Nr</td><td>Kaufer</td><td>Charge</td><td>Los</td><td>Preis</td><td>Zeitpunkt</td>
</tr>
@for var key_s in rows_o@
@var row_o = rows_o[key_s];@
<tr id='#key_s#'>
<td>#key_s#</td><td>#row_o['user']#</td><td>#row_o['charge']#</td><td>#row_o['los']#</td><td>#row_o['preis']#</td><td>#row_o['time']#</td>
</tr>
@endfor@
</table>
<!-- EOF -->

View File

@ -0,0 +1,14 @@
<canvas id = "canvas" width = "300" height = "300">Canvas</canvas>
<section id = "kaufen" onclick = kaufen('User')><center><h1>Kaufen</h1></center></section>
<section id = "aktuelleAuktion">aktuelle Auktion</section>
<section id = "naechsteAuktion">n<EFBFBD>chste Auktion</section>
<section id = "letzteAuktion">letzte Auktion</section>
<section id = "simManager">
<p><button id = "bot1Button" class = "botButtonInactiveStyle" onclick = botStart(1)>Bot 1</button></p>
<p><button id = "bot2Button" class = "botButtonInactiveStyle" onclick = botStart(2)>Bot 2</button></p>
<p><button onclick = viewChargenubersicht()>Chargen-Manager</button></p>
<p><button onclick = viewLogfile()>Log-Files</button></p>
</section>