public void ChangeOptions(MsgrClient client, Packet packet)
{
var nickname = packet.GetString();
var status = (ContactStatus)packet.GetByte();
var chatOptions = (ChatOptions)packet.GetUInt();
var user = client.User;
// Check nickname
if (nickname.Length > 50)
{
Log.Warning("User '{0}' tried to use a nickname that's longer than 50 characters.", user.AccountId);
Send.ChangeOptionsR(client, false);
return;
}
// Check status
if (!Enum.IsDefined(typeof(ContactStatus), status))
{
Log.Warning("User '{0}' tried to use an invalid or unknown status ({1}).", user.AccountId, status);
Send.ChangeOptionsR(client, false);
return;
}
// Check options
if (!Enum.IsDefined(typeof(ChatOptions), chatOptions))
{
Log.Warning("User '{0}' tried to use a invalid or unknown options ({1}).", user.AccountId, status);
Send.ChangeOptionsR(client, false);
return;
}
var prevStatus = user.Status;
// Change options
user.Nickname = nickname;
user.Status = status;
user.ChatOptions = chatOptions;
MsgrServer.Instance.Database.SaveOptions(user);
Send.ChangeOptionsR(client, true);
// Update friends
var friendUsers = MsgrServer.Instance.UserManager.Get(user.GetNormalFriendIds());
if (friendUsers.Count == 0)
{
return;
}
// Set offline if prev was not offline, set online if prev was offline,
// and just update the options if not offline.
if (prevStatus != ContactStatus.Offline && status == ContactStatus.Offline)
{
Send.FriendOffline(friendUsers, user);
}
else if (prevStatus == ContactStatus.Offline && status != ContactStatus.Offline)
{
Send.FriendOnline(friendUsers, user);
}
else if (status != ContactStatus.Offline)
{
Send.FriendOptionChanged(friendUsers, user);
}
}