本文整理汇总了C#中Solar.FiestaLib.Networking.Packet.TryReadString方法的典型用法代码示例。如果您正苦于以下问题:C# Packet.TryReadString方法的具体用法?C# Packet.TryReadString怎么用?C# Packet.TryReadString使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Solar.FiestaLib.Networking.Packet
的用法示例。
在下文中一共展示了Packet.TryReadString方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Login
public static void Login(LoginClient pClient, Packet pPacket)
{
string hash;
string username;
if (!pPacket.TryReadString(out username, 32) ||
!pPacket.TryReadString(out hash, 32))
{
Log.WriteLine(LogLevel.Warn, "Could not read user token.");
SendFailedLogin(pClient, ServerError.EXCEPTION);
return;
}
Log.WriteLine(LogLevel.Debug, "{0} tries to login.", username);
User user;
if (Program.Entity.Users.Count() > 0 && (user = Program.Entity.Users.First(u => u.Username == username)) != null)
{
if (user.Password.ToLower() == hash.ToLower())
{
if (ClientManager.Instance.IsLoggedIn(user.Username))
{
Log.WriteLine(LogLevel.Warn, "{0} is trying dual login. Disconnecting.", user.Username);
pClient.Disconnect();
}
else if (user.Banned)
{
SendFailedLogin(pClient, ServerError.BLOCKED);
}
else
{
pClient.IsAuthenticated = true;
pClient.Username = user.Username;
pClient.AccountID = user.ID;
pClient.Admin = user.Admin;
AllowFiles(pClient, true);
WorldList(pClient, false);
}
}
else SendFailedLogin(pClient, ServerError.INVALID_CREDENTIALS);
}
else SendFailedLogin(pClient, ServerError.INVALID_CREDENTIALS);
}
示例2: CreateCharHandler
public static void CreateCharHandler(WorldClient client, Packet packet)
{
string name;
byte slot, jobGender, hair, color, style;
if (!packet.TryReadByte(out slot) || !packet.TryReadString(out name, 20) ||
!packet.TryReadByte(out jobGender) || !packet.TryReadByte(out hair) ||
!packet.TryReadByte(out color) || !packet.TryReadByte(out style))
{
Log.WriteLine(LogLevel.Warn, "Error reading create char for {0}", client.Username);
return;
}
if (DatabaseChecks.IsCharNameUsed(name))
{
SendCharCreationError(client, CreateCharError.NameTaken);
return;
}
else if (DataProvider.Instance.IsBadName(name))
{
SendCharCreationError(client, CreateCharError.NameInUse);
return;
}
byte isMaleByte = (byte)((jobGender >> 7) & 0x01);
byte classIDByte = (byte)((jobGender >> 2) & 0x1F);
Job job = (Job)classIDByte;
switch (job)
{
case Job.Archer:
case Job.Cleric:
case Job.Fighter:
case Job.Mage:
case Job.Trickster:
//create character here
try
{
WorldCharacter wchar = client.CreateCharacter(name, slot, hair, color, style, job, Convert.ToBoolean(isMaleByte));
SendCharOKResponse(client, wchar);
}
catch (Exception ex)
{
Log.WriteLine(LogLevel.Exception, "Error creating character for {0}: {1}", client.Username, ex.InnerException.ToString());
SendCharCreationError(client, CreateCharError.FailedToCreate);
return;
}
break;
default:
SendCharCreationError(client, CreateCharError.WrongClass);
Log.WriteLine(LogLevel.Warn, "Invalid job ID at char creation from {0}", client.Username);
break;
}
}
示例3: FileHash
public static void FileHash(LoginClient pClient, Packet pPacket)
{
string hash;
if (!pPacket.TryReadString(out hash))
{
Log.WriteLine(LogLevel.Warn, "Empty filehash received.");
SendFailedLogin(pClient, ServerError.EXCEPTION);
}
else
{
//allowfiles here fucks shit up?
}
}
示例4: TransferKey
public static void TransferKey(WorldClient client, Packet packet)
{
string key;
if (!packet.ReadSkip(256) || !packet.TryReadString(out key, 64))
{
Log.WriteLine(LogLevel.Warn, "Invalid connection request.");
client.Disconnect();
return;
}
ClientTransfer transfer = ClientManager.Instance.GetTransfer(key);
if (transfer != null)
{
// Check if client does not connect from localhost or LAN,
// and if it's connecting from the correct IP.
// When this check is not done, people can remote hack someone.
if (!client.Host.StartsWith("127.0") && !client.Host.StartsWith("192.") && transfer.HostIP != client.Host)
{
Log.WriteLine(LogLevel.Warn, "Remotehack from {0}", client.Host);
SendError(client, ServerError.INVALID_CREDENTIALS);
}
else
{
if (ClientManager.Instance.RemoveTransfer(transfer.Hash) && (!Program.Maintenance || transfer.Admin > 0)) //admins can still login
{
client.Authenticated = true;
client.AccountID = transfer.AccountID;
client.Admin = transfer.Admin;
client.Username = transfer.Username;
client.lastPing = DateTime.Now; //this is so pongthread can start checking him
client.Pong = true;
client.RandomID = MathUtils.RandomizeUShort(ushort.MaxValue);
Log.WriteLine(LogLevel.Debug, "{0} authenticated.", client.Username);
SendCharacterList(client);
}
}
}
else
{
Log.WriteLine(LogLevel.Warn, "Invalid client authentication from {0}", client.Host);
SendError(client, ServerError.INVALID_CREDENTIALS);
}
}
示例5: TransferKeyHandler
public static void TransferKeyHandler(ZoneClient client, Packet packet)
{
ushort randomID;
string characterName, checksums; //TODO: check in securityclient
if (!packet.TryReadUShort(out randomID) || !packet.TryReadString(out characterName, 16) ||
!packet.TryReadString(out checksums, 832))
{
Log.WriteLine(LogLevel.Warn, "Invalid game transfer.");
return;
}
ClientTransfer transfer = ClientManager.Instance.GetTransfer(characterName);
if (transfer == null || transfer.HostIP != client.Host || transfer.RandID != randomID)
{
Log.WriteLine(LogLevel.Warn, "{0} tried to login without a valid client transfer.", client.Host);
//Handler3.SendError(client, ServerError.INVALID_CREDENTIALS);
Handler4.SendConnectError(client, ConnectErrors.RequestedCharacterIDNotMatching);
return;
}
try
{
ClientManager.Instance.RemoveTransfer(characterName);
ZoneCharacter character = new ZoneCharacter(characterName);
if (character.AccountID != transfer.AccountID)
{
Log.WriteLine(LogLevel.Warn, "Character is logging in with wrong account ID.");
Handler4.SendConnectError(client, ConnectErrors.RequestedCharacterIDNotMatching);
//Handler3.SendError(client, ServerError.INVALID_CREDENTIALS);
return;
}
client.Authenticated = true;
client.Admin = transfer.Admin;
client.AccountID = transfer.AccountID;
client.Username = transfer.Username;
client.Character = character;
character.Client = client;
if (ClientManager.Instance.AddClient(client))
{
character.SendGetIngameChunk(); //TODO: world server notification over WCF?
Log.WriteLine(LogLevel.Debug, "{0} logged in successfully!", character.Name);
}
}
catch (Exception ex)
{
Log.WriteLine(LogLevel.Exception, "Error loading character {0}: {1} - {2}", characterName, ex.ToString(), ex.StackTrace);
Handler4.SendConnectError(client, ConnectErrors.ErrorInCharacterInfo);
}
}
示例6: ShoutHandler
public static void ShoutHandler(ZoneClient client, Packet packet)
{
ZoneCharacter character = client.Character;
byte len;
string message;
if (!packet.TryReadByte(out len) ||
!packet.TryReadString(out message, len))
{
Log.WriteLine(LogLevel.Warn, "Could not read shout from {0}.", character.Name);
return;
}
int shoutcheck = character.ShoutCheck();
if (shoutcheck > 0)
{
Handler2.SendChatBlock(character, shoutcheck);
}
else
{
ChatLog.Instance.LogChat(client.Character.Name, message, true);
using (var broad = Shout(character.Name, message))
{
character.Map.Broadcast(broad);
}
}
}
示例7: NormalChatHandler
public static void NormalChatHandler(ZoneClient client, Packet packet)
{
byte len;
string text;
if (!packet.TryReadByte(out len) || !packet.TryReadString(out text, len))
{
Log.WriteLine(LogLevel.Warn, "Could not parse normal chat from {0}.", client.Character.Name);
return;
}
if (client.Admin > 0 && (text.StartsWith("&") || text.StartsWith("/")))
{
CommandLog.Instance.LogCommand(client.Character.Name, text);
CommandStatus status = CommandHandler.Instance.ExecuteCommand(client.Character, text.Split(' '));
switch (status)
{
case CommandStatus.ERROR:
client.Character.DropMessage("Error executing command.");
break;
case CommandStatus.GM_LEVEL_TOO_LOW:
client.Character.DropMessage("You do not have the privileges for this command.");
break;
case CommandStatus.NOT_FOUND:
client.Character.DropMessage("Command not found.");
break;
}
}
else
{
int chatblock = client.Character.ChatCheck();
if (chatblock == -1)
{
ChatLog.Instance.LogChat(client.Character.Name, text, false);
SendNormalChat(client.Character, text, client.Admin > 0 ? (byte)0x03 : (byte)0x2a);
}
else
{
Handler2.SendChatBlock(client.Character, chatblock);
}
}
}