Jeison Yehuda Amihud (Blender Dumbass)
ba370b7cb1
This is the historic moment When the multiuser was implemented.
95 lines
3.7 KiB
Python
95 lines
3.7 KiB
Python
# THIS FILE IS A PART OF VCStudio
|
|
# PYTHON 3
|
|
|
|
###############################################################################
|
|
|
|
# Multiuser is a complex system. It's so complex that my brain is melting at
|
|
# the moment. Anyways. Users need a way to talk to the server. And I'm going
|
|
# to provide it to the user using a multiuser Layer. See:
|
|
# studio/studio_multiuserLayer.py.
|
|
|
|
# Tho there is one problem. The user should be able to read and write messages
|
|
# to the server. And you think. Right. There is a network/network_multiuser.py
|
|
# for this. Well. for the most stuff yes.
|
|
|
|
# There are 2 types of protocols multiuser system uses. The TCP and the UDP.
|
|
|
|
# TCP protocol is used to tranfer sensetive stuff. Like files, scene text. Stuff
|
|
# that has to be at full. And where loosing packages is unexceptable.
|
|
|
|
# UDP will be used for the other stuff. Like log of the server. And messages to
|
|
# the server. Such as an Abort message.
|
|
|
|
# This file handle the UDP side of things.
|
|
|
|
###############################################################################
|
|
|
|
import os
|
|
import socket
|
|
import datetime
|
|
|
|
def listen(win):
|
|
|
|
# Listen function will run in it's own thread and get the data from the
|
|
# server. It will be teminal like messages that we show in the multiuser
|
|
# window.
|
|
|
|
UDP_IP = "255.255.255.255"
|
|
UDP_PORT = 54545
|
|
|
|
while True:
|
|
|
|
try:
|
|
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|
sock.bind((UDP_IP, UDP_PORT))
|
|
#sock.settimeout(0.05)
|
|
|
|
data, addr = sock.recvfrom(1024)
|
|
data = data.decode('utf8')
|
|
|
|
seconds_format = "%H:%M:%S"
|
|
time = datetime.datetime.strftime(datetime.datetime.now(), seconds_format)
|
|
|
|
if "VCStudio MULTIUSER SERVER TERMINAL" in data:
|
|
#print(time+data.replace("VCStudio MULTIUSER SERVER TERMINAL", ""))
|
|
win.multiuser["terminal"].append(time+data.replace("VCStudio MULTIUSER SERVER TERMINAL", ""))
|
|
|
|
# Now i want to use a limit. Because hell I don't want 20000000
|
|
# bazillion messages stored in the memory at all times.
|
|
|
|
win.multiuser["terminal"] = win.multiuser["terminal"][-300:]
|
|
|
|
# And we want to scroll down on each message so
|
|
|
|
win.scroll["multiuser_terminal"] = 0 - len(win.multiuser["terminal"])*50
|
|
|
|
elif "VCStudio ABORT MULTIUSER" in data:
|
|
win.multiuser["users"] = {}
|
|
|
|
sock.close()
|
|
|
|
except:
|
|
pass
|
|
|
|
def message(message):
|
|
|
|
# This is a function that will be called by multiple buttons. That want to
|
|
# send the server any kind of message. But actually it's gonna send a message
|
|
# to 255.255.255.255 port 54545 that the server is listening. At the moment
|
|
# of writing this comment the server is programed only for 1 type of command
|
|
# like this. It's the "VCStudio ABORT MULTIUSER". That makes the server stop
|
|
# working. This command is a bit dangerous at the moment. Because it's running
|
|
# on it's own thread in the server. Making it close even in the middle of a
|
|
# request. Like it can corrupt a file that's being transferred.
|
|
|
|
UDP_IP = "255.255.255.255"
|
|
UDP_PORT = 54545
|
|
|
|
cs1 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
cs1.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|
cs1.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
|
|
cs1.sendto(bytes(message, 'utf-8'), (UDP_IP, UDP_PORT))
|
|
cs1.close()
|
|
|
|
|