mirror of
https://github.com/TheGreyDiamond/Enlight.git
synced 2026-01-31 07:30:24 +01:00
More!
This commit is contained in:
@@ -1,21 +1,66 @@
|
|||||||
import socket, time, asyncio, threading
|
import socket, time, threading, logging
|
||||||
import random
|
import random
|
||||||
import string
|
import string
|
||||||
|
|
||||||
|
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s:%(levelname)s:%(threadName)s: %(message)s', datefmt='%Y.%m.%d %H:%M:%S') # %Y.%m.%d %H:%M:%S
|
||||||
|
|
||||||
|
USED_SESSION_IDS = []
|
||||||
|
|
||||||
|
VERSION = "1.1.1"
|
||||||
|
|
||||||
|
|
||||||
def get_random_alphanumeric_string(length):
|
def get_random_alphanumeric_string(length):
|
||||||
letters_and_digits = string.ascii_letters + string.digits
|
letters_and_digits = string.ascii_letters + string.digits
|
||||||
result_str = ''.join((random.choice(letters_and_digits) for i in range(length)))
|
result_str = ''.join((random.choice(letters_and_digits) for i in range(length)))
|
||||||
print("Random alphanumeric String is:", result_str)
|
return(result_str)
|
||||||
## get_random_alphanumeric_string(24)
|
|
||||||
|
class enlightSession():
|
||||||
|
''' The main session class '''
|
||||||
|
def __init__(self, name, password = ""):
|
||||||
|
self.sessionId = None
|
||||||
|
self.sessionName = name
|
||||||
|
self.sessionPassword = password
|
||||||
|
self.members = []
|
||||||
|
if(self.sessionPassword == ""):
|
||||||
|
self.passwordSet = "0"
|
||||||
|
else:
|
||||||
|
self.passwordSet = "1"
|
||||||
|
self.__activ__ = False
|
||||||
|
self.__server__ = None
|
||||||
|
self.__server_thread__ = None
|
||||||
|
self.allowJoin = False
|
||||||
|
|
||||||
|
def initConnection(self):
|
||||||
|
''' Starts the main dicovery/connction method(s) '''
|
||||||
|
global USED_SESSION_IDS
|
||||||
|
self.sessionId = get_random_alphanumeric_string(24)
|
||||||
|
while(self.sessionId in USED_SESSION_IDS):
|
||||||
|
self.sessionId = get_random_alphanumeric_string(24)
|
||||||
|
USED_SESSION_IDS.append(self.sessionId)
|
||||||
|
self.__server__ = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
|
||||||
|
self.__server__.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
|
||||||
|
self.__activ__ = True
|
||||||
|
self.allowJoin = True
|
||||||
|
logging.info("Starting server thread")
|
||||||
|
self.__server_thread__ = threading.Thread(target=self.serverMain, args=(), name="Discovery server")
|
||||||
|
self.__server_thread__.start()
|
||||||
|
|
||||||
|
def serverMain(self):
|
||||||
|
logging.info("Discovery server started")
|
||||||
|
# Set a timeout so the socket does not block
|
||||||
|
# indefinitely when trying to receive data.
|
||||||
|
self.__server__.settimeout(0.2)
|
||||||
|
message = b"SESSION;" + self.sessionName.encode("utf-8") + b";" + self.sessionId.encode("utf-8") + b";" + VERSION.encode("utf-8") + b";" + self.passwordSet.encode("utf-8") + b";" + str(len(self.members)).encode("utf-8") + b"|"
|
||||||
|
|
||||||
|
while self.allowJoin:
|
||||||
|
self.__server__.sendto(message, ("<broadcast>", 37020))
|
||||||
|
logging.info("Sent discovery broadcast")
|
||||||
|
time.sleep(1)
|
||||||
|
logging.info("Discovery server stopped")
|
||||||
|
|
||||||
|
|
||||||
uniqueString = "tTk8ppDJaqnHWP3z8cNCiXVY"
|
|
||||||
|
|
||||||
sessionName = "TestSession"
|
|
||||||
sessionPassword = ""
|
|
||||||
Members = []
|
|
||||||
|
|
||||||
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) # UDP
|
|
||||||
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
|
|
||||||
|
|
||||||
# Enable port reusage so we will be able to run multiple clients and servers on single (host, port).
|
# Enable port reusage so we will be able to run multiple clients and servers on single (host, port).
|
||||||
# Do not use socket.SO_REUSEADDR except you using linux(kernel<3.9): goto https://stackoverflow.com/questions/14388706/how-do-so-reuseaddr-and-so-reuseport-differ for more information.
|
# Do not use socket.SO_REUSEADDR except you using linux(kernel<3.9): goto https://stackoverflow.com/questions/14388706/how-do-so-reuseaddr-and-so-reuseport-differ for more information.
|
||||||
@@ -25,27 +70,14 @@ server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
|
|||||||
# client.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
|
# client.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
|
||||||
|
|
||||||
# Enable broadcasting mode
|
# Enable broadcasting mode
|
||||||
|
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) # UDP
|
||||||
client.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
|
client.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
|
||||||
server.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
|
|
||||||
|
|
||||||
client.bind(("", 37020))
|
client.bind(("", 37020))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def serverMain():
|
|
||||||
print("Server main started")
|
|
||||||
# Set a timeout so the socket does not block
|
|
||||||
# indefinitely when trying to receive data.
|
|
||||||
server.settimeout(0.2)
|
|
||||||
message = b"SESSION;" + sessionName.encode("utf-8") + b";" + uniqueString.encode("utf-8") + b"|"
|
|
||||||
i = 0
|
|
||||||
while i<=10:
|
|
||||||
server.sendto(message, ("<broadcast>", 37020))
|
|
||||||
print(f"Sent at {time.strftime('%X')}")
|
|
||||||
print("message sent!")
|
|
||||||
time.sleep(1)
|
|
||||||
i+=1
|
|
||||||
print("Server quited")
|
|
||||||
|
|
||||||
def clientMain():
|
def clientMain():
|
||||||
print("Client started")
|
print("Client started")
|
||||||
@@ -57,26 +89,21 @@ def clientMain():
|
|||||||
|
|
||||||
proc = data.split(";")
|
proc = data.split(";")
|
||||||
# print(proc[2])
|
# print(proc[2])
|
||||||
if(proc[2] == uniqueString):
|
if(proc[2] == USED_SESSION_IDS[0]):
|
||||||
print("From same device")
|
print("From same device")
|
||||||
|
print(addr)
|
||||||
print("received message: %s" % data)
|
print("received message: %s" % data)
|
||||||
print(f"Rec at {time.strftime('%X')}")
|
print(f"Rec at {time.strftime('%X')}")
|
||||||
print("Client quited")
|
print("Client quited")
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
#task1 = asyncio.create_task(serverMain())
|
|
||||||
#task2 = asyncio.create_task(clientMain())
|
|
||||||
thread = []
|
thread = []
|
||||||
|
ses = enlightSession("TestSession")
|
||||||
|
ses.initConnection()
|
||||||
thread.append(threading.Thread(target=clientMain, args=()))
|
thread.append(threading.Thread(target=clientMain, args=()))
|
||||||
thread.append(threading.Thread(target=serverMain, args=()))
|
# thread.append(threading.Thread(target=serverMain, args=()))
|
||||||
for th in thread:
|
for th in thread:
|
||||||
th.start()
|
th.start()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#await task1
|
|
||||||
#await task2
|
|
||||||
|
|
||||||
#asyncio.run(main())
|
|
||||||
main()
|
main()
|
||||||
print("Quited")
|
print("Quited")
|
||||||
@@ -4,5 +4,17 @@
|
|||||||
"path": "."
|
"path": "."
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"settings": {}
|
"settings": {},
|
||||||
|
"launch": {
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "Python: Aktuelle Datei",
|
||||||
|
"type": "python",
|
||||||
|
"request": "launch",
|
||||||
|
"program": "${file}",
|
||||||
|
"console": "integratedTerminal"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
BIN
lightbulb.png
Normal file
BIN
lightbulb.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 824 B |
Reference in New Issue
Block a user