MCPcopy Create free account
hub / github.com/AstroPrint/AstroBox / PrinterStateConnection

Class PrinterStateConnection

src/octoprint/server/util.py:137–249  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

135
136
137class PrinterStateConnection(SockJSConnection):
138 EVENTS = [Events.UPDATED_FILES, Events.METADATA_ANALYSIS_FINISHED, Events.SLICING_STARTED, Events.SLICING_DONE, Events.SLICING_FAILED,
139 Events.TRANSFER_STARTED, Events.TRANSFER_DONE, Events.CLOUD_DOWNLOAD, Events.ASTROPRINT_STATUS, Events.SOFTWARE_UPDATE,
140 Events.CAPTURE_INFO_CHANGED, Events.LOCK_STATUS_CHANGED, Events.NETWORK_STATUS, Events.INTERNET_CONNECTING_STATUS,
141 Events.GSTREAMER_EVENT, Events.TOOL_CHANGE, Events.COPY_TO_HOME_PROGRESS, Events.EXTERNAL_DRIVE_MOUNTED,
142 Events.EXTERNAL_DRIVE_EJECTED, Events.EXTERNAL_DRIVE_PHISICALLY_REMOVED, Events.LOCAL_VIDEO_STREAMING_STOPPED, Events.PRINTER_PROMPT]
143
144 def __init__(self, userManager, eventManager, session):
145 SockJSConnection.__init__(self, session)
146
147 self._logger = logging.getLogger(__name__)
148
149 self._temperatureBacklog = []
150 self._temperatureBacklogMutex = threading.Lock()
151 self._emitLock = threading.Lock()
152
153 self._userManager = userManager
154 self._eventManager = eventManager
155
156 def _getRemoteAddress(self, request):
157 forwardedFor = request.headers.get("X-Forwarded-For")
158 if forwardedFor is not None:
159 return forwardedFor.split(",")[0]
160 return request.ip
161
162 def on_open(self, request):
163 s = settings()
164 loggedUsername = s.get(["cloudSlicer", "loggedUser"])
165
166 if loggedUsername:
167 token = request.arguments.get("token")
168 token = token[0] if token else None
169 tokenContents = octoprint.server.read_ws_token(token)
170 if not tokenContents or tokenContents['public_key'] != self._userManager.findUser(loggedUsername).publicKey:
171 return False
172
173 remoteAddress = self._getRemoteAddress(request)
174 self._logger.info("New connection from client [IP address: %s, Session id: %s]", remoteAddress, self.session.session_id)
175
176 # connected => update the API key, might be necessary if the client was left open while the server restarted
177 self._emit("connected", {"apikey": octoprint.server.UI_API_KEY, "version": octoprint.server.VERSION, "sessionId": self.session.session_id})
178 self.sendEvent(Events.ASTROPRINT_STATUS, boxrouterManager().status)
179
180 printer = printerManager()
181
182 printer.registerCallback(self)
183 printer.fileManager.registerCallback(self)
184
185 self._eventManager.fire(Events.CLIENT_OPENED, {"remoteAddress": remoteAddress})
186 for event in PrinterStateConnection.EVENTS:
187 self._eventManager.subscribe(event, self._onEvent)
188
189 if printer.promptManager.hasPrompt:
190 self.sendEvent(Events.PRINTER_PROMPT, {
191 'type': 'show',
192 'prompt': printer.promptManager.prompt
193 })
194

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected