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.