public static void HandleCharacterCreate(PacketStream P, CityClient Client) { byte PacketLength = (byte)P.ReadByte(); //Length of the unencrypted data, excluding the header (ID, length, unencrypted length). byte UnencryptedLength = (byte)P.ReadByte(); //Accountname isn't encrypted in this packet. string AccountName = P.ReadString(); PacketStream FetchKeyPack = new PacketStream(0x01, 00); FetchKeyPack.WriteString(AccountName); Client.Send(FetchKeyPack.ToArray()); //TODO: Wait until the key has been received... AResetEvent.WaitOne(); P.DecryptPacket(Client.EncKey, Client.CryptoService, UnencryptedLength); PacketStream OutPacket = new PacketStream(0x01, 0x00); OutPacket.WriteByte((byte)0x01); OutPacket.WriteByte((byte)AccountName.Length); OutPacket.Write(Encoding.ASCII.GetBytes(AccountName), 0, AccountName.Length); Logger.LogDebug("Received CharacterCreate!"); Guid ID = new Guid(); Sim Character = new Sim(ID.ToString()); Character.Timestamp = P.ReadString(); Character.Name = P.ReadString(); Character.Sex = P.ReadString(); //TODO: This should check if the character exists in the DB... Database.CreateCharacter(Character); }
/// <summary> /// Constructs a DBAsyncObject instance. /// </summary> /// <param name="AccountName">The name of the client's account.</param> /// <param name="Client">The client.</param> /// <param name="Command">The SQL command.</param> public DBAsyncObject(string AccountName, ref CityClient Client, SqlCommand Command, byte[] Hash) { m_Client = Client; m_AccountName = AccountName; m_Command = Command; m_Hash = Hash; }
public DBAsyncObject(string AccountName, ref CityClient Client, DateTime Timestamp, SqlCommand Command) { m_Client = Client; m_AccountName = AccountName; m_CharacterTimestamp = Timestamp; m_Command = Command; }
public static void HandleCreateSimulationObject(PacketStream P, ref CityClient C) { byte PacketLength = (byte)P.ReadByte(); //Length of the unencrypted data, excluding the header (ID, length, unencrypted length). byte UnencryptedLength = (byte)P.ReadByte(); BinaryFormatter BinFormatter = new BinaryFormatter(); SimulationObject CreatedSimObject = (SimulationObject)BinFormatter.Deserialize(P); //TODO: Add the object to the client's lot's VM... }
public static void HandleCreateSimulationObject(PacketStream P, ref CityClient C) { byte PacketLength = (byte)P.ReadByte(); //Length of the unencrypted data, excluding the header (ID, length, unencrypted length). byte UnencryptedLength = (byte)P.ReadByte(); BinaryFormatter BinFormatter = new BinaryFormatter(); SimulationObject CreatedSimObject = (SimulationObject)BinFormatter.Deserialize(P); //TODO: Add the object to the client's lot's VM... }
public void OnAccept(IAsyncResult AR) { Socket AcceptedSocket = m_ListenerSock.EndAccept(AR); if (AcceptedSocket != null) { Console.WriteLine("\nNew client connected!"); //Let sockets linger for 5 seconds after they're closed, in an attempt to make sure all //pending data is sent! AcceptedSocket.LingerState = new LingerOption(true, 5); CityClient NewClient = new CityClient(AcceptedSocket, this); m_LoginClients.Add(NewClient); } m_ListenerSock.BeginAccept(new AsyncCallback(OnAccept), m_ListenerSock); }
public static void HandleCharacterCreate(PacketStream P, CityClient Client) { byte PacketLength = (byte)P.ReadByte(); //Length of the unencrypted data, excluding the header (ID, length, unencrypted length). byte UnencryptedLength = (byte)P.ReadByte(); //Accountname isn't encrypted in this packet. string AccountName = P.ReadString(); PacketStream FetchKeyPack = new PacketStream(0x01, 00); FetchKeyPack.WriteString(AccountName); Client.Send(FetchKeyPack.ToArray()); //TODO: Wait until the key has been received... AResetEvent.WaitOne(); P.DecryptPacket(Client.EncKey, Client.CryptoService, UnencryptedLength); PacketStream OutPacket = new PacketStream(0x01, 0x00); OutPacket.WriteByte((byte)0x01); OutPacket.WriteByte((byte)AccountName.Length); OutPacket.Write(Encoding.ASCII.GetBytes(AccountName), 0, AccountName.Length); Logger.LogDebug("Received CharacterCreate!"); Guid ID = new Guid(); Sim Character = new Sim(ID.ToString()); Character.Timestamp = P.ReadString(); Character.Name = P.ReadString(); Character.Sex = P.ReadString(); //TODO: This should check if the character exists in the DB... Database.CreateCharacter(Character); }
/// <summary> /// Constructs a DBAsyncObject instance. /// </summary> /// <param name="AccountName">The name of the client's account.</param> /// <param name="Client">The client.</param> /// <param name="Command">The SQL command.</param> public DBAsyncObject(string AccountName, ref CityClient Client, SqlCommand Command) { m_Client = Client; m_AccountName = AccountName; m_Command = Command; }
/// <summary> /// Removes a client from the internal list of connected clients. /// Should really only be called internally by the LoginClient.Disconnect() /// method. /// </summary> /// <param name="Client">The client to remove.</param> public void RemoveClient(CityClient Client) { m_LoginClients.Remove(Client); }
/// <summary> /// Constructs a DBAsyncObject instance. /// </summary> /// <param name="AccountName">The name of the client's account.</param> /// <param name="Client">The client.</param> /// <param name="Command">The SQL command.</param> public DBAsyncObject(string AccountName, ref CityClient Client, SqlCommand Command, byte[] Hash) { m_Client = Client; m_AccountName = AccountName; m_Command = Command; m_Hash = Hash; }
public DBAsyncObject(string AccountName, ref CityClient Client, DateTime Timestamp, SqlCommand Command) { m_Client = Client; m_AccountName = AccountName; m_CharacterTimestamp = Timestamp; m_Command = Command; }
/// <summary> /// Constructs a DBAsyncObject instance. /// </summary> /// <param name="AccountName">The name of the client's account.</param> /// <param name="Client">The client.</param> /// <param name="Command">The SQL command.</param> public DBAsyncObject(string AccountName, ref CityClient Client, SqlCommand Command) { m_Client = Client; m_AccountName = AccountName; m_Command = Command; }
public LotSimulation(CityClient Owner) { m_Owner = Owner; m_VM.NewSimulationStateEvent += new OnNewSimulationState(m_VM_NewSimulationStateEvent); }
/// <summary> /// Removes a client from the internal list of connected clients. /// Should really only be called internally by the LoginClient.Disconnect() /// method. /// </summary> /// <param name="Client">The client to remove.</param> public void RemoveClient(CityClient Client) { m_LoginClients.Remove(Client); }
/// <summary> /// Called by LoginClient instances /// when they've received some new data /// (a new packet). Should not be called /// from anywhere else. /// </summary> /// <param name="P"></param> public void OnReceivedData(PacketStream P, CityClient Client) { OnReceiveEvent(P, Client); }
/// <summary> /// Called by LoginClient instances /// when they've received some new data /// (a new packet). Should not be called /// from anywhere else. /// </summary> /// <param name="P"></param> public void OnReceivedData(PacketStream P, CityClient Client) { OnReceiveEvent(P, Client); }
public static void HandleClientKeyReceive(PacketStream P, ref CityClient C) { //TODO: Read packet and assign the key to the client. AResetEvent.Set(); }
public static void HandleClientKeyReceive(PacketStream P, ref CityClient C) { //TODO: Read packet and assign the key to the client. AResetEvent.Set(); }
private void m_Listener_OnReceiveEvent(PacketStream P, CityClient Client) { byte ID = (byte)P.ReadByte(); switch (ID) { case 0x00: PacketHandlers.HandleCharacterCreate(P, Client); break; case 0x01: PacketHandlers.HandleClientKeyReceive(P, ref Client); break; } }
public void OnAccept(IAsyncResult AR) { Socket AcceptedSocket = m_ListenerSock.EndAccept(AR); if (AcceptedSocket != null) { Console.WriteLine("\nNew client connected!"); //Let sockets linger for 5 seconds after they're closed, in an attempt to make sure all //pending data is sent! AcceptedSocket.LingerState = new LingerOption(true, 5); CityClient NewClient = new CityClient(AcceptedSocket, this); m_LoginClients.Add(NewClient); } m_ListenerSock.BeginAccept(new AsyncCallback(OnAccept), m_ListenerSock); }