/*
 *  IXConnectionState.cpp
 *  Author: Benjamin Sergeant
 *  Copyright (c) 2019 Machine Zone, Inc. All rights reserved.
 */

#include "IXConnectionState.h"

namespace ix
{
	std::atomic<uint64_t> ConnectionState::_globalId(0);

	ConnectionState::ConnectionState()
		: _terminated(false)
	{
		computeId();
	}

	void ConnectionState::computeId()
	{
		_id = std::to_string(_globalId++);
	}

	const std::string& ConnectionState::getId() const
	{
		return _id;
	}

	std::shared_ptr<ConnectionState> ConnectionState::createConnectionState()
	{
		return std::make_shared<ConnectionState>();
	}

	void ConnectionState::setOnSetTerminatedCallback(const OnSetTerminatedCallback& callback)
	{
		_onSetTerminatedCallback = callback;
	}

	bool ConnectionState::isTerminated() const
	{
		return _terminated;
	}

	void ConnectionState::setTerminated()
	{
		_terminated = true;

		if (_onSetTerminatedCallback)
		{
			_onSetTerminatedCallback();
		}
	}

	const std::string& ConnectionState::getRemoteIp()
	{
		return _remoteIp;
	}

	int ConnectionState::getRemotePort()
	{
		return _remotePort;
	}

	void ConnectionState::setRemoteIp(const std::string& remoteIp)
	{
		_remoteIp = remoteIp;
	}

	void ConnectionState::setRemotePort(int remotePort)
	{
		_remotePort = remotePort;
	}
}
