This repository has been archived by the owner on Apr 14, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Server.py
116 lines (94 loc) · 3.73 KB
/
Server.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
'''
The main file for server, this is the one to run
Copyright (C) 2020 TrainLink Organisation (matt-hu)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>
'''
def main(mode="normal", configFile=None):
try:
# Imports required trainlink modules
import trainlinkSerial, trainlinkWeb, trainlinkUtils
# Imports required external modules
import threading, time
from pyaddons import logger
# Sets the location of the config file
if configFile == None:
if mode == "test":
configFile = 'config/config.default.xml'
else:
configFile = 'config/config.xml'
# Continues the main logic after the server starts
def mainLogic():
serialMsg = serialUtils.startComms()
logfile.log(str(serialMsg),"d")
'''
if server.debug:
print(serialMsg)
'''
readloop = threading.Thread(target=readLoop)
readloop.start()
while True:
if killThread:
break
serialUtils.updateCabs(server.cabs)
readSerial = serialUtils.getLatest()
if readSerial != False:
if readSerial == "<p2>":
logfile.log("CURRENT OVERLOAD", "dw")
'''
if server.debug:
print("CURRENT OVERLOAD")
'''
server.power = 0
server.update()
time.sleep(0.001)
def readLoop():
while True:
if killThread:
break
serialUtils.readInLoop()
# Loads in the xml module
xmlUtils = trainlinkUtils.xmlUtils(configFile)
# Loads in the xml file and checks it actually was loaded correctly
check = xmlUtils.loadXml()
if check == 1:
print("FileLoad failed")
if mode == "test":
return 1
# Gets the cabs list from the xml
cabs = xmlUtils.listCabs()
# Gets the server config from the xml
config = xmlUtils.loadConfig()
# Creates the logger
if config["logging"].lower() == "true":
defaultCode = "pl"
else:
defaultCode = "p"
if config["debug"].lower() == "true":
debug = True
else:
debug = False
logfile = logger("trainlinkServer.log",default=defaultCode, debug=debug)
serialUtils = trainlinkSerial.comms(config["serialPort"],logfile)
# Creates an instance of the trainlinkWeb library
server = trainlinkWeb.web(config['ipAddress'], config["port"], logfile, config["debug"], cabs, serialUtils)
# Creates a main thread - the server can't run in a second thread, so the main logic has to
killThread = False
mainThread = threading.Thread(target=mainLogic)
mainThread.start()
# Starts the server
server.start(mode)
except KeyboardInterrupt:
killThread = True
return 0
if __name__ == "__main__":
var = main()
print(var)