本文整理汇总了C#中ProcessedPacket.ReadPascalString方法的典型用法代码示例。如果您正苦于以下问题:C# ProcessedPacket.ReadPascalString方法的具体用法?C# ProcessedPacket.ReadPascalString怎么用?C# ProcessedPacket.ReadPascalString使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ProcessedPacket
的用法示例。
在下文中一共展示了ProcessedPacket.ReadPascalString方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: OnCharacterCreationStatus
public static void OnCharacterCreationStatus(NetworkClient Client, ProcessedPacket Packet)
{
CharacterCreationStatus CCStatus = (CharacterCreationStatus)Packet.ReadByte();
switch (CCStatus)
{
case CharacterCreationStatus.Success:
Guid CharacterGUID = new Guid();
//CityToken didn't exist, so transition to CityServer hasn't happened yet.
if (PlayerAccount.CityToken == "")
{
CharacterGUID = new Guid(Packet.ReadPascalString());
PlayerAccount.CityToken = Packet.ReadPascalString();
}
NetworkFacade.Controller._OnCharacterCreationStatus(CCStatus);
if(PlayerAccount.CityToken == "")
PlayerAccount.CurrentlyActiveSim.AssignGUID(CharacterGUID.ToString());
break;
case CharacterCreationStatus.ExceededCharacterLimit:
NetworkFacade.Controller._OnCharacterCreationStatus(CCStatus);
break;
case CharacterCreationStatus.NameAlreadyExisted:
NetworkFacade.Controller._OnCharacterCreationStatus(CCStatus);
break;
case CharacterCreationStatus.GeneralError:
NetworkFacade.Controller._OnCharacterCreationStatus(CCStatus);
break;
default:
break;
}
}
示例2: OnCharacterCreationProgress
/// <summary>
/// Received CharacterCreation packet from LoginServer.
/// </summary>
/// <returns>The result of the character creation.</returns>
public static CharacterCreationStatus OnCharacterCreationProgress(NetworkClient Client, ProcessedPacket Packet)
{
CharacterCreationStatus CCStatus = (CharacterCreationStatus)Packet.ReadByte();
if (CCStatus == CharacterCreationStatus.Success)
{
Guid CharacterGUID = new Guid();
CharacterGUID = new Guid(Packet.ReadPascalString());
PlayerAccount.CityToken = Packet.ReadPascalString();
PlayerAccount.CurrentlyActiveSim.AssignGUID(CharacterGUID.ToString());
}
return CCStatus;
}
示例3: HandleCharacterCreate
public static void HandleCharacterCreate(NetworkClient Client, ProcessedPacket P)
{
Logger.LogInfo("Received CharacterCreate!");
string AccountName = SanitizeAccount(P.ReadPascalString());
using (var db = DataAccess.Get())
{
Account Acc = db.Accounts.GetByUsername(AccountName);
//TODO: Send GUID to client...
SimBase Char = new SimBase(Guid.NewGuid());
Char.Timestamp = P.ReadPascalString();
Char.Name = P.ReadPascalString();
Char.Sex = P.ReadPascalString();
Char.Description = P.ReadPascalString();
Char.HeadOutfitID = P.ReadUInt64();
Char.BodyOutfitID = P.ReadUInt64();
Char.Appearance = (AppearanceType)P.ReadByte();
Char.ResidingCity = new CityInfo(P.ReadPascalString(), "", P.ReadUInt64(), P.ReadPascalString(),
P.ReadUInt64(), P.ReadPascalString(), P.ReadInt32());
Char.CreatedThisSession = true;
var characterModel = new Character();
characterModel.Name = Char.Name;
characterModel.Sex = Char.Sex;
characterModel.Description = Char.Description;
characterModel.LastCached = Char.Timestamp;
characterModel.GUID = Char.GUID;
characterModel.HeadOutfitID = (long)Char.HeadOutfitID;
characterModel.BodyOutfitID = (long)Char.BodyOutfitID;
characterModel.AccountID = Acc.AccountID;
characterModel.AppearanceType = (int)Char.Appearance;
characterModel.City = Char.ResidingCity.UUID;
characterModel.CityName = Char.ResidingCity.Name;
characterModel.CityThumb = (long)Char.ResidingCity.Thumbnail;
characterModel.CityMap = (long)Char.ResidingCity.Map;
characterModel.CityIp = Char.ResidingCity.IP;
characterModel.CityPort = Char.ResidingCity.Port;
var status = db.Characters.CreateCharacter(characterModel);
//Need to be variable length, because the success packet contains a token.
PacketStream CCStatusPacket = new PacketStream((byte)PacketType.CHARACTER_CREATION_STATUS, 0);
switch (status)
{
case LoginDataModel.Entities.CharacterCreationStatus.NameAlreadyExisted:
CCStatusPacket.WriteByte((int)LoginDataModel.Entities.CharacterCreationStatus.NameAlreadyExisted);
Client.SendEncrypted(CCStatusPacket.PacketID, CCStatusPacket.ToArray());
break;
case LoginDataModel.Entities.CharacterCreationStatus.ExceededCharacterLimit:
CCStatusPacket.WriteByte((int)LoginDataModel.Entities.CharacterCreationStatus.ExceededCharacterLimit);
Client.SendEncrypted(CCStatusPacket.PacketID, CCStatusPacket.ToArray());
break;
case LoginDataModel.Entities.CharacterCreationStatus.Success:
CCStatusPacket.WriteByte((int)LoginDataModel.Entities.CharacterCreationStatus.Success);
CCStatusPacket.WritePascalString(Char.GUID.ToString());
Guid Token = Guid.NewGuid();
CCStatusPacket.WritePascalString(Token.ToString());
Client.SendEncrypted(CCStatusPacket.PacketID, CCStatusPacket.ToArray());
foreach (CityServerClient CServer in NetworkFacade.CServerListener.CityServers)
{
if (CServer.ServerInfo.UUID == Char.ResidingCity.UUID)
{
PacketStream CServerPacket = new PacketStream(0x01, 0);
CServerPacket.WriteHeader();
ushort PacketLength = (ushort)(PacketHeaders.UNENCRYPTED + 4 + (Client.RemoteIP.Length + 1)
+ (Char.GUID.ToString().Length + 1) + (Token.ToString().Length + 1));
CServerPacket.WriteUInt16(PacketLength);
CServerPacket.WriteInt32(Acc.AccountID);
CServerPacket.WritePascalString(Client.RemoteIP);
CServerPacket.WritePascalString(Char.GUID.ToString());
CServerPacket.WritePascalString(Token.ToString());
CServer.Send(CServerPacket.ToArray());
break;
}
}
break;
}
}
//Client was modified, so update it.
NetworkFacade.ClientListener.UpdateClient(Client);
}
示例4: HandleCityTokenRequest
public static void HandleCityTokenRequest(NetworkClient Client, ProcessedPacket P)
{
string AccountName = P.ReadPascalString();
string CityGUID = P.ReadPascalString();
string CharGUID = P.ReadPascalString();
string Token = new Guid().ToString();
foreach (CityServerClient CServer in NetworkFacade.CServerListener.CityServers)
{
if (CityGUID == CServer.ServerInfo.UUID)
{
using (var db = DataAccess.Get())
{
Account Acc = db.Accounts.GetByUsername(AccountName);
PacketStream CServerPacket = new PacketStream(0x01, 0);
CServerPacket.WriteHeader();
ushort PacketLength = (ushort)(PacketHeaders.UNENCRYPTED + 4 + (Client.RemoteIP.Length + 1)
+ (CharGUID.ToString().Length + 1) + (Token.ToString().Length + 1));
CServerPacket.WriteUInt16(PacketLength);
CServerPacket.WriteInt32(Acc.AccountID);
CServerPacket.WritePascalString(Client.RemoteIP);
CServerPacket.WritePascalString(CharGUID.ToString());
CServerPacket.WritePascalString(Token.ToString());
CServer.Send(CServerPacket.ToArray());
break;
}
}
}
PacketStream Packet = new PacketStream((byte)PacketType.REQUEST_CITY_TOKEN, 0);
Packet.WritePascalString(Token);
Client.SendEncrypted((byte)PacketType.REQUEST_CITY_TOKEN, Packet.ToArray());
}
示例5: HandleCharacterInfoRequest
public static void HandleCharacterInfoRequest(NetworkClient Client, ProcessedPacket P)
{
Logger.LogInfo("Received CharacterInfoRequest!");
DateTime Timestamp = DateTime.Parse(P.ReadPascalString());
//Database.CheckCharacterTimestamp(Client.Username, Client, TimeStamp);
Character[] Characters = new Character[] { };
using (var db = DataAccess.Get())
{
var account = db.Accounts.GetByUsername(Client.ClientEncryptor.Username);
Characters = db.Characters.GetForAccount((int)account.AccountID).ToArray();
}
if (Characters != null)
{
PacketStream Packet = new PacketStream((byte)PacketType.CHARACTER_LIST, 0);
MemoryStream PacketData = new MemoryStream();
BinaryWriter PacketWriter = new BinaryWriter(PacketData);
/**
* Whats the point of checking a timestamp here? It saves a few bytes on a packet
* sent once per user session. Premature optimization.
*/
PacketWriter.Write((byte)Characters.Length);
foreach (Character avatar in Characters)
{
PacketWriter.Write((int)avatar.CharacterID);
PacketWriter.Write(avatar.GUID.ToString());
PacketWriter.Write(avatar.LastCached);
PacketWriter.Write(avatar.Name);
PacketWriter.Write(avatar.Sex);
PacketWriter.Write(avatar.Description);
PacketWriter.Write((ulong)avatar.HeadOutfitID);
PacketWriter.Write((ulong)avatar.BodyOutfitID);
PacketWriter.Write((byte)avatar.AppearanceType);
PacketWriter.Write((string)avatar.CityName);
PacketWriter.Write((ulong)avatar.CityThumb);
PacketWriter.Write((string)avatar.City);
PacketWriter.Write((ulong)avatar.CityMap);
PacketWriter.Write((string)avatar.CityIp);
PacketWriter.Write((int)avatar.CityPort);
}
Packet.Write(PacketData.ToArray(), 0, (int)PacketData.Length);
PacketWriter.Close();
Client.SendEncrypted(0x05, Packet.ToArray());
}
else //No characters existed for the account.
{
PacketStream Packet = new PacketStream(0x05, 0);
Packet.WriteByte(0x00); //0 characters.
Client.SendEncrypted((byte)PacketType.CHARACTER_LIST, Packet.ToArray());
}
}
示例6: OnCityToken
/// <summary>
/// Received from the LoginServer in response to a CITY_TOKEN_REQUEST packet.
/// </summary>
public static void OnCityToken(NetworkClient Client, ProcessedPacket Packet)
{
PlayerAccount.CityToken = Packet.ReadPascalString();
}