Skip to content

Commit

Permalink
Added clubs and fixed a lot of stuff
Browse files Browse the repository at this point in the history
Added some security for clubs and at login

## Clubs join request is not done (im very lazy) and only leader will have full permission because im currently facing some issue with clubs permissions
  • Loading branch information
CrazorTheCat committed Nov 26, 2021
1 parent da9ae05 commit e926f80
Show file tree
Hide file tree
Showing 70 changed files with 1,688 additions and 128 deletions.
34 changes: 32 additions & 2 deletions Core.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
import socket
import threading
import time
import traceback
from builtins import ConnectionError

from Logic.Client.ClientsManager import ClientsManager
from Logic.Data.PacketsHandler import PacketsHandler
from Logic.Client.PlayerManager import Players
from Messaging.Packets.Server.Home.LobbyInfoMessage import LobbyInfoMessage


class Core:
def __init__(self):
Expand All @@ -25,7 +28,8 @@ def __init__(self, client, address):
super().__init__()
self.address = address
self.client = client
self.player = Players
self.player = Players()
LobbyInfoMessageThread(self.client).start()

def run(self):
try:
Expand All @@ -38,6 +42,32 @@ def run(self):
ClientsManager.RemoveSocket(self.player.LowID)
self.client.close()
print(traceback.format_exc())
exit(0)
# exit(0)
return

except OSError:
print(f"Client with ip: {self.address[0]} disconnected!")
ClientsManager.RemoveSocket(self.player.LowID)
self.client.close()
print(traceback.format_exc())
# exit(0)
return

class LobbyInfoMessageThread(threading.Thread):
def __init__(self, client):
super().__init__()
self.client = client
self.player = Players

def run(self):
timeout = time.time()
try:
while True:
time.sleep(0.1)
if time.time() >= timeout + 1:
LobbyInfoMessage(self.client, self.player).send(self.client)
timeout = time.time()
except:
return

Core().CoreInit()
55 changes: 50 additions & 5 deletions Database/ClubManager.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
import json
import sqlite3
import traceback
from collections import OrderedDict
from operator import getitem

from Logic.Files.Classes.Regions import Regions


class ClubManager():
Expand Down Expand Up @@ -27,24 +32,64 @@ def deleteClub(self, lowID):
print(e)


def GetAllDb(self):
self.playersId = []
def getAllClub(self):
clubs = []
try:
self.cursor.execute("SELECT * from main")
self.db = self.cursor.fetchall()
for i in range(len(self.db)):
self.playersId.append(self.db[i][0])
return self.playersId
clubs.append(json.loads(self.db[i][1]))
return clubs
except Exception as e:
print(e)

def getAllClubByRegion(self, regionID):
clubs = []
try:
self.cursor.execute("SELECT * from main")
self.db = self.cursor.fetchall()
for i in range(len(self.db)):
dataLoaded = json.loads(self.db[i][1])
if dataLoaded['RegionID'] == Regions.getIDByRegion(self, regionID):
clubs.append(dataLoaded)
return clubs
except Exception as e:
print(traceback.format_exc())

def getDefaultMembersData(self, player, role):
return {'HighID': player.HighID, 'LowID': player.LowID, 'Name': player.Name, 'Role': role, 'Trophies': player.trophies, 'NameColor': player.nameColor, 'Thumbnail': player.thumbnail}

def getDefaultMessageData(self, eventType, streamType, lastID, playerID, playerName, playerRole, target={}, msgData="", premadeID=-1, messageDataID=-1):
return {'StreamType': eventType, 'EventType': streamType, 'StreamID': lastID, 'PlayerID': playerID, 'PlayerName': playerName, 'PlayerRole': playerRole, 'Message': msgData, 'Target': target, 'PremadeID': premadeID, 'MessageDataID': messageDataID}

def getClubWithLowID(self, low):
try:
self.cursor.execute("SELECT * from main where LowID=?", (low,))
return self.cursor.fetchall()
except Exception as e:
print(e)

def getMembersSorted(self, clubdata):
try:
return sorted(clubdata['Members'].items(), key = lambda x: x[1]['Trophies'], reverse=True)
except Exception as e:
print(e)

def getMemberWithLowID(self, clubData, playerLowID):
try:
return clubData["Members"][str(playerLowID)]
except Exception as e:
print(e)

def getTotalTrophies(self, clubData):
try:
totalTrophies = 0
for i in clubData["Members"].values():
totalTrophies += i['Trophies']
return totalTrophies
except Exception as e:
print(e)

def LoadAccount(self, low, player):
try:
self.player = player
Expand All @@ -54,7 +99,7 @@ def LoadAccount(self, low, player):
except Exception as e:
print(e)

def update_player_data(self, data, lowID):
def updateClubData(self, data, lowID):
try:
self.cursor.execute("UPDATE main SET Data=? WHERE LowID=?", (json.dumps(data, ensure_ascii=0), lowID))
self.conn.commit()
Expand Down
15 changes: 9 additions & 6 deletions Database/DatabaseManager.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ def createAccount(self, lowID, token, data):
except Exception:
print(traceback.format_exc())

def GetAllDb(self, low_id):
def GetAllDb(self):
self.playersId = []
try:
self.cursor.execute("SELECT * from main")
Expand All @@ -42,9 +42,10 @@ def LoadAccount(self, low, player):
try:
self.player = player
self.cursor.execute("SELECT * from main where LowID=?", (low,))
self.players = self.cursor.fetchall()
self.players = json.loads(self.players[0][2])
playersdata = self.cursor.fetchall()
self.players = json.loads(playersdata[0][2])
self.player.Name = self.players['name']
self.player.Token = playersdata[0][1]
self.player.isRegistred = self.players['IsRegistred']
self.player.level = self.players['level']
self.player.doNotDisturb = self.players['DoNotDisturb']
Expand All @@ -57,21 +58,23 @@ def LoadAccount(self, low, player):
self.player.brawlersTrophies = self.players['brawlersTrophies']
self.player.selectedRandomSkin = self.players['selectedRandomSkin']
self.player.starpowerID = self.players['starpowerID']
self.player.thumbnails = self.players['playericon']
self.player.thumbnail = self.players['playericon']
self.player.nameColor = self.players['namecolor']
self.player.region = self.players['region']
self.player.trophies = self.players['trophies']
self.player.experience = self.players['experience']
self.player.room_id = self.players['gameroomID']
self.player.roomInfo = self.players['roomInfo']
self.player.alliance_id = self.players['allianceID']
self.player.allianceID = self.players['allianceID']
self.player.isBanned = self.players['isBanned']
self.player.gems = self.players['gems']
self.player.coins = self.players['coins']
self.player.clubMailInbox = self.players['clubMailInbox']

except Exception:
print(traceback.format_exc())

def update_player_data(self, data, lowID):
def updatePlayerData(self, data, lowID):
try:
self.cursor.execute("UPDATE main SET Data=? WHERE LowID=?", (json.dumps(data, ensure_ascii=0), lowID))
self.conn.commit()
Expand Down
6 changes: 3 additions & 3 deletions Logic/Classes/LogicClientAvatar.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ def decode(self: Reader):
pass

def encode(self: Writer):
self.writeVLong(self.player.HighID, self.player.LowID) # PlayerID
self.writeVLong(self.player.HighID, self.player.LowID)
self.writeVLong(self.player.HighID, self.player.LowID)
self.writeLogicLong(self.player.HighID, self.player.LowID) # PlayerID
self.writeLogicLong(self.player.HighID, self.player.LowID)
self.writeLogicLong(self.player.HighID, self.player.LowID)

self.writeString(self.player.Name) # PlayerName
self.writeBoolean(self.player.isRegistred) # isRegistred
Expand Down
15 changes: 9 additions & 6 deletions Logic/Classes/LogicClientHome.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,20 @@ def encode(self: Writer):
LogicConfData.encode(self)
self.writeLong(self.player.HighID, self.player.LowID) # PlayerID

self.writeVint(len(Configuration.Inbox)) # Notification Factory
self.writeVint(len(Configuration.Inbox) + len(self.player.clubMailInbox)) # Notification Factory
for notifInfo in Configuration.Inbox:
NotificationFactory.encode(self, (Configuration.Inbox.index(notifInfo), notifInfo))

for notifInfo2 in self.player.clubMailInbox:
NotificationFactory.encode(self, (notifInfo2['Index'], notifInfo2))

# TODO
# self.writeVint(58) # New Club For Club League
# self.writeInt(10)
# self.writeBoolean(True)
# self.writeInt(9999)
# self.writeString("BSDS")
# self.writeVLong(0, 1)
# self.writeLogicLong(0, 1)
# self.writeDataReference(0)
# self.writeString("BSDS HACC")
#
Expand All @@ -36,8 +39,8 @@ def encode(self: Writer):
# self.writeString("BSDS")
# self.writeVint(1)
# self.writeVint(1)
# self.writeVLong(0, 1)
# self.writeVLong(0, 1)
# self.writeLogicLong(0, 1)
# self.writeLogicLong(0, 1)
# self.writeVint(1)
# self.writeVint(1)
# self.writeVint(1)
Expand All @@ -50,8 +53,8 @@ def encode(self: Writer):
# self.writeInt(9999)
# self.writeString("BSDS")
# self.writeVint(1)
# self.writeVLong(0, 1)
# self.writeVLong(0, 1)
# self.writeLogicLong(0, 1)
# self.writeLogicLong(0, 1)
# self.writeDataReference(0, 0)
# self.writeVint(1)
# self.writeVint(1)
Expand Down
2 changes: 1 addition & 1 deletion Logic/Classes/LogicCommand.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ class LogicCommand:
def encode(self):
self.writeVint(0)
self.writeVint(0)
self.writeVLong(self.player.HighID, self.player.LowID)
self.writeLogicLong(self.player.HighID, self.player.LowID)
4 changes: 2 additions & 2 deletions Logic/Classes/LogicDailyData.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ def encode(self: Writer):
self.writeVint(self.player.highestTrophies)
self.writeVint(self.player.trophy_road_tier)
self.writeVint(self.player.experience)
self.writeDataReference(28, self.player.thumbnails)
self.writeDataReference(28, self.player.thumbnail)
self.writeDataReference(43, self.player.nameColor)

# Array
Expand Down Expand Up @@ -85,7 +85,7 @@ def encode(self: Writer):
self.writeVint(0)
self.writeVint(0)
self.writeDataReference(16, self.player.brawlerID)
self.writeString('CA')
self.writeString(self.player.region)
self.writeString("Project BSDS")

self.writeVint(18)
Expand Down
4 changes: 2 additions & 2 deletions Logic/Classes/LogicPlayerMap.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@

class LogicPlayerMap:
def decode(self: Reader):
self.readVLong("MapID")
self.readLogicLong("MapID")
self.readString("MapName")
self.readVint("GameModeVariation")
self.readDataReference("MapEnvironmentData")
self.readCompressedString("MapData")
self.readVLong("AccountID")
self.readLogicLong("AccountID")
self.readString("AvatarName")
self.readVint("State")
self.readLong("LastUpdateTimeSecondsSinceEpoch")
Expand Down
6 changes: 4 additions & 2 deletions Logic/Client/DevicesManager.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
class Device:
def __init__(self):
pass

major = 0
minor = 0
build = 0
isAndroid = True
build = 0
Loading

0 comments on commit e926f80

Please sign in to comment.