// Copyright 2012 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef POLO_WIRE_POLOWIREINTERFACE_H_
#define POLO_WIRE_POLOWIREINTERFACE_H_
#include <stddef.h>
#include <vector>
#include "polo/wire/polowirelistener.h"
#include "polo/util/macros.h"
namespace polo {
namespace wire {
// An interface for sending and receiving raw data for a Polo pairing session.
class PoloWireInterface {
public:
PoloWireInterface() {}
virtual ~PoloWireInterface() {}
// Sets the listener that will receive incoming data and error notifications.
// @param listener the listener to set for this interface
void set_listener(PoloWireListener* listener) { listener_ = listener; }
// Sends data over the interface.
// @param data the bytes to send
virtual void Send(const std::vector<uint8_t>& data) = 0;
// Receives the given number of bytes from the interface asynchronously. The
// listener will be notified when the data is received.
// @param num_bytes the number of bytes to receive
virtual void Receive(size_t num_bytes) = 0;
protected:
// Gets the listener that will receive incoming data and error notifications.
PoloWireListener* listener() const { return listener_; }
private:
PoloWireListener* listener_;
DISALLOW_COPY_AND_ASSIGN(PoloWireInterface);
};
} // namespace wire
} // namespace polo
#endif // POLO_WIRE_POLOWIREINTERFACE_H_