using System;
using System.Text;
using System.Data;
using Ion.Storage;
using Ion.Net.Messages;
namespace Ion.HabboHotel.Habbos
{
///
/// Represents a service user's account and avatar in the account and holds the information about the account.
///
public class Habbo : IDataObject, ISerializableObject
{
#region Fields
// Account
private uint mID;
private string mUsername;
private string mPassword;
private byte mRole;
private DateTime mSignedUp;
// Personal
private string mEmail;
private string mDateOfBirth;
// Avatar
private string mMotto;
private string mFigure;
private char mGender;
// Valueables
private uint mCoins;
private uint mFilms;
private uint mGameTickets;
private uint mActivityPoints;
#endregion
#region Properties
///
/// Gets or sets the ID of this Habbo as a 32 bit unsigned integer.
///
public uint ID
{
get { return mID; }
}
///
/// Gets or sets the username of this Habbo as a string. The username is shown to other Habbo's in the service, and is also used to login to the service.
///
public string Username
{
get { return mUsername; }
set { mUsername = value; }
}
///
/// Gets or sets the password of this Habbo as a string. (plaintext) The password is used in combination with the username when logging in to the service.
///
public string Password
{
get { return mPassword; }
set { mPassword = value; }
}
///
/// Gets the user role of this Habbo as a byte.
///
public byte Role
{
get { return mRole; }
}
public DateTime SignedUp
{
get { return mSignedUp; }
set { mSignedUp = value; }
}
public string Email
{
get { return mEmail; }
set { mEmail = value; }
}
public string DateOfBirth
{
get { return mDateOfBirth; }
set { mDateOfBirth = value; }
}
public string Motto
{
get { return mMotto; }
set
{
// TODO: swear word filtering?
mMotto = value;
}
}
public string Figure
{
get { return mFigure; }
set { mFigure = value; }
}
public char Gender
{
get { return mGender; }
set { mGender = (value == 'M' || value == 'F') ? value : 'M'; }
}
public uint Coins
{
get { return mCoins; }
set { mCoins = value; }
}
public uint Films
{
get { return mFilms; }
set { mFilms = value; }
}
public uint GameTickets
{
get { return mGameTickets; }
set { mGameTickets = value; }
}
public uint ActivityPoints
{
get { return mActivityPoints; }
set { mActivityPoints = value; }
}
#endregion
#region Methods
public void Serialize(ServerMessage message)
{
message.AppendString(mID.ToString());
message.AppendString(mUsername);
message.AppendString(mFigure);
message.AppendString(mGender.ToString());
message.AppendString(mMotto);
message.AppendUInt32(mGameTickets);
message.AppendString(mFigure);
message.AppendUInt32(mFilms);
/*MainFrm.sock(Index).SendData "@E" & Index & Chr(2) & Name2 &
* Chr(2) & Figur & Chr(2) & f & Chr(2) & cake & Chr(2) & "Hch=s02/253,146,160"
* & Chr(2) & "HI" & Chr(1) & "@F" & Coins & Chr(1) & "A|" & 79 & Chr(1) & "@DH"
* & Chr(1) & "DtI" & Chr(1) & "DoH" & Chr(1)
message.AppendInt32(1);
message.AppendString(mUsername);
message.AppendString(mFigure);
message.AppendString(mGender.ToString());
message.AppendString(mMotto.ToString());
message.AppendString(");
message.AppendString("");
message.AppendBoolean(false);
message.AppendBoolean(false);
message.AppendBoolean(false);
message.AppendBoolean(false);*/
}
public string ToOldProtocolString()
{
return "name=" + mUsername + Convert.ToChar(13) +
"figure=" + mFigure + Convert.ToChar(13) +
"sex=" + mGender.ToString() + Convert.ToChar(13) +
"customData=" + mMotto + Convert.ToChar(13) +
"ph_tickets=" + mGameTickets + Convert.ToChar(13) +
"photo_film=" + mFilms + Convert.ToChar(13) +
"ph_figure=" + "" + Convert.ToChar(13) +
"directMail=0" + Convert.ToChar(13);
}
#region Storage
private void CheckinUserParams(ref DatabaseClient dbClient)
{
dbClient.AddParamWithValue("@id", mID);
dbClient.AddParamWithValue("@username", mUsername);
dbClient.AddParamWithValue("@password", mPassword);
dbClient.AddParamWithValue("@role", mRole);
dbClient.AddParamWithValue("@signedup", mSignedUp);
dbClient.AddParamWithValue("@email", mEmail);
dbClient.AddParamWithValue("@dob", mDateOfBirth);
dbClient.AddParamWithValue("@motto", mMotto);
dbClient.AddParamWithValue("@figure", mFigure);
dbClient.AddParamWithValue("@gender", mGender);
dbClient.AddParamWithValue("@coins", mCoins);
dbClient.AddParamWithValue("@films", mFilms);
dbClient.AddParamWithValue("@gametickets", mGameTickets);
dbClient.AddParamWithValue("@activitypoints", mActivityPoints);
}
private bool CheckoutUserParams(ref DataRow dRow)
{
if (dRow == null)
return false;
mID = (uint)dRow["id"];
mUsername = (string)dRow["username"];
mPassword = (string)dRow["password"];
mRole = (byte)dRow["role"];
mSignedUp = (DateTime)dRow["signedup"];
mEmail = (string)dRow["email"];
mDateOfBirth = (string)dRow["dob"];
mMotto = (string)dRow["motto"];
mFigure = (string)dRow["figure"];
Gender = char.Parse(dRow["gender"].ToString());
mCoins = (uint)dRow["coins"];
mFilms = (uint)dRow["films"];
mGameTickets = (uint)dRow["gametickets"];
mActivityPoints = (uint)dRow["activitypoints"];
return true;
}
public bool LoadByID(DatabaseManager database, uint ID)
{
DataRow result = null;
using (DatabaseClient dbClient = database.GetClient())
{
dbClient.AddParamWithValue("@id", ID);
result = dbClient.ReadDataRow("SELECT * FROM users WHERE id = @id LIMIT 1;");
}
return CheckoutUserParams(ref result);
}
public bool LoadByUsername(DatabaseManager database, string sUsername)
{
DataRow result = null;
using (DatabaseClient dbClient = database.GetClient())
{
dbClient.AddParamWithValue("@username", sUsername);
result = dbClient.ReadDataRow("SELECT * FROM users WHERE username = @username LIMIT 1;");
}
return CheckoutUserParams(ref result);
}
public bool LoadBySsoTicket(DatabaseManager database, string sTicket)
{
DataRow result = null;
using (DatabaseClient dbClient = database.GetClient())
{
dbClient.AddParamWithValue("@ticket", sTicket);
result = dbClient.ReadDataRow("SELECT * FROM users WHERE ssoticket = @ticket;");
if (result != null)
{
//dbClient.ExecuteQuery("UPDATE users SET ssoticket = NULL WHERE ssoticket = @ticket LIMIT 1;");
}
}
return CheckoutUserParams(ref result);
}
public bool INSERT(DatabaseClient dbClient)
{
CheckinUserParams(ref dbClient);
dbClient.ExecuteQuery("INSERT INTO users" +
"(username,password,role,signedup,email,dob,motto,figure,gender,coins,films,gametickets,activitypoints) " +
"VALUES(@username,@password,@role,@signedup,@email,@dob,@motto,@figure,@gender,@coins,@films,@gametickets,@activitypoints);");
return true;
}
public bool DELETE(DatabaseClient dbClient)
{
dbClient.AddParamWithValue("@id", mID);
dbClient.ExecuteQuery("DELETE FROM users WHERE id = @id;");
return true;
}
public bool UPDATE(DatabaseClient dbClient)
{
CheckinUserParams(ref dbClient);
dbClient.ExecuteQuery("UPDATE users " +
"SET username=@username,password=@password,role=@role,signedup=@signedup,email=@email,dob=@dob,motto=@motto,figure=@figure,gender=@gender,coins=@coins,films=@films,gametickets=@gametickets,activitypoints=@activitypoints " +
"WHERE id = @id;");
return true;
}
#endregion
#endregion
}
}