Project Salmon (Habbo Hotel r63b Emulator) [C++03][UNIX][POSIX][Open Source Anarchy]
Project Salmon
Habbo Hotel Emulator (r63b)
--- Bulletin: There are two important dates for this project: end of January and the end of February. The goal is to have the Hotel view working by the end of January and an undetermined number of features implemented by the end of February (an official list will be posted as January ends). We reckon we will be able to meet this tentative deadlines (and possibly finish earlier). Moreover, on the first deadline we will release the first stable build of this project as an 'r63b emulator framework' and on the second deadline we will release 'salmon emulator (r63b)'. Once the first deadline has been reached, the repository will be closed so the remainder of the Habbo features can be developed privately; then released near the end of February.
Notice to Sulake: If you find yourself looking at this thread, the project is created for educational purposes only. I do not run or maintain a Hotel (nor am I directly affiliated with any). If you are keen to contact me, my information is at the bottom of this thread (or see my portfolio website).
---
Preamble
Back story, an aside if you are inclined to read it.
Spoiler:
Hi! My name is Jacob Pollack. I have been both the child and man behind a lot of projects 3 years ago that were oriented towards the progression of Habbo Hotel private servers; though primarily website development projects, I have also worked on a few Uber emulator edits. In summary, these projects were in the past and much has changed.
Some members may have the displeasure (which is understandable) of recognizing me from previous Habbo private server ventures (i.e. Demon Hotel and RaGEZONE Hotel, henceforth never referenced again); they are in the past. I understand that lasting, buried away emotions may be lifted from this development, however I am kindly asking that you express these emotions somewhere else. I have kindly asked MentaL to forgive the past in the promise of positive contributions to the community (which I will be keeping my word). I understand that the path to keeping my word will be filled with adversity, however I am confident that it will be kept.
This project is my contribution to the community; pooling some of the material that I have learned over the past 3 years. The contribution does not end at that, it's an attitude contribution as well in the hope to continue an open source and community development thriving section (personal goals, ones you may or may not share which is ok).
Features Summary
Habbo Features
Not enough has been complete to be worth mentioning... this will be updated as development progresses. Client version will be posted as well (including a link to the cracked SWF).
Other Features
... to be done.
Snippets
Habbo Snippets
Spoiler:
To arrive...
Code Snippets
Spoiler:
Socket Manager Constructor
Code:
// See header file.
SocketManager::SocketManager(const string bindIPAddr, const short bindPort, const short backLog) {
// Initializes the fields.
this->serverFD = -1;
this->connectionReactor = NULL;
// ####
int result;
sockaddr_in inAddr;
// Creates the server socket and stores its file descriptor. Forces the TCP
// protocol.
result = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
// Determines if there was one or more errors creating the socket. If so,
// throw a critical exception.
if (-1 == result) {
throw CritException("Could not create socket.", __LINE__, __FILE__);
}
this->serverFD = result;
// Set the server socket as non-blocking. This will be inherited.
const int tmpFlags = fcntl(this->serverFD, F_GETFL, 0);
// Set the server socket as reusible. This will be inherited.
const int on = 1;
result = setsockopt(this->serverFD, SOL_SOCKET, SO_REUSEADDR, reinterpret_cast<const char *>(&on), sizeof(on));
// Determines if there was an error setting the server socket option.
if (-1 == result) {
throw CritException("Could not set the server socket as reusible.", __LINE__, __FILE__);
}
// Begins storing the server address information.
inAddr.sin_family = AF_INET;
inAddr.sin_port = htons(bindPort);
result = inet_pton(AF_INET, bindIPAddr.c_str(), &(inAddr.sin_addr));
// Determines if there was an error storing the IP address in its Network
// Byte Order in the server information struct. If so, throw a critical
// exception.
if ((0 == result) || (-1 == result)) {
throw CritException("Could not convert the server's IP address to its NBO representation.", __LINE__, __FILE__);
}
// Zero-fills the sin_zero field.
memset(&(inAddr.sin_zero), 0, sizeof(char) * 8);
// Binds the server socket to the specified server address information.
result = bind(this->serverFD, reinterpret_cast<sockaddr *>(&inAddr), sizeof(inAddr));
// Determines if there was an error binding the server socket to the
// specified server address information. If so, throw a critical exception.
if (-1 == result) {
throw CritException("Could not bind the server socket to the server address information", __LINE__, __FILE__);
}
// ####
// Marks the server socket as accepting incoming connections.
result = listen(this->serverFD, backLog);
// Determines if there was an error marking the server socket. If so, throw
// a critical exception.
if (-1 == result) {
throw CritException("Could not mark the server socket as accepting incoming connections.", __LINE__, __FILE__);
}
// ####
// Creates a new ConnectionReactor nwo that the server socket has been
// created, bound, and marked for accepting incoming connections.
this->connectionReactor = new ConnectionReactor(this->serverFD);
}
Development Information
The entire subversion repository for this project can be found here:
To checkout the repository, run the command pipline svn co svn://jamach.servehttp.com/projectSalmon. Note, if you are a contributor then pass the --username flag and proceed to authenticate.
There are two important areas in the repository: /trunk and branches/jacob. /trunk contains the latest working copy (or, stable release) of the project, whereas /branches/jacob contains the latest development copy of the project. Changes are merged from /branches/jacob into /trunk once they are finished.
Everyone can anonymously access the repository however, you only have read permission as an anonymous user. To contribute to this project, see the contributors section of this post.
Dependency information (non-exhaustive list of programs or libraries that are required; platform-specific configuration may still be needed). This information will accurately reflect the requirements for the working copy (subject to change as development progresses). Note, requirements for the development copy may be different.
Subversion control (svn) client,
g++ compiler (C++03, not 11),
make, and
pthread library (may need to pass the -lpthread flag).
Here are some other programs that may serve of some interest if you are contributing or exploring the source code. Note, pass the -g flag.
gdb, and
valgrind (be careful on OSX).
Development Diary
We are going to explore maintaing a development diary as well. This consists of Youtube videos outlining the progression in the emulator's development. Suggestions are welcome for how we approach this. Moreover, it will also consist of a list of 'rabbit stages' (see below; constantly updating as rabbits are caught and introduced).
Setup repository, [done!]
Game environment, [current task]
Configuration data, [done!]
Socket manager, [done!]
Connection reactor, [current task]
Request handler, [current task]
Sessions, [current task]
Error handling, [done!]
Exceptions (Critical), [done!]
Thread pool, [current task]
Crypto, [to do!]
Database, and [to do!]
... more to list.
Developer's Diary: These videos are time lapse of progression from one revision to another. Note, these videos are all live (that is, it is not rehearsed)!
Setup: link to arrive
Episode 1: link.
Episode 2: link to arrive
JoinME: For those that are interested in seeing me work on the project live then you I invite you to visit the join.me web page and view my screen. I will attempt to have it available every time I am working on the project, so randomly connect and see if it's up. Note, I am -5 GMT.
Link: click here [offline!]
Change Log
For the working copy's SVN change log, run the command pipeline svn log in /trunk.
For the development copy's SVN change log, run the command pipeline svn log in /branches/jacob. Broad list of changes will not be posted until they are merged into the working copy.
Re: Project Salmon (Habbo Hotel r63b Emulator) [C++03][UNIX][Open Source]
Well err... nobody can judge since we don't even see a simple std::cout, you just make a thread about a project that hasn't even started yet, what's the point of that? Couldn't you just wait until you actually DID something?
25-12-13
BurakDev
Re: Project Salmon (Habbo Hotel r63b Emulator) [C++03][UNIX][Open Source]
Nice project ! :)
25-12-13
TheJacob
Re: Project Salmon (Habbo Hotel r63b Emulator) [C++03][UNIX][Open Source]
Quote:
Originally Posted by Tha
Well err... nobody can judge since we don't even see a simple std::cout, you just make a thread about a project that hasn't even started yet, what's the point of that? Couldn't you just wait until you actually DID something?
Fair statement, in the bullet I noted that it will be arriving shortly. Some initial commits have been made, more will occur throughout the day. It's the beginning of a long venture (=
25-12-13
hatlevn
Re: Project Salmon (Habbo Hotel r63b Emulator) [C++03][UNIX][Open Source]
Although you don't have anything considerably worth showing at the moment, I believe your involvement and communication with the community about your project is key. I watched your time lapse diary, and I think that is a very good way to show the progression of the development; do you plan on recording every single contribution you make to it? If you do have any speculation of what your overall goal of the project is (that being what you are focusing on), I'm sure that will get us possibly more excited about the release.
All that aside, good luck, and I hope this leads to something very successful!
25-12-13
TheJacob
Re: Project Salmon (Habbo Hotel r63b Emulator) [C++03][UNIX][Open Source]
Quote:
Originally Posted by hatlevn
... do you plan on recording every single contribution you make to it? If you do have any speculation of what your overall goal of the project is (that being what you are focusing on), I'm sure that will get us possibly more excited about the release.
The first development diary video was a trial to see how involved it would be to film whilst working on the project. I am comfortable doing more of these if it's of interest (and possible annotate a few and put it to real time). The end goal of this project is two things: (1) to have an as complete as possible r63b emulator; lot's of learning, and (2) contribute as much as possible to the community during its development.
I am open to suggestions on the development diary, if you have any. The time lapse was suggested by a friend of mine; though a good idea, I still think it can be improved.
25-12-13
Emily
Re: Project Salmon (Habbo Hotel r63b Emulator) [C++03][UNIX][Open Source]
Quote:
Originally Posted by TheJacob
Fair statement, in the bullet I noted that it will be arriving shortly. Some initial commits have been made, more will occur throughout the day. It's the beginning of a long venture (=
Tbh I was expecting a little flame, anyways, good luck, if you have sockets done, can you perhaps push them onto SVN so I can take a look and learn how multithreaded async works? (I'm a noob in C++ and really want to learn it more :))
25-12-13
TheJacob
Re: Project Salmon (Habbo Hotel r63b Emulator) [C++03][UNIX][Open Source]
Quote:
Originally Posted by Tha
... if you have sockets done, can you perhaps push them onto SVN so I can take a look and learn how multithreaded async works? (I'm a noob in C++ and really want to learn it more :))
I committed the work I did this morning onto the subversion repository (and merged the branches). I will be constantly committing today; focusing on the socket management (now) and thread pool (later today).
For those that are interested to see the current changes I did, see /trunk. Throughout today I will be working on the developer's copy though, so see /branches/jacob.
25-12-13
1ntel
Re: Project Salmon (Habbo Hotel r63b Emulator) [C++03][UNIX][Open Source]
Quote:
Originally Posted by TheJacob
I committed the work I did this morning onto the subversion repository (and merged the branches). I will be constantly committing today; focusing on the socket management (now) and thread pool (later today).
For those that are interested to see the current changes I did, see /trunk. Throughout today I will be working on the developer's copy though, so see /branches/jacob.
Not Found
The requested URL /projectSalmon/trunk was not found on this server.
Apache/2.2.22 (Ubuntu) Server at jamach.servehttp.com Port 80
25-12-13
The General
Re: Project Salmon (Habbo Hotel r63b Emulator) [C++03][UNIX][Open Source]
I know that screenshots and snippets are required for any development thread...
Anyways good luck as long as you can keep Sulake outside your door. Should put your real name there. Now you're on their deathlist I think :):
25-12-13
Emily
Re: Project Salmon (Habbo Hotel r63b Emulator) [C++03][UNIX][Open Source]
Quote:
Originally Posted by 1ntel
Not Found
The requested URL /projectSalmon/trunk was not found on this server.
Apache/2.2.22 (Ubuntu) Server at jamach.servehttp.com Port 80
It's SVN, you can't access it through your browser.
I use tortoiseSVN and I can access everything fine (by going to the svn:// link)
26-12-13
The General
Re: Project Salmon (Habbo Hotel r63b Emulator) [C++03][UNIX][Open Source]
Well just looking at the other closed dev thread I think this is just another example of how retarted this community is and in the end only wants to make money.
Leon did the same with his comet emulator. Spreading the word and in the end just selling his junk.
I keep this position till something proper is released.
26-12-13
TheJacob
Re: Project Salmon (Habbo Hotel r63b Emulator) [C++03][UNIX][Open Source]
Update: The second developer's diary (part 1) has been filmed and is being annotated before it's uploaded to Youtube. The second developer's diary is a trilogy covering how I implemented the reactor pattern for handling concurrent connection requests. A friend suggestion I annotate the video with my thoughts; the video is significantly different than the first developer's diary (not a time lapse, entirely).
Quote:
Originally Posted by HillBilly
I know that screenshots and snippets are required for any development thread...
There is a Youtube video (developer's diary) and a repository that you can view. See the thread.
26-12-13
NoBrain
Re: Project Salmon (Habbo Hotel r63b Emulator) [C++03][UNIX][Open Source]
Quote:
Originally Posted by HillBilly
Well just looking at the other closed dev thread I think this is just another example of how retarted this community is and in the end only wants to make money.
Leon did the same with his comet emulator. Spreading the word and in the end just selling his junk.
I keep this position till something proper is released.
It's going to be free... Lol
Sent from my Windows Phone 8S by HTC using Tapatalk
26-12-13
hatlevn
Re: Project Salmon (Habbo Hotel r63b Emulator) [C++03][UNIX][Open Source]
Quote:
Originally Posted by HillBilly
Well just looking at the other closed dev thread I think this is just another example of how retarted this community is and in the end only wants to make money.
Leon did the same with his comet emulator. Spreading the word and in the end just selling his junk.
I keep this position till something proper is released.
Although Jacob specifically states at the beginning of his thread... "I ask kindly that you wait 2 weeks before you criticize the progression of this project."