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,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,72 @@
# 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 = {}
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]={}
chargenliste[charge_id]['chargeName'] = chargeData['info']['name']
print(chargenliste)
return json.dumps(chargenliste)
def GET(self, nr):
data = {}
data = self.stream.loadCharge(nr)
return json.dumps(data)
def RECEIVE(self, dieCharge):
dieCharge = json.loads(dieCharge)
if dieCharge['info']['chargenNr'] == -1:
filenames = os.listdir('data')
maxNr = 0
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()
if maxNr < chargeData['info']['chargenNr']:
maxNr = chargeData['info']['chargenNr']
dieCharge['info']['chargenNr'] = maxNr + 1
name = str(maxNr + 1)
name += '.json'
file = codecs.open(os.path.join('data', name), 'w', 'utf-8')
file.write(json.dumps(dieCharge, indent = 3, ensure_ascii = True))
file.close()
else:
name = str(dieCharge['info']['chargenNr'])
name += '.json'
file = codecs.open(os.path.join('data', name), 'w', 'utf-8')
file.write(json.dumps(dieCharge, indent = 3, ensure_ascii = True))
file.close()
def DELETE(self, nr):
path = 'data/'
path += str(nr)
path += '.json'
print(path)
os.remove(path)

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,836 @@
version:
b0.1
date/time:
19.06.15/09:07
fixed:
- Daten "neue Charge" oder "ge<67>nderte Charge" werden vom Server empfangen aber noch nicht weiterverarbeitet
known issues:
- Bots laufen weiter wenn man in anderer Ansicht ist und erzeugen Fehler
- 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
- Logfile wird in "falscher" Reihenfolge angezeigt
- Uhrzeit in Logfiles wird nicht korrekt dargestellt
- [F5] skippt aktuelle Charge
new:
- Python
- Chargensystem
- Funktion zum Empfangen neuer/bearbeiteter Chargen (Chargenmanager)
- Funtion zum L<>schen einer Charge (Chargenmanager)
- JS, AJAX
- Chargenmanager
- chargen<65>bersicht l<>schen buttons in liste
- Wizard
- Ansicht
- laufende Charge zur Bearbeitung sperren
- verwendung inheritance
planned:
- JS, AJAX
- Chargenmanager
- Wizard
- NavLeiste
- laufende Charge zur Bearbeitung sperren
- eingaben kontrollieren, ung<6E>ltige eingaben verhindern
- Markup <20>berarbeiten (TemplateEngine implementieren)
- CSS
- verwendung uikit(css framework)
- verwendung eventService
- Gestaltgesetze
- Doku
######################################################################################
version:
a0.29
date/time:
19.06.15/06:37
fixed:
-
known issues:
- Bots laufen weiter wenn man in anderer Ansicht ist und erzeugen Fehler
- 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
- Logfile wird in "falscher" Reihenfolge angezeigt
- Uhrzeit in Logfiles wird nicht korrekt dargestellt
- [F5] skippt aktuelle Charge
- Daten "neue Charge" oder "ge<67>nderte Charge" werden vom Server empfangen aber noch nicht weiterverarbeitet
new:
- Style
planned:
- Python
- Chargensystem
- Funktion zum Empfangen neuer/bearbeiteter Chargen (Chargenmanager)
- Funtion zum L<>schen einer Charge (Chargenmanager)
- JS, AJAX
- Chargenmanager
- chargen<65>bersicht bearbeiten l<>schen buttons in liste
- Wizard
- Ansicht
- NavLeiste
- laufende Charge zur Bearbeitung sperren
- Markup <20>berarbeiten (TemplateEngine implementieren)
- CSS
- verwendung uikit(css framework)
- verwendung inheritance
- verwendung eventService
- Gestaltgesetze
- Doku
######################################################################################
version:
a0.28
date/time:
19.06.15/06:07
fixed:
- Wizard spackt nicht mehr rum
known issues:
- Bots laufen weiter wenn man in anderer Ansicht ist und erzeugen Fehler
- 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
- Logfile wird in "falscher" Reihenfolge angezeigt
- Uhrzeit in Logfiles wird nicht korrekt dargestellt
- [F5] skippt aktuelle Charge
- Daten "neue Charge" oder "ge<67>nderte Charge" werden vom Server empfangen aber noch nicht weiterverarbeitet
new:
-
planned:
- Python
- Chargensystem
- Funktion zum Empfangen neuer/bearbeiteter Chargen (Chargenmanager)
- Funtion zum L<>schen einer Charge (Chargenmanager)
- JS, AJAX
- Chargenmanager
- chargen<65>bersicht bearbeiten l<>schen buttons in liste
- Wizard
- Ansicht
- NavLeiste
- laufende Charge zur Bearbeitung sperren
- Markup <20>berarbeiten (TemplateEngine implementieren)
- CSS
- verwendung uikit(css framework)
- verwendung inheritance
- verwendung eventService
- Gestaltgesetze
- Doku
######################################################################################
version:
a0.27
date/time:
19.06.15/05:42
fixed:
- DayZ
known issues:
- Bots laufen weiter wenn man in anderer Ansicht ist und erzeugen Fehler
- 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
- Logfile wird in "falscher" Reihenfolge angezeigt
- Uhrzeit in Logfiles wird nicht korrekt dargestellt
- [F5] skippt aktuelle Charge
- Daten "neue Charge" oder "ge<67>nderte Charge" werden vom Server empfangen aber noch nicht weiterverarbeitet
new:
- keine Ahnung, irgendwas mit bearbeiten
planned:
- Python
- Chargensystem
- Funktion zum Empfangen neuer/bearbeiteter Chargen (Chargenmanager)
- Funtion zum L<>schen einer Charge (Chargenmanager)
- JS, AJAX
- Chargenmanager
- chargen<65>bersicht bearbeiten l<>schen buttons in liste
- Wizard
- Ansicht
- NavLeiste
- laufende Charge zur Bearbeitung sperren
- Markup <20>berarbeiten (TemplateEngine implementieren)
- CSS
- verwendung uikit(css framework)
- verwendung inheritance
- verwendung eventService
- Gestaltgesetze
- Doku
######################################################################################
version:
a0.26
date/time:
19.06.15/05:17
fixed:
- beim Wechsel zur Ansicht Chargenmanager wird der Auktionsclock nicht angehalten
- Bots kaufen nicht aus neu erstellten Chargen
known issues:
- Bots laufen weiter wenn man in anderer Ansicht ist und erzeugen Fehler
- 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
- Logfile wird in "falscher" Reihenfolge angezeigt
- Uhrzeit in Logfiles wird nicht korrekt dargestellt
- [F5] skippt aktuelle Charge
- Daten "neue Charge" oder "ge<67>nderte Charge" werden vom Server empfangen aber noch nicht weiterverarbeitet
new:
-
planned:
- Python
- Chargensystem
- Funktion zum Empfangen neuer/bearbeiteter Chargen (Chargenmanager)
- Funtion zum L<>schen einer Charge (Chargenmanager)
- JS, AJAX
- Chargenmanager
- chargen<65>bersicht bearbeiten l<>schen buttons in liste
- Wizard
- Ansicht
- NavLeiste
- laufende Charge zur Bearbeitung sperren
- Markup <20>berarbeiten (TemplateEngine implementieren)
- CSS
- verwendung uikit(css framework)
- verwendung inheritance
- verwendung eventService
- Gestaltgesetze
- Doku
######################################################################################
version:
a0.25
date/time:
19.06.15/04:43
fixed:
- Chargenliste nicht flexibel, kann nur Charge 1 & 2
known issues:
- Bots kaufen nicht aus neu erstellten Chargen
- Bots laufen weiter wenn man in anderer Ansicht ist und erzeugen Fehler
- 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
- Logfile wird in "falscher" Reihenfolge angezeigt
- Uhrzeit in Logfiles wird nicht korrekt dargestellt
- [F5] skippt aktuelle Charge
- beim Wechsel zur Ansicht Chargenmanager wird der Auktionsclock nicht angehalten. implementierungssache
- Daten "neue Charge" oder "ge<67>nderte Charge" werden vom Server empfangen aber noch nicht weiterverarbeitet
new:
- Das erstellen neuer Chargen ist vollst<73>ndig m<>glich
planned:
- Python
- Chargensystem
- Funktion zum Empfangen neuer/bearbeiteter Chargen (Chargenmanager)
- Funtion zum L<>schen einer Charge (Chargenmanager)
- JS, AJAX
- Chargenmanager
- chargen<65>bersicht bearbeiten l<>schen buttons in liste
- Wizard
- Ansicht
- NavLeiste
- laufende Charge zur Bearbeitung sperren
- Markup <20>berarbeiten (TemplateEngine implementieren)
- CSS
- verwendung uikit(css framework)
- verwendung inheritance
- verwendung eventService
- Gestaltgesetze
- Doku
######################################################################################
version:
a0.24
date/time:
19.06.15/03:42
fixed:
- Wechsel von Ansicht Chargenmanager zu Auktion l<>dt irgend ein altes Template (Button Chargenmananger
ohne Funktion), Versionspingpong?
- ChargenWizard: neue Charge wird noch nicht an Server <20>bermittelt
known issues:
- Bots laufen weiter wenn man in anderer Ansicht ist und erzeugen Fehler
- 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
- 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
- beim Wechsel zur Ansicht Chargenmanager wird der Auktionsclock nicht angehalten. implementierungssache
- Daten "neue Charge" oder "ge<67>nderte Charge" werden vom Server empfangen aber noch nicht weiterverarbeitet
new:
- Anzahl der Lose pro Charge auf 10 begrenzt
planned:
- Python
- Chargensystem
- Funktion zum Empfangen neuer/bearbeiteter Chargen (Chargenmanager)
- Funtion zum L<>schen einer Charge (Chargenmanager)
- JS, AJAX
- Chargenmanager
- chargen<65>bersicht bearbeiten l<>schen buttons in liste
- Wizard
- Ansicht
- NavLeiste
- laufende Charge zur Bearbeitung sperren
- Markup <20>berarbeiten (TemplateEngine implementieren)
- CSS
- verwendung uikit(css framework)
- verwendung inheritance
- verwendung eventService
- Gestaltgesetze
- Doku
######################################################################################
version:
a0.23
date/time:
19.06.15/02:51
fixed:
- Chargenwizard: Buttons beim erstellen von Losen buggy
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
- 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
- ChargenWizard: neue Charge wird noch nicht an Server <20>bermittelt
new:
-
planned:
- Python
- Chargensystem
- Funktion zum Empfangen neuer/bearbeiteter Chargen (Chargenmanager)
- Funtion zum L<>schen einer Charge (Chargenmanager)
- JS, AJAX
- Chargenmanager
- chargen<65>bersicht bearbeiten l<>schen buttons in liste
- Wizard
- Ansicht
- NavLeiste
- laufende Charge zur Bearbeitung sperren
- Markup <20>berarbeiten (TemplateEngine implementieren)
- CSS
- verwendung uikit(css framework)
- verwendung inheritance
- verwendung eventService
- Gestaltgesetze
- Doku
######################################################################################
version:
a0.22
date/time:
19.06.15/02:21
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
- 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
- Chargenwizard: Buttons beim erstellen von Losen buggy
new:
- ChargenWizard
planned:
- Python
- Chargensystem
- Funktion zum Empfangen neuer/bearbeiteter Chargen (Chargenmanager)
- Funtion zum L<>schen einer Charge (Chargenmanager)
- JS, AJAX
- Chargenmanager
- chargen<65>bersicht bearbeiten l<>schen buttons in liste
- Wizard
- Ansicht
- NavLeiste
- Eindeutigkeit Chargenname
- laufende Charge zur Bearbeitung sperren
- Markup <20>berarbeiten (TemplateEngine implementieren)
- CSS
- verwendung uikit(css framework)
- verwendung inheritance
- verwendung eventService
- Gestaltgesetze
- Doku
######################################################################################
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
- Logfile wird in "falscher" Reihenfolge angezeigt
- Uhrzeit in Logfiles wird nicht korrekt dargestellt
- [F5] skippt aktuelle Charge
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
- 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,71 @@
#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;
}
.bigbutton{
height: 50px;
width: 100px;
background-color: #dbdad9;
}

View File

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

View File

@ -0,0 +1,8 @@
.wizardButtonNeu{
height: 50px;
background-color: yellow;
}
.wizardButtonFertig{
height: 50px;
background-color: green;
}

View File

@ -0,0 +1,67 @@
{
"6": {
"beschreibung": "derPreisistHEISS",
"minPreis": 100,
"startPreis": 750,
"auktionDauer": 120,
"auktionLaufzeit": 0,
"anzGebinde": 10,
"vkPreis": -1,
"auktionPreis": -1
},
"4": {
"beschreibung": "Rosensparpacket",
"minPreis": 300,
"startPreis": 400,
"auktionDauer": 30,
"auktionLaufzeit": 0,
"anzGebinde": 5,
"vkPreis": -1,
"auktionPreis": -1
},
"5": {
"beschreibung": "Reste",
"minPreis": 600,
"startPreis": 800,
"auktionDauer": 60,
"auktionLaufzeit": 0,
"anzGebinde": 10,
"vkPreis": -1,
"auktionPreis": -1
},
"2": {
"beschreibung": "einzelneRose",
"minPreis": 50,
"startPreis": 100,
"auktionDauer": 10,
"auktionLaufzeit": 0,
"anzGebinde": 1,
"vkPreis": -1,
"auktionPreis": -1
},
"3": {
"beschreibung": "Rosensparpacket",
"minPreis": 300,
"startPreis": 400,
"auktionDauer": 30,
"auktionLaufzeit": 0,
"anzGebinde": 5,
"vkPreis": -1,
"auktionPreis": -1
},
"info": {
"name": "Rosen",
"chargenNr": 1,
"anzAuk": 6
},
"1": {
"beschreibung": "einzelneRose",
"minPreis": 50,
"startPreis": 100,
"auktionDauer": 10,
"auktionLaufzeit": 0,
"anzGebinde": 1,
"vkPreis": -1,
"auktionPreis": -1
}
}

View File

@ -0,0 +1,87 @@
{
"3": {
"minPreis": 150,
"auktionLaufzeit": 0,
"startPreis": 330,
"auktionPreis": -1,
"vkPreis": -1,
"auktionDauer": 10,
"anzGebinde": 1,
"beschreibung": "Kompost"
},
"2": {
"minPreis": 100,
"auktionLaufzeit": 0,
"startPreis": 220,
"auktionPreis": -1,
"vkPreis": -1,
"auktionDauer": 10,
"anzGebinde": 1,
"beschreibung": "Rueben"
},
"1": {
"minPreis": 50,
"auktionLaufzeit": 0,
"startPreis": 110,
"auktionPreis": -1,
"vkPreis": -1,
"auktionDauer": 10,
"anzGebinde": 1,
"beschreibung": "Kraut"
},
"7": {
"minPreis": 10,
"auktionLaufzeit": 0,
"startPreis": 100,
"auktionPreis": -1,
"vkPreis": -1,
"auktionDauer": 20,
"anzGebinde": 1,
"beschreibung": "sonstiges"
},
"6": {
"minPreis": 300,
"auktionLaufzeit": 0,
"startPreis": 660,
"auktionPreis": -1,
"vkPreis": -1,
"auktionDauer": 10,
"anzGebinde": 1,
"beschreibung": "Dreck"
},
"5": {
"minPreis": 250,
"auktionLaufzeit": 0,
"startPreis": 550,
"auktionPreis": -1,
"vkPreis": -1,
"auktionDauer": 10,
"anzGebinde": 1,
"beschreibung": "Laub"
},
"4": {
"minPreis": 200,
"auktionLaufzeit": 0,
"startPreis": 440,
"auktionPreis": -1,
"vkPreis": -1,
"auktionDauer": 10,
"anzGebinde": 1,
"beschreibung": "Spinat"
},
"info": {
"name": "Gruenzeug",
"anzAuk": 8,
"chargenNr": 2
},
"8": {
"minPreis": 1,
"auktionLaufzeit": 0,
"startPreis": 10,
"auktionPreis": -1,
"vkPreis": -1,
"auktionDauer": 5,
"anzGebinde": 100,
"beschreibung": "Bonus"
}
}

View File

@ -0,0 +1,37 @@
{
"3": {
"minPreis": 50,
"auktionLaufzeit": 0,
"startPreis": 10000,
"auktionPreis": -1,
"vkPreis": -1,
"auktionDauer": 200,
"anzGebinde": 5,
"beschreibung": "willkeiner"
},
"2": {
"auktionLaufzeit": 0,
"anzGebinde": 2,
"startPreis": 150,
"auktionPreis": -1,
"vkPreis": -1,
"auktionDauer": 20,
"beschreibung": "los2",
"minPreis": 100
},
"1": {
"auktionLaufzeit": 0,
"anzGebinde": 1,
"startPreis": 100,
"auktionPreis": -1,
"vkPreis": -1,
"auktionDauer": 10,
"beschreibung": "los1",
"minPreis": 50
},
"info": {
"name": "testcharge1",
"anzAuk": 3,
"chargenNr": 3
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,56 @@
<!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");
@import url("css/wizardButton.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/wizard.js"></script>
<script type = "text/javascript" src = "js/main.js"></script>
</head>
<body>
<div align = "center" 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 class = "bigbutton" onclick = viewChargenubersicht()>Chargen-Manager</button></p>
<p><button class = "bigbutton" 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,11 @@
function loadLosData(){};
function sendChargendata(chargendata, neu){
var path = '/manager/' + chargendata + '/' + neu;
$.ajax({
url: path,
type: 'RECEIVE',
})
.fail(function(){
alert("Chargendaten konnten nicht an den Server <20>bertragen werden");
});
};

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,20 @@
function viewChargenubersicht(){
clearInterval(interval_id);
$.ajax({
dataType: "json",
url: '/manager',
type: 'LIST'
})
.done(function(liste){
markup = TPL.engine.execute_px('chargenubersicht.tpl', liste);
$("#content").html(markup);
$('#content').append('<p><button class = "bigbutton" onclick = viewAuktionen()>zurück</button><button class = "wizardButtonNeu"onclick = wizardStart()>NEU</button></p>');
})
.fail(function(){
alert("Chargenliste konnte nicht geladen werden");
});
}
function viewLosData(chargenNr, losNr){
}

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,132 @@
var wizardData = {};
function wizardDelete(nr){
var path = '/manager/' + nr;
$.ajax({
url: path,
type: 'DELETE'
})
.done(function(){
viewChargenubersicht();
})
.fail(function(){
alert("Charge konnte nicht gel<65>scht werden");
});
};
function wizardSend(){
//wizardData -> ajax -> server -> fuckoff
var path = '/manager/' + JSON.stringify(wizardData);
$.ajax({
url: path,
type: 'RECEIVE'
})
.done(function(){
viewChargenubersicht();
})
.fail(function(){
alert("die <20>bertragung der Chargendaten zum Server ist fehlgeschlagen");
});
};
function wizardLosDataSave(los_nr, next_los_nr){
wizardData[los_nr]['beschreibung'] = document.getElementById('beschreibung').value;
wizardData[los_nr]['anzGebinde'] = parseInt(document.getElementById('anzGebinde').value);
wizardData[los_nr]['auktionDauer'] = parseInt(document.getElementById('auktionDauer').value);
wizardData[los_nr]['auktionLaufzeit'] = 0;
wizardData[los_nr]['startPreis'] = parseInt(document.getElementById('startPreis').value);
wizardData[los_nr]['minPreis'] = parseInt(document.getElementById('minPreis').value);
wizardData[los_nr]['auktionPreis'] = -1;
wizardData[los_nr]['vkPreis'] = -1;
if(next_los_nr == 0){
wizardSend();
}
else if(next_los_nr > wizardData['info']['anzAuk']){
wizardLosData(next_los_nr, 1);
}
else{
wizardLosData(next_los_nr, 0);
}
};
function wizardLosData(los_nr, neu){
$('#content').html('<h1>Los ' + los_nr + '</h1>');
if(neu){
wizardData['info']['anzAuk']++;
wizardData[los_nr] = {};
$.get('templates/html/losLeerForm.html', function(markup){
$('#content').append(markup);
if(los_nr > 9){
$('#content').append('<button class = "bigbutton" onclick = wizardLosDataSave('+los_nr+','+(los_nr - 1)+') >zur<75>ck</button><button class = "wizardButtonFertig" onclick = wizardLosDataSave('+los_nr+',' +0+ ')>Fertig</button>');
}
else if(los_nr == 1){
$('#content').append('<button class = "bigbutton" onclick = wizardChargenname(0) >zur<75>ck</button><button class = "wizardButtonFertig" onclick = wizardLosDataSave('+los_nr+',' +0+ ')>Fertig</button><button class = "wizardButtonNeu" onclick = wizardLosDataSave('+los_nr+','+(los_nr + 1)+')>neu</button>');
}
else{
$('#content').append('<button class = "bigbutton" onclick = wizardLosDataSave('+los_nr+','+(los_nr - 1)+') >zur<75>ck</button><button class = "wizardButtonFertig" onclick = wizardLosDataSave('+los_nr+',' +0+ ')>Fertig</button><button class = "wizardButtonNeu" onclick = wizardLosDataSave('+los_nr+','+(los_nr + 1)+')>neu</button>');
}
})
}
else{
markup = TPL.engine.execute_px('losFilledForm.tpl',wizardData[los_nr]);
$('#content').append(markup);
if(los_nr > 9){
$('#content').append('<button class = "bigbutton" onclick = wizardLosDataSave('+los_nr+','+(los_nr - 1)+') >zur<75>ck</button><button class = "wizardButtonFertig" onclick = wizardLosDataSave('+los_nr+',' +0+ ')>Fertig</button>');
}
else if(los_nr == 1){
$('#content').append('<button class = "bigbutton" onclick = wizardChargenname(0) >zur<75>ck</button><button class = "wizardButtonFertig" onclick = wizardLosDataSave('+los_nr+',' +0+ ')>Fertig</button><button class = "bigbutton" onclick = wizardLosDataSave('+los_nr+','+(los_nr + 1)+')>weiter</button>');
}
else{
$('#content').append('<button class = "bigbutton" onclick = wizardLosDataSave('+los_nr+','+(los_nr - 1)+') >zur<75>ck</button><button class = "wizardButtonFertig" onclick = wizardLosDataSave('+los_nr+',' +0+ ')>Fertig</button><button class = "bigbutton" onclick = wizardLosDataSave('+los_nr+','+(los_nr + 1)+')>weiter</button>');
}
}
};
function wizardChargennameSave(neu){
wizardData['info']['name'] = document.getElementById('chargenname').value;
if(neu){
wizardLosData(1, 1);
}
else{
wizardLosData(1, 0);
}
};
function wizardChargenname(neu){
if(neu){
$('#content').html('<h1>neue Charge</h1>');
$('#content').append('<p><input type = "text" id = "chargenname"></p>');
$('#content').append('<p><button class = "bigbutton" onclick = viewChargenubersicht() >zur<75>ck</button><button class = "bigbutton" onclick = wizardChargennameSave(1)>speichern und weiter</button></p>');
}
else{
$('#content').html('<h1>Charge bearbeiten</h1>');
$('#content').append('<p><input type = "text" id = "chargenname" value = '+wizardData['info']['name']+'></p>');
$('#content').append('<p><button class = "bigbutton" onclick = viewChargenubersicht()>zur<75>ck</button><button class = "bigbutton" onclick = wizardChargennameSave(0)>speichern und weiter</button></p>');
}
};
function wizardStart(chargenNr = 0){
if(chargenNr != 0){
var path = '/manager/' + chargenNr;
$.ajax({
dataType: "json",
url: path,
type: 'GET'
})
.done(function(data){
wizardData = eval("(" + data + ")");
wizardChargenname(0);
})
.fail(function(){
alert("Charge konnte nicht geladen werden");
});
}
else{
wizardData = {};
wizardData['info'] = {};
wizardData['info']['anzAuk'] = 0;
wizardData['info']['chargenNr'] = -1;
wizardChargenname(1);
}
}

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,21 @@
<!-- Template -->
@var rows_o = context;@
<h1>Chargenliste</h1>
<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><td><button onclick = wizardStart(#key_s#)>bearbeiten</button></td><td><button onclick = wizardDelete(#key_s#)>
loeschen</button></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,15 @@
<!-- Template -->
@var data = context;@
<p>Beschreibung</p>
<p><input type = "text" id = "beschreibung" value = #data['beschreibung']#></p>
<p>Anzahl der Gebinde</p>
<p><input type = "text" id = "anzGebinde" value = #data['anzGebinde']#></p>
<p>Dauer der Auktion</p>
<p><input type = "text" id = "auktionDauer" value = #data['auktionDauer']#></p>
<p>Startpreis</p>
<p><input type = "text" id = "startPreis" value = #data['startPreis']#></p>
<p>minimaler Preis</p>
<p><input type = "text" id = "minPreis" value = #data['minPreis']#></p>
<!-- 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 class = "bigbutton" onclick = viewChargenubersicht()>Chargen-Manager</button></p>
<p><button class = "bigbutton" onclick = viewLogfile()>Log-Files</button></p>
</section>

View File

@ -0,0 +1,10 @@
<p>Beschreibung: </p>
<p><input type = "text" id = "beschreibung"></p>
<p>Anzahl der Gebinde</p>
<p><input type = "text" id = "anzGebinde"></p>
<p>Dauer der Auktion</p>
<p><input type = "text" id = "auktionDauer"></p>
<p>Startpreis</p>
<p><input type = "text" id = "startPreis"></p>
<p>minimaler Preis</p>
<p><input type = "text" id = "minPreis"></p>