private async Task ProcessPacketStream()
{
try
{
while(IsConnected && (OutgoingPackets.Count != 0 || TcpClient.Available != 0))
{
while(IsConnected && TcpClient.Available != 0)
{
if(ReceivedPacket != null)
ReceivedPacket(this, new PacketEventArgs(){Packet = await Packet.ReadFromStreamAsync(TcpClientStream)});
IncomingPacketReceieved = true;
}
if(IsConnected && CanSendPacket && OutgoingPackets.Count != 0)
{
await OutgoingPackets.Dequeue().WriteToStreamAsync(TcpClientStream);
OutgoingPacketCooldown.Restart();
IncomingPacketReceieved = false;
}
//// We've successfully sent or recieved data so the keepalive can be pushed back.
//Keepalive.Reset();
}
}
catch
{
// Lost connection with the server
// No handling is necessary here as the TCPClient will set Connected to false.
if(ServerConnectionDropped != null)
ServerConnectionDropped(this, new ServerConnectionEventArgs(){Message = "Connection to the server has been lost.", Status = ServerConnectionStatus.Disconnected, Timestamp = DateTime.Now});
}
}