├── .gitignore
├── Icarus.sln
├── Icarus.vcxproj
├── Icarus.vcxproj.filters
├── Icarus.vcxproj.user
├── LICENSE.txt
├── README.md
├── compile
├── sql
└── icarusdb.sql
└── src
├── boot
├── Icarus.cpp
└── Icarus.h
├── communication
├── headers
│ ├── Incoming.h
│ └── Outgoing.h
├── incoming
│ ├── DefaultMessageEvent.h
│ ├── MessageEvent.h
│ ├── MessageHandler.cpp
│ ├── MessageHandler.h
│ ├── catalogue
│ │ ├── CataloguePageMessageEvent.h
│ │ ├── CatalogueTabMessageEvent.h
│ │ └── PurchaseObjectMessageEvent.h
│ ├── item
│ │ └── InventoryMessageEvent.h
│ ├── login
│ │ ├── AuthenticateMessageEvent.h
│ │ ├── UniqueIDMessageEvent.h
│ │ └── VersionCheckMessageEvent.h
│ ├── messenger
│ │ ├── FollowFriendMessageEvent.h
│ │ ├── MessengerAcceptMessageEvent.h
│ │ ├── MessengerDeclineMessageEvent.h
│ │ ├── MessengerDeleteFriendMessageEvent.h
│ │ ├── MessengerInitMessageEvent.h
│ │ ├── MessengerInviteMessageEvent.h
│ │ ├── MessengerRequestMessageEvent.h
│ │ ├── MessengerSearchMessageEvent.h
│ │ ├── MessengerTalkMessageEvent.h
│ │ └── MessengerUpdateMessageEvent.h
│ ├── misc
│ │ ├── EventLogMessageEvent.h
│ │ └── LatencyTestMessageEvent.h
│ ├── navigator
│ │ ├── CanCreateRoomMessageEvent.h
│ │ ├── CreateRoomMessageEvent.h
│ │ ├── NewNavigatorMessageEvent.h
│ │ └── SearchNewNavigatorEvent.h
│ ├── room
│ │ ├── DeleteRoomMessageEvent.h
│ │ ├── EnterRoomMessageEvent.h
│ │ ├── HeightMapMessageEvent.h
│ │ ├── LeaveRoomMessageEvent.h
│ │ ├── RoomEditInfoMessageEvent.h
│ │ ├── RoomInfoMessageEvent.h
│ │ ├── SaveRoomMessageEvent.h
│ │ ├── doorbell
│ │ │ ├── AnswerDoorbellMessageEvent.h
│ │ │ └── EnterDoorbellMessageEvent.h
│ │ ├── item
│ │ │ ├── ApplyDecorationMessageEvent.h
│ │ │ ├── InteractItemMessageEvent.h
│ │ │ ├── MoveItemMessageEvent.h
│ │ │ ├── PickupItemMessageEvent.h
│ │ │ └── PlaceItemMessageEvent.h
│ │ └── user
│ │ │ ├── ChatMessageEvent.h
│ │ │ ├── DanceMessageEvent.h
│ │ │ ├── ShoutMessageEvent.h
│ │ │ ├── ShowSignMessageEvent.h
│ │ │ ├── TypingStatusMessageEvent.h
│ │ │ └── WalkMessageEvent.h
│ └── user
│ │ ├── CurrencyBalanceMessageEvent.h
│ │ └── InfoRetrieveMessageEvent.h
├── outgoing
│ ├── DefaultComposer.h
│ ├── MessageComposer.h
│ ├── catalogue
│ │ ├── CataloguePageMessageComposer.h
│ │ ├── CatalogueTabMessageComposer.h
│ │ ├── PurchaseErrorMessageComposer.h
│ │ └── PurchaseNotificationMessageComposer.h
│ ├── item
│ │ ├── FurniListNotificationComposer.h
│ │ ├── InventoryMessageComposer.h
│ │ ├── RemoveInventoryItemComposer.h
│ │ └── UpdateInventoryMessageComposer.h
│ ├── login
│ │ ├── AuthenticateMessageComposer.h
│ │ ├── AvailabilityMessageComposer.h
│ │ ├── HomeRoomMessageComposer.h
│ │ ├── LandingWidgetMessageComposer.h
│ │ └── UniqueMachineIDMessageComposer.h
│ ├── messenger
│ │ ├── FollowErrorMessageComposer.h
│ │ ├── FollowFriendMessageComposer.h
│ │ ├── FriendsListMessageComposer.h
│ │ ├── MessageInviteMessageComposer.h
│ │ ├── MessengerCategoriesMessageComposer.h
│ │ ├── MessengerMessageComposer.h
│ │ ├── MessengerRequestsMessageComposer.h
│ │ ├── MessengerSearchMessageComposer.h
│ │ ├── MessengerSendRequestComposer.h
│ │ ├── MessengerUpdateMessageComposer.h
│ │ └── RemoveFriendMessageComposer.h
│ ├── misc
│ │ └── BroadcastMessageAlertComposer.h
│ ├── navigator
│ │ ├── CanCreateRoomMessageComposer.h
│ │ ├── CreateRoomMessageComposer.h
│ │ ├── FlatCategoriesMessageComposer.h
│ │ ├── NavigatorCategoriesComposer.h
│ │ ├── NavigatorMetaDataComposer.h
│ │ ├── NavigatorPreferencesMessageComposer.h
│ │ └── SearchResultSetComposer.h
│ ├── room
│ │ ├── RoomDataMessageComposer.h
│ │ ├── RoomSettingsDataMessageComposer.h
│ │ ├── doorbell
│ │ │ ├── AcceptUserInsideRoomMessageComposer.h
│ │ │ ├── GenericDoorbellMessageComposer.h
│ │ │ ├── GenericErrorMessageComposer.h
│ │ │ ├── GenericNoAnswerDoorbellMessageComposer.h
│ │ │ └── RoomEnterErrorMessageComposer.h
│ │ ├── entry
│ │ │ ├── HasOwnerRightsMessageComposer.h
│ │ │ ├── NoRightsMessageComposer.h
│ │ │ ├── PrepareRoomMessageComposer.h
│ │ │ ├── RightsLevelMessageComposer.h
│ │ │ ├── RoomModelMessageComposer.h
│ │ │ ├── RoomOwnerRightsComposer.h
│ │ │ ├── RoomRatingMessageComposer.h
│ │ │ └── RoomSpacesMessageComposer.h
│ │ ├── item
│ │ │ ├── FloorItemsMessageComposer.h
│ │ │ ├── MoveItemMessageComposer.h
│ │ │ ├── PlaceItemMessageComposer.h
│ │ │ ├── RemoveItemMessageComposer.h
│ │ │ └── WallItemsMessageComposer.h
│ │ ├── model
│ │ │ ├── FloorMapMessageComposer.h
│ │ │ └── HeightMapMessageComposer.h
│ │ └── user
│ │ │ ├── DanceStatusMessageComposer.h
│ │ │ ├── FloodFilterMessageComposer.h
│ │ │ ├── IdleStatusMessageComposer.h
│ │ │ ├── RemoveUserMessageComposer.h
│ │ │ ├── TalkMessageComposer.h
│ │ │ ├── TypingStatusMessageComposer.h
│ │ │ ├── UserDisplayMessageComposer.h
│ │ │ └── UserStatusMessageComposer.h
│ └── user
│ │ ├── CreditsMessageComposer.h
│ │ ├── HotelViewMessageComposer.h
│ │ ├── SendPerkAllowancesMessageComposer.h
│ │ └── UserObjectMessageComposer.h
└── streams
│ ├── Request.cpp
│ ├── Request.h
│ ├── Response.cpp
│ └── Response.h
├── dao
├── CatalogueDao.cpp
├── CatalogueDao.h
├── ItemDao.cpp
├── ItemDao.h
├── MessengerDao.cpp
├── MessengerDao.h
├── MySQLDao.cpp
├── MySQLDao.h
├── NavigatorDao.cpp
├── NavigatorDao.h
├── RoomDao.cpp
├── RoomDao.h
├── UserDao.cpp
└── UserDao.h
├── database
├── DatabaseManager.cpp
├── DatabaseManager.h
└── lib
│ ├── ConnectionPool.h
│ └── MySQLConnection.h
├── game
├── Game.cpp
├── Game.h
├── bot
│ ├── Bot.cpp
│ └── Bot.h
├── catalogue
│ ├── CatalogueItem.cpp
│ ├── CatalogueItem.h
│ ├── CatalogueManager.cpp
│ ├── CatalogueManager.h
│ ├── CataloguePage.h
│ └── CatalogueTab.h
├── entities
│ ├── Entity.h
│ ├── EntityDetails.cpp
│ ├── EntityDetails.h
│ └── EntityType.h
├── item
│ ├── Item.cpp
│ ├── Item.h
│ ├── ItemManager.cpp
│ ├── ItemManager.h
│ ├── definitions
│ │ ├── ItemDefinition.h
│ │ └── ItemType.h
│ ├── interactor
│ │ ├── BaseInteractor.h
│ │ ├── InteractorManager.cpp
│ │ ├── InteractorManager.h
│ │ └── interactors
│ │ │ ├── DefaultInteractor.h
│ │ │ └── GateInteractor.h
│ └── inventory
│ │ ├── Inventory.cpp
│ │ └── Inventory.h
├── messenger
│ ├── Messenger.cpp
│ ├── Messenger.h
│ ├── MessengerUser.cpp
│ └── MessengerUser.h
├── navigator
│ ├── NavigatorCategory.h
│ ├── NavigatorManager.cpp
│ ├── NavigatorManager.h
│ ├── NavigatorTab.cpp
│ ├── NavigatorTab.h
│ └── populators
│ │ ├── DefaultPopulator.h
│ │ ├── DisposablePopulator.h
│ │ ├── FriendsPopulator.h
│ │ ├── MyRoomPopulator.h
│ │ ├── OfficialRoomPopulator.h
│ │ ├── PopularPopulator.h
│ │ └── RoomPopulator.h
├── pathfinder
│ ├── Pathfinder.cpp
│ ├── Pathfinder.h
│ ├── PathfinderNode.cpp
│ ├── PathfinderNode.h
│ ├── Position.cpp
│ └── Position.h
├── player
│ ├── Player.cpp
│ ├── Player.h
│ ├── PlayerManager.cpp
│ └── PlayerManager.h
└── room
│ ├── Room.cpp
│ ├── Room.h
│ ├── RoomData.h
│ ├── RoomManager.cpp
│ ├── RoomManager.h
│ ├── RoomUser.cpp
│ ├── RoomUser.h
│ ├── misc
│ ├── RoomNewbie.h
│ └── RoomNewbieItem.h
│ ├── model
│ ├── DynamicModel.cpp
│ ├── DynamicModel.h
│ ├── RoomModel.cpp
│ ├── RoomModel.h
│ ├── Rotation.cpp
│ ├── Rotation.h
│ └── tile
│ │ ├── RoomTile.cpp
│ │ └── RoomTile.h
│ └── tasks
│ ├── RoomRunnable.cpp
│ └── RoomRunnable.h
├── main.cpp
├── misc
├── Configuration.cpp
├── Configuration.h
├── Utilities.cpp
└── Utilities.h
├── network
├── NetworkConnection.cpp
├── NetworkConnection.h
├── NetworkServer.cpp
├── NetworkServer.h
└── rcon
│ ├── RconConnection.cpp
│ ├── RconConnection.h
│ ├── RconServer.cpp
│ └── RconServer.h
├── stdafx.cpp
├── stdafx.h
├── targetver.h
└── thread
├── BlockingQueue.h
├── ExecutorService.cpp
├── ExecutorService.h
└── Runnable.h
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | # Ignore directories #
3 |
4 | Debug/
5 | Release/
6 | x64/
7 | x86/
8 | .vs/
9 | Icarus.VC.db
10 | Icarus.VC.VC.opendb
11 | Icarus.sln
12 | Makefile
13 | ipch/
14 | enc_temp_folder/
15 | configuration.ini
16 | game.ini
17 | logs/
18 | config/
--------------------------------------------------------------------------------
/Icarus.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 14
4 | VisualStudioVersion = 14.0.25420.1
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Icarus", "Icarus.vcxproj", "{15FD8BFE-F7D0-49C3-A699-F569761E265E}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|x64 = Debug|x64
11 | Debug|x86 = Debug|x86
12 | Release|x64 = Release|x64
13 | Release|x86 = Release|x86
14 | EndGlobalSection
15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
16 | {15FD8BFE-F7D0-49C3-A699-F569761E265E}.Debug|x64.ActiveCfg = Debug|x64
17 | {15FD8BFE-F7D0-49C3-A699-F569761E265E}.Debug|x64.Build.0 = Debug|x64
18 | {15FD8BFE-F7D0-49C3-A699-F569761E265E}.Debug|x86.ActiveCfg = Debug|Win32
19 | {15FD8BFE-F7D0-49C3-A699-F569761E265E}.Debug|x86.Build.0 = Debug|Win32
20 | {15FD8BFE-F7D0-49C3-A699-F569761E265E}.Release|x64.ActiveCfg = Release|x64
21 | {15FD8BFE-F7D0-49C3-A699-F569761E265E}.Release|x64.Build.0 = Release|x64
22 | {15FD8BFE-F7D0-49C3-A699-F569761E265E}.Release|x86.ActiveCfg = Release|Win32
23 | {15FD8BFE-F7D0-49C3-A699-F569761E265E}.Release|x86.Build.0 = Release|Win32
24 | EndGlobalSection
25 | GlobalSection(SolutionProperties) = preSolution
26 | HideSolutionNode = FALSE
27 | EndGlobalSection
28 | EndGlobal
29 |
--------------------------------------------------------------------------------
/Icarus.vcxproj.user:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | true
5 |
6 |
7 | -hang
8 | WindowsLocalDebugger
9 |
10 |
11 | -hang
12 | WindowsLocalDebugger
13 |
14 |
15 | -hang
16 | WindowsLocalDebugger
17 |
18 |
19 | -hang
20 | WindowsLocalDebugger
21 | $(SolutionDir)$(Platform)\$(Configuration)\
22 |
23 |
--------------------------------------------------------------------------------
/compile:
--------------------------------------------------------------------------------
1 | g++-6 -fpermissive -Wall -Wextra -Wreorder -L /lib64 -I/usr/include/mysql/ -Isrc src/main.cpp src/stdafx.cpp src/boot/Icarus.cpp src/communication/incoming/MessageHandler.cpp src/communication/streams/Request.cpp src/communication/streams/Response.cpp src/dao/CatalogueDao.cpp src/dao/MessengerDao.cpp src/dao/MySQLDao.cpp src/dao/NavigatorDao.cpp src/dao/RoomDao.cpp src/dao/UserDao.cpp src/database/DatabaseManager.cpp src/game/Game.cpp src/game/catalogue/CatalogueManager.cpp src/game/catalogue/CatalogueTab.cpp src/game/messenger/Messenger.cpp src/game/messenger/MessengerUser.cpp src/game/navigator/NavigatorManager.cpp src/game/navigator/NavigatorTab.cpp src/game/navigator/populators/DefaultPopulator.cpp src/game/navigator/populators/MyRoomPopulator.cpp src/game/navigator/populators/OfficialRoomPopulator.cpp src/game/navigator/populators/PopularPopulator.cpp src/game/pathfinder/Pathfinder.cpp src/game/pathfinder/PathfinderNode.cpp src/game/pathfinder/Position.cpp src/game/player/Player.cpp src/game/player/PlayerManager.cpp src/game/room/Room.cpp src/game/room/RoomManager.cpp src/game/room/RoomUser.cpp src/game/room/model/RoomModel.cpp src/game/room/model/Rotation.cpp src/game/room/tasks/RoomRunnable.cpp src/misc/Configuration.cpp src/misc/Utilities.cpp src/network/NetworkConnection.cpp src/network/NetworkServer.cpp src/network/rcon/RconConnection.cpp src/network/rcon/RconServer.cpp src/thread/ExecutorService.cpp -lboost_system -lboost_thread -lboost_filesystem -lpthread -lmysqlcppconn -o icarus
--------------------------------------------------------------------------------
/src/boot/Icarus.h:
--------------------------------------------------------------------------------
1 | /**
2 | * Icarus - A multi-platform C++ server
3 | *
4 | * Copyright 2016 Alex "Quackster" Miller
5 | *
6 | * Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License
7 | * (see https://creativecommons.org/licenses/by-nc-sa/4.0/, or LICENSE.txt for a full license
8 | */
9 | #pragma once
10 |
11 | #include
12 |
13 | #include "game/player/PlayerManager.h"
14 | #include "database/DatabaseManager.h"
15 | #include "network/NetworkServer.h"
16 | #include "communication/incoming/MessageHandler.h"
17 | #include "misc/Configuration.h"
18 | #include "game/Game.h"
19 |
20 | using std::endl;
21 | using std::cout;
22 |
23 | class PlayerManager;
24 | class NetworkServer;
25 | class MessageHandler;
26 | class DatabaseManager;
27 | class Configuration;
28 | class Game;
29 |
30 | class Icarus
31 | {
32 |
33 | public:
34 | ~Icarus();
35 | static void boot();
36 | static const long getUnixTimestamp();
37 | static const int getRandomNumber(int a, int b);
38 | static PlayerManager *getPlayerManager();// { return sessionManager; }
39 | static NetworkServer *getNetworkServer();
40 | static MessageHandler *getMessageHandler();// { return networkServer; }
41 | static DatabaseManager *getDatabaseManager();
42 |
43 | static Configuration *getDatabaseConfiguration();
44 | static Configuration *getGameConfiguration();
45 | static Configuration *getLogConfiguration();
46 | static Configuration *getServerConfiguration();
47 |
48 | static Game *getGame();
49 |
50 | private:
51 |
52 | static PlayerManager *player_manager;
53 | static NetworkServer *network_server;
54 | static MessageHandler *message_handler;
55 | static DatabaseManager *database_manager;
56 |
57 | static Configuration *server_configuration;
58 | static Configuration *game_configuration;
59 | static Configuration *log_configuration;
60 | static Configuration *database_configuration;
61 | static Game *game;
62 |
63 |
64 | };
65 |
66 |
--------------------------------------------------------------------------------
/src/communication/incoming/DefaultMessageEvent.h:
--------------------------------------------------------------------------------
1 | /**
2 | * Icarus - A multi-platform C++ server
3 | *
4 | * Copyright 2016 Alex "Quackster" Miller
5 | *
6 | * Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License
7 | * (see https://creativecommons.org/licenses/by-nc-sa/4.0/, or LICENSE.txt for a full license
8 | */
9 | #pragma once
10 | #include "communication/incoming/MessageEvent.h"
11 |
12 | class DefaultMessageEvent : public MessageEvent {
13 |
14 | public:
15 | DefaultMessageEvent() { }
16 |
17 | void handle(Player *player, Request &request) { }
18 | };
--------------------------------------------------------------------------------
/src/communication/incoming/MessageEvent.h:
--------------------------------------------------------------------------------
1 | /**
2 | * Icarus - A multi-platform C++ server
3 | *
4 | * Copyright 2016 Alex "Quackster" Miller
5 | *
6 | * Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License
7 | * (see https://creativecommons.org/licenses/by-nc-sa/4.0/, or LICENSE.txt for a full license
8 | */
9 | #pragma once
10 | #include "game/player/Player.h"
11 | #include "communication/headers/Outgoing.h"
12 |
13 | #include "communication/streams/Request.h"
14 | #include "communication/streams/Response.h"
15 |
16 | class MessageEvent
17 | {
18 |
19 | public:
20 | virtual ~MessageEvent() {}
21 | virtual void handle(Player *player, Request &request) = 0;
22 | };
--------------------------------------------------------------------------------
/src/communication/incoming/MessageHandler.h:
--------------------------------------------------------------------------------
1 | /**
2 | * Icarus - A multi-platform C++ server
3 | *
4 | * Copyright 2016 Alex "Quackster" Miller
5 | *
6 | * Licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License
7 | * (see https://creativecommons.org/licenses/by-nc-sa/4.0/, or LICENSE.txt for a full license
8 | */
9 | #pragma once
10 | #include