Custom Patcher / Updater / Installer
Hi everybody!
A long time ago I wrote a custom program in C++ for Perfect World.
Shortly: can update any clients without using compressions and manage clients on the fly with bundled secure webserver and sqlite database.
Only have two parts: server and the client.
Platform independent source, using GNU.
Server can do a following:
- Recursive scan a specified folder and indexing all files by size and mtime.
- Have webadmin over SSL (optional):
- Stop update, proxy servers
- Maintance mode (means: just a specified users can join into server any others gets a customized-error message)
- User management:
- Custom banning system by hardware fingerprint
- Lightweight code, blocking I/O with thread-pool memory management.
- Safe UP to 1024 concurent TCP connection.
- Uses streams.
- Secured transferring with 1byte-crc calculate.
- D.o.S. / D.D.o.S. / Flood protection.
So it can send client files natively, like any client structure server's folder have userdata directory and any PCK files and so on. It checks for any filesystem change under directory and rehash the index, all client will download a most fresh files, except install only files like userdata.
So just need a clean Perfect World client on the server.
Client can do a following:
- Connect to the server:cool:
- Download file indexes
- Check any differnce between server/client files.
- Update / download if needs.
- Launch a crypted tunnel and binding on localhost.
- The game will connect to the client and the client create a tunnel with the server, server can check user.
- Create shortcut to the Desktop
- GUI Interface with bitmap background, looks good.
- 3 buttons, start game (if no update in progress), Forum, Website.
- Actually I using this patcher as installer too it can do.
And so other feature.
I has built in a "all-in-one" built in file.
So the client just a one .exe file, with bundled virtual filesystem.
Server have 2 files, PE binary (*nix) and the config also have builtin vfs and the database file will created after first run.
So It possible to share it, but Of'Corse in limited feature, like a simple real-time patcher.
So it only have a simple webadmin and update server feature with customizable client, without database and the secured tunnel.
If I share it, I have to make a client with external files, like BMPs and the configure file.
I can share only the binary files, because its licensed and closed source by me :)
client .exe file size with UPX 2MB and its cost 5-6MB of RAM.
Server also lightweight, but its hardly depend on concurrent-threads. Measured maximum RAM: 35MB, with 800 concurrent thread and active I/O.
Who wants it? :closedeyes:
Re: Custom Patcher / Updater / Installer
Quote:
Originally Posted by
davies142
Platform independent source, using GNU.
Quote:
Originally Posted by
davies142
I can share only the binary files, because its licensed and closed source by me :)
Quite a contradiction you have there...
And we here are very skeptical of non opensource software... lotsa people try to push malware... (not saying you are one of these people but it is possible)
Re: Custom Patcher / Updater / Installer
Quote:
Originally Posted by
das7002
Quite a contradiction you have there...
And we here are very skeptical of non opensource software... lotsa people try to push malware... (not saying you are one of these people but it is possible)
i think he is don't know what GNU meaning :lol:
and that mean's he doen't know anything
Re: Custom Patcher / Updater / Installer
This software has build by GNUs, not any stupid MS product like Visual C++
It have a lot of OpenSource utils for example: openssl, sqlite3, etc.
I wrote a complex own library which not public at all.
Contains: TCP_Server, TCP_Client, Tunnel, sqlite3 C++ API, some kernel virtualizations, lot of other stuffs and algos which isnt public, because: some protocol and algorythm used to any other application by me and they aren't free.
A question was very simple: Who wants it?
I not necessary to recompile and modify my own working patcher, to use any other people who wants it.
Therefore this only an opportunity
---------- Post added at 12:12 PM ---------- Previous post was at 12:02 PM ----------
"i think he is don't know what GNU meaning
and that mean's he doen't know anything"
BTW, Iam not a stupid kid, I wrote something not coping some files into a single rar and released it like someone ...
Dude I dont said my app is GNU, I just said it compilled by.. and contain GNU softwares.
P.S.
My apps don't have any malware, spyware, adware, trojan-horse or any other viral-code.
Sniff it, Spy it if you dont think so.
Re: Custom Patcher / Updater / Installer
Q: Who want it?
A: Me for test :):
Re: Custom Patcher / Updater / Installer
I have to rewrite the code, it means if someone is really needs it I can release it at the middle of next week.
Re: Custom Patcher / Updater / Installer
I'm still searching after a good alternative to the CPW patching system of PW. :):
Re: Custom Patcher / Updater / Installer
If you can wait 3 days, you will be the first person who have my custom patcher, I will posts some technical details later, Iam currently testing, because I rewritten the code and some functions not working well (yet) (tunnel could not capture the login packet), btw an older version works on 100% since more than one year. :)
---------- Post added at 12:52 PM ---------- Previous post was at 12:39 PM ----------
Here is the server's config file:
Code:
update
{
# Log Level Settings
# example:
# log_level none,all,trace,debug,info,warning,error
log_level = info
#Loging to file
# example:
# log_file = logs/sql.log
log_file = logs/update_server.log
# log_buffer in msec
log_buffer = 2000
# Client Path
client_path = /PWGameGuard/client
# update port
port = 29003
# maximum_connections is a global variable which limiting server
maximum_connections = 200
# maximum_connect_perip is a maximum connection limiting per IP
maximum_connect_perip = 20
# Read Timeout in millisecond
read_timeout = 5000
# Write Timeout in millisecond
write_timeout = 5000
}
Re: Custom Patcher / Updater / Installer
Yes I am interested, as it will make a list of files that we already have? Or will they release a client and it can only read the new update?
Re: Custom Patcher / Updater / Installer
Server create a list of client files and dirs on the server.
And the client (patcher) will query the list and associate with current files, then If found a difference it will download the latest one.
You dont have to increase any number, or create a custom archives, it will automatically download them if client is out-of-date.
If you modify the client files on the server, like a new gshop.data.
Simply restart the update server and it rehash again. But this time all active update progress(clients) are disconnect, but there isnt any problem because clients are trying to reconnect continously until update server starts then the clients do again everything, but only a different files will updated.
Protocol has own CRC checking method like torrent, no files be corrupted, but if you kill the server any clients loose the actual file.
So if you have downloaded 50% of models.pck, when the server killed you have to download whole file.
So this patcher syncs server files with client.
If everything is up to date, a patcher scan your files fast aprox. less than 10second.
Re: Custom Patcher / Updater / Installer
The files on the server side functions as the PW's? Example, we have to send uncompressed files to the server in the case for him to make a list, the server scans this list. This will serve to check a file? Or just add new files to the server and it updates? These files will be in folders separas? Patch 1 Patch 2 = = folder1 folder or two everything will be in the same folder?
From what I understand the User can stop the upgrade at any time and start where you left off?
Re: Custom Patcher / Updater / Installer
This updater syncing the server's files to client's files so it means:
You must have one directory which it contains a full 'playable' game on the server side, on the client side a patcher will update if it necessary.
If user stop updating, it can be continue from the last fully downloaded file and only download any file If it differ than the server's one.
Re: Custom Patcher / Updater / Installer
Then the server side we have a arquivo.pck compressed? If so, I think our community prefers uncompressed files and patch the client to insert in pck, as well as the patcher ronny does, the problem is that it has no control of files and can not pause. Imagine having to send the 1gb models.pck any update?
I would be interested to limit the download rate on a great upgrade 10 users every band could pull for them.
Sorry if I'm being annoying with all questions and suggestions.
Re: Custom Patcher / Updater / Installer
Actually this updater can not handle .pck files, so yes it sends whole 1GB models.pck
But I thinking about that thing how can I handle many uncompressed files into clients's PCKs, but I dont know how PCKs are compressed, btw I think they are pure packed files with zlib and without the huffman alogrythm.
I dont have any free time for it, but If someone can share the spck.exe's source may I can rewrite my patcher to handle .pcks with wide coded charset.
But if you want manage uncompressed .pcks files, like uncompressed models.pck have much file as you need a strong server, because patcher must code every filename(coz: BIG5), and may necessary compress every file.
This method can extremely slow down your update progress.
Bandwidth shaping/limiting not implemented yet, but not impossible to integrate it.
Re: Custom Patcher / Updater / Installer
spck.exe
http://forum.ragezone.com/f452/spck-...tility-675051/
sPCK.exe-c "% path% \ building.pck.files"
sPCK.exe-c "% path% \ configs.pck.files"
sPCK.exe-c "% path% \ facedata.pck.files"
sPCK.exe-c "% path% \ fonts.pck.files"
sPCK.exe-c "% path% \ gfx.pck.files"
sPCK.exe-c "% path% \ grasses.pck.files"
sPCK.exe-c "% path% \ interfaces.pck.files"
sPCK.exe-c "% path% \ litmodels.pck.files"
sPCK.exe-c "% path% \ loddata.pck.files"
sPCK.exe-c "% path% \ models.pck.files"
sPCK.exe-c "% path% \ sfx.pck.files"
sPCK.exe-c "% path% \ shaders.pck.files"
sPCK.exe-c "% path% \ surfaces.pck.files"
sPCK.exe-c "% path% \ textures.pck.files"
sPCK.exe-c "% path% \ trees.pck.files"
If you use it SPCK code is made free by ronny:
stools - Revision 24: /trunk/sPCK
and the spatch:
stools - Revision 24: /trunk/sPATCH
The spatch he takes a zipped file and extract updates. pck
---------- Post added at 03:46 PM ---------- Previous post was at 03:43 PM ----------
One way that could be in your patch would indicate a file version and the folder for that version. The SQL would keep the folder and file names + size. So making the review of files simplest way possible. Download the files to a temporary folder and compressed in. Pck!