// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "remoting/protocol/host_video_dispatcher.h"

#include "base/bind.h"
#include "net/socket/stream_socket.h"
#include "remoting/base/constants.h"
#include "remoting/protocol/message_serialization.h"
#include "remoting/protocol/video_feedback_stub.h"

namespace remoting {
namespace protocol {

HostVideoDispatcher::HostVideoDispatcher()
    : ChannelDispatcherBase(kVideoChannelName),
      parser_(
          base::Bind(&HostVideoDispatcher::OnVideoAck, base::Unretained(this)),
          reader()),
      video_feedback_stub_(nullptr) {
}

HostVideoDispatcher::~HostVideoDispatcher() {
}

void HostVideoDispatcher::ProcessVideoPacket(scoped_ptr<VideoPacket> packet,
                                             const base::Closure& done) {
  writer()->Write(SerializeAndFrameMessage(*packet), done);
}

void HostVideoDispatcher::OnVideoAck(scoped_ptr<VideoAck> ack,
                                     const base::Closure& done) {
  if (video_feedback_stub_)
    video_feedback_stub_->ProcessVideoAck(ack.Pass());

  done.Run();
}

}  // namespace protocol
}  // namespace remoting
