This fork is designed to work within OpenFrameworks projects. json.hpp has been removed as it is included within OpenFrameworks as ofJson. EasyLogging has been removed to instead use OF’s own logging.
PhoenixClient is ready for use with Phoenix Framework v1.0.0. The PhoenixClient enables communication with a phoenix framework web project through the use of channels over websocket.
Learn more about the Phoenix Framework at http://www.phoenixframework.org/
#ifndef Network_H
#define Network_H
#include "PhxSocket.h"
#include <memory>
class PhxChannel;
class Network : public std::enable_shared_from_this<PhxSocketDelegate>,
public PhxSocketDelegate {
private:
// PhxSocketDelegate
void phxSocketDidOpen();
void phxSocketDidClose(const std::string& event);
void phxSocketDidReceiveError(const std::string& error);
// PhxSocketDelegate
/*!< This is the main entry point of communication over Phoenix Channels. */
std::shared_ptr<PhxChannel> channel;
public:
/**
* \brief Trigger start of Network connection.
*
* Detailed description
*
* \param param
* \return return type
*/
void start();
};
#endif // Network_H
#include "Network.h"
#include "PhxChannel.h"
#include "PhxPush.h"
#include "PhxSocket.h"
#include "easylogging++.h"
#include <iostream>
void Network::start() {
std::shared_ptr<PhxSocket::PhxSocket> socket
= std::make_shared<PhxSocket::PhxSocket>(
"ws://localhost:4000/socket/websocket", 1);
socket->setDelegate(this->shared_from_this());
this->channel = std::make_shared<PhxChannel::PhxChannel>(
socket, "room:1", std::map<std::string, std::string>());
this->channel->bootstrap();
// Instantiate the PhxChannel first before connecting on the socket.
// This is because the connection can happen before the channel
// is done instantiating.
socket->connect();
}
void Network::phxSocketDidOpen() {
LOG(INFO) << "phxSocketDidOpen";
this->channel->join()
->onReceive("ok",
[](nlohmann::json json) {
LOG(INFO) << "Received OK on join:" << json.dump() << std::endl;
})
->onReceive("error", [](nlohmann::json error) {
LOG(INFO) << "Error joining: " << error << std::endl;
});
}
void Network::phxSocketDidClose(const std::string& event) {
LOG(INFO) << "phxSocketDidClose" << std::endl;
}
void Network::phxSocketDidReceiveError(const std::string& error) {
LOG(INFO) << "phxSocketDidReceiveError" << std::endl;
}
https://github.com/nlohmann/json
https://github.com/muflihun/easyloggingpp
https://github.com/dhbaird/easywsclient
https://github.com/progschj/ThreadPool
https://github.com/livehelpnow/ObjCPhoenixClient
Copyright (C) 2017-2018 James N.
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.