public PacketWriter(RemoteClient client)
        {
            PacketQueue = new Queue<Packet>();

            _client = client;
            CanWrite = true;
        }
        void Client_ClientLeft(object sender, ClientConnectionEventArgs e)
        {
            if ( e.RemoteClient == _client ) {
                _client = null;
            }

            Logger.Log ( "Client disconnected" );
        }
 void Client_ClientJoined(object sender, ClientConnectionEventArgs e)
 {
     if ( _client == null ) {
         _client = e.RemoteClient;
     } else {
         e.RemoteClient.Disconnect();
         return;
     }
     //TODO: fix
     //Logger.Log("Client connected (" + ((IPEndPoint)e.TcpRemoteClient.TcpClient.Client.RemoteEndPoint).Address + ")");
 }
        public override void ReadPacket(RemoteClient c)
        {
            Control = (ControlType)c.ReadShort();
            Value = -1;
            switch (Control)
            {
                case ControlType.Play:
                    ValueString = c.ReadString();
                    break;
                case ControlType.Rewind:
                case ControlType.Forward:
                    Value = c.ReadInt();
                    break;

            }
        }
 public override void WritePacket(RemoteClient c)
 {
     c.WriteString(Message);
 }
 public override void ReadPacket(RemoteClient c)
 {
     Message = c.ReadString();
 }
 public override void WritePacket(RemoteClient c)
 {
 }
 public override void ReadPacket(RemoteClient c)
 {
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="PacketReader"/> class.
 /// </summary>
 /// <param name="client">The socket.</param>
 public PacketReader(RemoteClient client)
 {
     CanRead = true;
     _client = client;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="PacketEventArgs"/> class.
 /// </summary>
 /// <param name="client">The client</param>
 /// <param name="packet">The packet.</param>
 public PacketEventArgs(RemoteClient client, Packet packet)
 {
     RemoteClient = client;
     Packet = packet;
 }
 internal static void OnPacketSent(RemoteClient c, Packet p)
 {
     if (PacketSent != null)
     {
         PacketSent(null, new PacketEventArgs(c, p));
     }
 }
 internal static void OnPacketRecieved(RemoteClient c, Packet p)
 {
     if (PacketRecieved != null)
     {
         PacketRecieved(null, new PacketEventArgs(c, p));
     }
 }
 /// <summary>
 /// Writes the packet to the client stream.
 /// </summary>
 /// <remarks>This is where you would actually write data to the stream</remarks>
 public abstract void WritePacket(RemoteClient c);
 /// <summary>
 /// Reads the packet. The "Data" property MUST be set or problems will occur.
 /// </summary>
 /// <param name="c">The client stream to read from.</param>
 public abstract void ReadPacket(RemoteClient c);
 /// <summary>
 /// Initializes a new instance of the <see cref="ClientConnectionEventArgs"/> class.
 /// </summary>
 /// <param name="client">The client.</param>
 public ClientConnectionEventArgs(RemoteClient client)
 {
     RemoteClient = client;
 }
 public override void WritePacket(RemoteClient c)
 {
     throw new IOException("Is a read-only packet"); //For now
 }