private void OnAckReceived(FunapiTransport transport, UInt32 ack)
{
DebugUtils.Assert(session_reliability_);
if (transport == null)
{
DebugUtils.LogError("OnAckReceived - transport is null.");
return;
}
while (send_queue_.Count > 0)
{
UInt32 seq;
FunapiMessage last_msg = send_queue_.Peek();
if (transport.Encoding == FunEncoding.kJson)
{
seq = (UInt32)transport.JsonHelper.GetIntegerField(last_msg.message, kSeqNumberField);
}
else if (transport.Encoding == FunEncoding.kProtobuf)
{
seq = (last_msg.message as FunMessage).seq;
}
else
{
DebugUtils.Assert(false);
seq = 0;
}
if (SeqLess(ack, seq))
{
send_queue_.Dequeue();
}
else
{
break;
}
}
if (transport.state == FunapiTransport.State.kWaitForAck)
{
foreach (FunapiMessage msg in send_queue_)
{
if (transport.Encoding == FunEncoding.kJson)
{
UInt32 seq = (UInt32)transport.JsonHelper.GetIntegerField(msg.message, kSeqNumberField);
DebugUtils.Assert(seq == ack || SeqLess(seq, ack));
transport.SendMessage(msg);
}
else if (transport.Encoding == FunEncoding.kProtobuf)
{
UInt32 seq = (msg.message as FunMessage).seq;
DebugUtils.Assert(seq == ack || SeqLess (seq, ack));
transport.SendMessage(msg);
}
else
{
DebugUtils.Assert(false);
}
}
SetTransportStarted(transport);
}
}