// Copyright 2013 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.

#ifndef GOOGLE_APIS_GCM_ENGINE_CONNECTION_HANDLER_H_
#define GOOGLE_APIS_GCM_ENGINE_CONNECTION_HANDLER_H_

#include <memory>

#include "base/callback.h"
#include "google_apis/gcm/base/gcm_export.h"
#include "mojo/public/cpp/system/data_pipe.h"

namespace net{
class StreamSocket;
}  // namespace net

namespace google {
namespace protobuf {
class MessageLite;
}  // namespace protobuf
}  // namepsace google

namespace mcs_proto {
class LoginRequest;
}

namespace gcm {

// Handles performing the protocol handshake and sending/receiving protobuf
// messages. Note that no retrying or queueing is enforced at this layer.
// Once a connection error is encountered, the ConnectionHandler will disconnect
// the socket and must be reinitialized with a new StreamSocket before
// messages can be sent/received again.
class GCM_EXPORT ConnectionHandler {
 public:
  typedef base::Callback<void(std::unique_ptr<google::protobuf::MessageLite>)>
      ProtoReceivedCallback;
  typedef base::Closure ProtoSentCallback;
  typedef base::Callback<void(int)> ConnectionChangedCallback;

  ConnectionHandler();
  virtual ~ConnectionHandler();

  // Starts a new MCS connection handshake (using |login_request|) and, upon
  // success, begins listening for incoming/outgoing messages.
  //
  // Note: It is correct and expected to call Init more than once, as connection
  // issues are encountered and new connections must be made.
  virtual void Init(const mcs_proto::LoginRequest& login_request,
                    mojo::ScopedDataPipeConsumerHandle receive_stream,
                    mojo::ScopedDataPipeProducerHandle send_stream) = 0;

  // Resets the handler and any internal state. Should be called any time
  // a connection reset happens externally to the handler.
  virtual void Reset() = 0;

  // Checks that a handshake has been completed and a message is not already
  // in flight.
  virtual bool CanSendMessage() const = 0;

  // Send an MCS protobuf message. CanSendMessage() must be true.
  virtual void SendMessage(const google::protobuf::MessageLite& message) = 0;
};

}  // namespace gcm

#endif  // GOOGLE_APIS_GCM_ENGINE_CONNECTION_HANDLER_H_
