Begin work on Unit Tests

This commit is contained in:
Li 2022-11-14 23:09:22 +13:00
parent cf7605c6c9
commit eaf1db1ee1
51 changed files with 3883 additions and 2101 deletions

View file

@ -1,141 +1,141 @@
using HISP.Properties;
using System.IO;
namespace HISP.Server
{
public class ConfigReader
{
public static int Port = 12321;
public static string BindIP = "0.0.0.0";
public static string DatabaseIP = "127.0.0.1";
public static string DatabaseName = "game1";
public static string DatabaseUsername = "root";
public static string DatabasePassword = "test123";
public static int DatabasePort = 3306;
public static int IntrestRate = 3333;
public static string Motd = "April 11, 2020. New breed, Camarillo White Horse. Two new quests.";
public static string MapFile = "HI1.MAP";
public static string GameData = "gamedata.json";
public static string CrossDomainPolicyFile = "CrossDomainPolicy.xml";
public static string ModsFolder = "mods";
public static int LogLevel = 4;
public static bool SqlLite = false;
public static bool EnableSpamFilter = true;
public static bool AllUsersSubbed = false;
public static bool FixOfficalBugs = false;
public static bool EnableSwearFilter = true;
public static bool EnableCorrections = true;
public static bool EnableNonViolations = true;
public static string ConfigurationFileName = "server.properties";
public static void OpenConfig()
{
if (!File.Exists(ConfigurationFileName))
{
Logger.WarnPrint(ConfigurationFileName+" not found! writing default.");
File.WriteAllText(ConfigurationFileName, Resources.DefaultServerProperties);
Logger.WarnPrint("! Its very likely database connection will fail...");
}
string[] configFile = File.ReadAllLines(ConfigurationFileName);
foreach (string setting in configFile)
{
/*
* Avoid crashing.
*/
if (setting.Length < 1)
continue;
if (setting[0] == '#')
continue;
if (!setting.Contains("="))
continue;
string[] dataPair = setting.Split('=');
string key = dataPair[0];
string data = dataPair[1];
/*
* Parse configuration file
*/
switch (key)
{
case "port":
Port = int.Parse(data);
break;
case "ip":
BindIP = data;
break;
case "db_ip":
DatabaseIP = data;
break;
case "db_username":
DatabaseUsername = data;
break;
case "db_password":
DatabasePassword = data;
break;
case "db_name":
DatabaseName = data;
break;
case "db_port":
DatabasePort = int.Parse(data);
break;
case "map":
MapFile = data;
break;
case "motd":
Motd = data;
break;
case "gamedata":
GameData = data;
break;
case "crossdomain":
CrossDomainPolicyFile = data;
break;
case "all_users_subscribed":
AllUsersSubbed = data == "true";
break;
case "enable_corrections":
EnableCorrections = data == "true";
break;
case "sql_lite":
SqlLite = data == "true";
break;
case "enable_non_violation_check":
EnableNonViolations = data == "true";
break;
case "enable_spam_filter":
EnableSpamFilter = data == "true";
break;
case "fix_offical_bugs":
FixOfficalBugs = data == "true";
break;
case "enable_word_filter":
EnableSwearFilter = data == "true";
using HISP.Properties;
using System.IO;
namespace HISP.Server
{
public class ConfigReader
{
public static int Port = 12321;
public static string BindIP = "0.0.0.0";
public static string DatabaseIP = "127.0.0.1";
public static string DatabaseName = "game1";
public static string DatabaseUsername = "root";
public static string DatabasePassword = "test123";
public static int DatabasePort = 3306;
public static int IntrestRate = 3333;
public static string Motd = "April 11, 2020. New breed, Camarillo White Horse. Two new quests.";
public static string MapFile = "HI1.MAP";
public static string GameData = "gamedata.json";
public static string CrossDomainPolicyFile = "CrossDomainPolicy.xml";
public static string ModsFolder = "mods";
public static int LogLevel = 4;
public static bool SqlLite = false;
public static bool EnableSpamFilter = true;
public static bool AllUsersSubbed = false;
public static bool FixOfficalBugs = false;
public static bool EnableSwearFilter = true;
public static bool EnableCorrections = true;
public static bool EnableNonViolations = true;
public static string ConfigurationFileName = "server.properties";
public static void OpenConfig()
{
if (!File.Exists(ConfigurationFileName))
{
Logger.WarnPrint(ConfigurationFileName+" not found! writing default.");
File.WriteAllText(ConfigurationFileName, Resources.DefaultServerProperties);
Logger.WarnPrint("! Its very likely database connection will fail...");
}
string[] configFile = File.ReadAllLines(ConfigurationFileName);
foreach (string setting in configFile)
{
/*
* Avoid crashing.
*/
if (setting.Length < 1)
continue;
if (setting[0] == '#')
continue;
if (!setting.Contains("="))
continue;
string[] dataPair = setting.Split('=');
string key = dataPair[0];
string data = dataPair[1];
/*
* Parse configuration file
*/
switch (key)
{
case "port":
Port = int.Parse(data);
break;
case "mods_folder":
ModsFolder = data;
break;
case "intrest_rate":
IntrestRate = int.Parse(data);
break;
case "log_level":
LogLevel = int.Parse(data);
break;
}
}
}
}
}
case "ip":
BindIP = data;
break;
case "db_ip":
DatabaseIP = data;
break;
case "db_username":
DatabaseUsername = data;
break;
case "db_password":
DatabasePassword = data;
break;
case "db_name":
DatabaseName = data;
break;
case "db_port":
DatabasePort = int.Parse(data);
break;
case "map":
MapFile = data;
break;
case "motd":
Motd = data;
break;
case "gamedata":
GameData = data;
break;
case "crossdomain":
CrossDomainPolicyFile = data;
break;
case "all_users_subscribed":
AllUsersSubbed = data == "true";
break;
case "enable_corrections":
EnableCorrections = data == "true";
break;
case "sql_lite":
SqlLite = data == "true";
break;
case "enable_non_violation_check":
EnableNonViolations = data == "true";
break;
case "enable_spam_filter":
EnableSpamFilter = data == "true";
break;
case "fix_offical_bugs":
FixOfficalBugs = data == "true";
break;
case "enable_word_filter":
EnableSwearFilter = data == "true";
break;
case "mods_folder":
ModsFolder = data;
break;
case "intrest_rate":
IntrestRate = int.Parse(data);
break;
case "log_level":
LogLevel = int.Parse(data);
break;
}
}
}
}
}

View file

@ -4128,6 +4128,23 @@ namespace HISP.Server
return subscribedUntil;
}
}
public static void SetUserSubscriptionStatus(int playerId, int subscribedUntil)
{
using (DbConnection db = connectDb())
{
db.Open();
DbCommand sqlCommand = db.CreateCommand();
sqlCommand.CommandText = "UPDATE UserExt SET SubscribedUntil=@subscribedUntil WHERE Id=@playerId";
addWithValue(sqlCommand, "@subscribedUntil", subscribedUntil);
addWithValue(sqlCommand, "@playerId", playerId);
sqlCommand.Prepare();
sqlCommand.ExecuteNonQuery();
}
}
public static bool IsUserAdmin(int playerId)
{
using (DbConnection db = connectDb())

View file

@ -693,7 +693,7 @@ namespace HISP.Server
if (user.MuteAll || user.MuteSocials)
continue;
byte[] soundEffect = PacketBuilder.CreatePlaysoundPacket(social.SoundEffect);
byte[] soundEffect = PacketBuilder.CreatePlaySound(social.SoundEffect);
user.LoggedinClient.SendPacket(soundEffect);
}
}
@ -3694,7 +3694,7 @@ namespace HISP.Server
User user = sender.LoggedinUser;
// Send player current location & map data
byte[] MovementPacket = PacketBuilder.CreateMovementPacket(user.X, user.Y, user.CharacterId, user.Facing, PacketBuilder.DIRECTION_TELEPORT, true);
byte[] MovementPacket = PacketBuilder.CreateMovement(user.X, user.Y, user.CharacterId, user.Facing, PacketBuilder.DIRECTION_TELEPORT, true);
sender.SendPacket(MovementPacket);
// Send "Welcome to the Secret Land of Horses" message.
@ -3770,7 +3770,7 @@ namespace HISP.Server
sender.SendPacket(TileFlags);
// Send Todays Note:
byte[] MotdData = PacketBuilder.CreateAnnouncement(Messages.FormatMOTD());
byte[] MotdData = PacketBuilder.CreateMotd(Messages.FormatMotd(ConfigReader.Motd));
sender.SendPacket(MotdData);
// Send riddle annoucement
@ -3918,7 +3918,7 @@ namespace HISP.Server
if(room.Drawing != "")
{
byte[] drawingPacket = PacketBuilder.CreateDrawingUpdatePacket(room.Drawing);
byte[] drawingPacket = PacketBuilder.CreateDrawingUpdate(room.Drawing);
sender.SendPacket(drawingPacket);
}
@ -4117,7 +4117,7 @@ namespace HISP.Server
break;
}
// Send list of peices
byte[] poetPacket = PacketBuilder.CreateBrickPoetListPacket(room);
byte[] poetPacket = PacketBuilder.CreateBrickPoetList(room);
sender.SendPacket(poetPacket);
}
@ -4173,7 +4173,7 @@ namespace HISP.Server
if (user.Id == sender.LoggedinUser.Id)
continue;
byte[] updatePoetRoomPacket = PacketBuilder.CreateBrickPoetMovePacket(peice);
byte[] updatePoetRoomPacket = PacketBuilder.CreateBrickPoetMove(peice);
user.LoggedinClient.SendPacket(updatePoetRoomPacket);
}
@ -4206,7 +4206,7 @@ namespace HISP.Server
if (room.DressupPeices.Length > 0)
{
byte[] allDressupsResponse = PacketBuilder.CreateDressupRoomPeiceLoad(room.DressupPeices.ToArray());
byte[] allDressupsResponse = PacketBuilder.CreateDressupRoomPeiceLoad(room.DressupPeices);
sender.SendPacket(allDressupsResponse);
}
@ -4280,7 +4280,7 @@ namespace HISP.Server
}
break;
case PacketBuilder.SWFMODULE_BANDHALL:
byte[] response = PacketBuilder.CreateForwardedSwfRequest(packet);
byte[] response = PacketBuilder.CreateForwardedSwfModule(packet);
foreach (User user in GetUsersAt(sender.LoggedinUser.X, sender.LoggedinUser.Y))
{
if (user.Id == sender.LoggedinUser.Id)
@ -4299,7 +4299,7 @@ namespace HISP.Server
else if (twoPlayerGame.Inviting.Id == sender.LoggedinUser.Id)
otherUser = twoPlayerGame.Invitee;
response = PacketBuilder.CreateForwardedSwfRequest(packet);
response = PacketBuilder.CreateForwardedSwfModule(packet);
otherUser.LoggedinClient.SendPacket(response);
}
break;
@ -4326,7 +4326,7 @@ namespace HISP.Server
if (Arena.UserHasEnteredHorseInAnyArena(sender.LoggedinUser))
{
Arena arena = Arena.GetArenaUserEnteredIn(sender.LoggedinUser);
response = PacketBuilder.CreateForwardedSwfRequest(packet);
response = PacketBuilder.CreateForwardedSwfModule(packet);
foreach (Arena.ArenaEntry entry in arena.Entries.ToArray())
{
if (entry.EnteredUser.Id == sender.LoggedinUser.Id)
@ -5088,7 +5088,7 @@ namespace HISP.Server
loggedInUser.Facing = Direction + (onHorse * 5);
Logger.DebugPrint("Exiting player: " + loggedInUser.Username + " to: " + loggedInUser.X + "," + loggedInUser.Y);
byte[] moveResponse = PacketBuilder.CreateMovementPacket(loggedInUser.X, loggedInUser.Y, loggedInUser.CharacterId, loggedInUser.Facing, Direction, true);
byte[] moveResponse = PacketBuilder.CreateMovement(loggedInUser.X, loggedInUser.Y, loggedInUser.CharacterId, loggedInUser.Facing, Direction, true);
sender.SendPacket(moveResponse);
goto Complete;
}
@ -5177,12 +5177,12 @@ namespace HISP.Server
}
}
byte[] moveResponse = PacketBuilder.CreateMovementPacket(loggedInUser.X, loggedInUser.Y, loggedInUser.CharacterId, loggedInUser.Facing, direction, true);
byte[] moveResponse = PacketBuilder.CreateMovement(loggedInUser.X, loggedInUser.Y, loggedInUser.CharacterId, loggedInUser.Facing, direction, true);
sender.SendPacket(moveResponse);
}
else
{
byte[] moveResponse = PacketBuilder.CreateMovementPacket(loggedInUser.X, loggedInUser.Y, loggedInUser.CharacterId, loggedInUser.Facing, PacketBuilder.DIRECTION_NONE, false);
byte[] moveResponse = PacketBuilder.CreateMovement(loggedInUser.X, loggedInUser.Y, loggedInUser.CharacterId, loggedInUser.Facing, PacketBuilder.DIRECTION_NONE, false);
sender.SendPacket(moveResponse);
}
Complete:;
@ -5396,7 +5396,7 @@ namespace HISP.Server
if (transportLocation.Type != "ROWBOAT")
{
byte[] swfModulePacket = PacketBuilder.CreateSwfModule(swfToLoad, PacketBuilder.PACKET_SWF_CUTSCENE);
byte[] swfModulePacket = PacketBuilder.CreateSwfModule(swfToLoad, PacketBuilder.PACKET_SWF_MODULE_CUTSCENE);
sender.SendPacket(swfModulePacket);
}
@ -5491,7 +5491,7 @@ namespace HISP.Server
User[] users = GetUsersAt(sender.LoggedinUser.X, sender.LoggedinUser.Y, true, true);
foreach (User user in users)
{
byte[] MovementPacket = PacketBuilder.CreateMovementPacket(user.X, user.Y, user.CharacterId, user.Facing, PacketBuilder.DIRECTION_TELEPORT, true);
byte[] MovementPacket = PacketBuilder.CreateMovement(user.X, user.Y, user.CharacterId, user.Facing, PacketBuilder.DIRECTION_TELEPORT, true);
user.LoggedinClient.SendPacket(MovementPacket);
}
UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true);
@ -5531,7 +5531,7 @@ namespace HISP.Server
User[] users = GetUsersAt(sender.LoggedinUser.X, sender.LoggedinUser.Y, true, true);
foreach (User user in users)
{
byte[] MovementPacket = PacketBuilder.CreateMovementPacket(user.X, user.Y, user.CharacterId, user.Facing, PacketBuilder.DIRECTION_TELEPORT, true);
byte[] MovementPacket = PacketBuilder.CreateMovement(user.X, user.Y, user.CharacterId, user.Facing, PacketBuilder.DIRECTION_TELEPORT, true);
user.LoggedinClient.SendPacket(MovementPacket);
}
UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y, true);
@ -6017,7 +6017,7 @@ namespace HISP.Server
byte[] chatPacketOthers = PacketBuilder.CreateChat(formattedMessage, chatSide);
byte[] chatPacketSender = PacketBuilder.CreateChat(formattedMessageSender, chatSide);
byte[] playDmSound = PacketBuilder.CreatePlaysoundPacket(Chat.PrivateMessageSound);
byte[] playDmSound = PacketBuilder.CreatePlaySound(Chat.PrivateMessageSound);
// Send to clients ...
foreach (GameClient recipiant in recipiants)
@ -7389,7 +7389,7 @@ namespace HISP.Server
if(Database.IsUserBanned(userId))
{
Logger.DebugPrint(sender.RemoteIp + " Tried to login to : " + username + " but, the account was banned.");
byte[] userBannedPacket = PacketBuilder.CreateLoginPacket(false, Messages.LoginFailedReasonBanned);
byte[] userBannedPacket = PacketBuilder.CreateLogin(false, Messages.LoginFailedReasonBanned);
sender.SendPacket(userBannedPacket);
return;
}
@ -7397,18 +7397,15 @@ namespace HISP.Server
if(Database.IsIpBanned(sender.RemoteIp))
{
Logger.DebugPrint(sender.RemoteIp + " Tried to login to : " + username + " but, the IP was banned.");
byte[] ipBannedPacket = PacketBuilder.CreateLoginPacket(false, Messages.FormatIpBannedMessage(sender.RemoteIp));
byte[] ipBannedPacket = PacketBuilder.CreateLogin(false, Messages.FormatIpBannedMessage(sender.RemoteIp));
sender.SendPacket(ipBannedPacket);
return;
}
sender.Login(userId);
sender.LoggedinUser.Password = password;
byte[] ResponsePacket = PacketBuilder.CreateLoginPacket(true);
byte[] ResponsePacket = PacketBuilder.CreateLogin(true);
sender.SendPacket(ResponsePacket);
Logger.DebugPrint(sender.RemoteIp + " Logged into : " + sender.LoggedinUser.Username + " (ADMIN: " + sender.LoggedinUser.Administrator + " MOD: " + sender.LoggedinUser.Moderator + ")");
@ -7417,7 +7414,7 @@ namespace HISP.Server
else
{
Logger.WarnPrint(sender.RemoteIp + " Attempted to login to: " + username + " with incorrect password ");
byte[] ResponsePacket = PacketBuilder.CreateLoginPacket(false);
byte[] ResponsePacket = PacketBuilder.CreateLogin(false);
sender.SendPacket(ResponsePacket);
}
}
@ -7467,7 +7464,7 @@ namespace HISP.Server
client.SendPacket(logoutMessageBytes);
// Tell clients of diconnect (remove from chat)
byte[] playerRemovePacket = PacketBuilder.CreatePlayerLeavePacket(sender.LoggedinUser.Username);
byte[] playerRemovePacket = PacketBuilder.CreatePlayerLeave(sender.LoggedinUser.Username);
foreach (GameClient client in GameClient.ConnectedClients)
if (client.LoggedIn)
if (client.LoggedinUser.Id != sender.LoggedinUser.Id)
@ -7755,7 +7752,7 @@ namespace HISP.Server
if (user.MailBox.UnreadMailCount > 0)
{
byte[] RipOffAOLSound = PacketBuilder.CreatePlaysoundPacket(Messages.MailSe);
byte[] RipOffAOLSound = PacketBuilder.CreatePlaySound(Messages.MailSe);
user.LoggedinClient.SendPacket(RipOffAOLSound);
byte[] mailReceivedText = PacketBuilder.CreateChat(Messages.MailReceivedMessage, PacketBuilder.CHAT_BOTTOM_RIGHT);
@ -7830,7 +7827,7 @@ namespace HISP.Server
if (user.Id == sender.LoggedinUser.Id)
continue;
byte[] patchDrawing = PacketBuilder.CreateDrawingUpdatePacket(drawing);
byte[] patchDrawing = PacketBuilder.CreateDrawingUpdate(drawing);
user.LoggedinClient.SendPacket(patchDrawing);
}
}
@ -7876,7 +7873,7 @@ namespace HISP.Server
string weather = forClient.LoggedinUser.GetWeatherSeen();
if (lastWeather != weather)
{
byte[] WeatherUpdate = PacketBuilder.CreateWeatherUpdatePacket(weather);
byte[] WeatherUpdate = PacketBuilder.CreateWeatherUpdate(weather);
forClient.SendPacket(WeatherUpdate);
}
}
@ -8159,7 +8156,7 @@ namespace HISP.Server
UpdateUserFacingAndLocation(sender.LoggedinUser);
byte[] updatePlayer = PacketBuilder.CreateMovementPacket(sender.LoggedinUser.X, sender.LoggedinUser.Y, sender.LoggedinUser.CharacterId, sender.LoggedinUser.Facing, PacketBuilder.DIRECTION_NONE, true);
byte[] updatePlayer = PacketBuilder.CreateMovement(sender.LoggedinUser.X, sender.LoggedinUser.Y, sender.LoggedinUser.CharacterId, sender.LoggedinUser.Facing, PacketBuilder.DIRECTION_NONE, true);
sender.SendPacket(updatePlayer);
if (sender.LoggedinUser.HorseWindowOpen)
@ -8188,7 +8185,7 @@ namespace HISP.Server
sender.LoggedinUser.Facing %= 5;
UpdateUserFacingAndLocation(sender.LoggedinUser);
byte[] updatePlayer = PacketBuilder.CreateMovementPacket(sender.LoggedinUser.X, sender.LoggedinUser.Y, sender.LoggedinUser.CharacterId, sender.LoggedinUser.Facing, PacketBuilder.DIRECTION_NONE, true);
byte[] updatePlayer = PacketBuilder.CreateMovement(sender.LoggedinUser.X, sender.LoggedinUser.Y, sender.LoggedinUser.CharacterId, sender.LoggedinUser.Facing, PacketBuilder.DIRECTION_NONE, true);
sender.SendPacket(updatePlayer);
if (sender.LoggedinUser.HorseWindowOpen)
@ -8222,7 +8219,7 @@ namespace HISP.Server
int overlay = Map.GetTileId(tile.X, tile.Y, true);
if (tileset == 6 && overlay == 249) // warp point
{
byte[] swfPacket = PacketBuilder.CreateSwfModule("warpcutscene", PacketBuilder.PACKET_SWF_CUTSCENE);
byte[] swfPacket = PacketBuilder.CreateSwfModule("warpcutscene", PacketBuilder.PACKET_SWF_MODULE_CUTSCENE);
forClient.SendPacket(swfPacket);
}
}
@ -8271,6 +8268,7 @@ namespace HISP.Server
Entry.OnShutdown();
}
public static void StartServer()
{
ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

File diff suppressed because it is too large Load diff