Skip to content

Commit

Permalink
Modified to work with WiFlyHQ
Browse files Browse the repository at this point in the history
  • Loading branch information
jonmarkgo committed Aug 2, 2012
1 parent ffae34e commit 21cb4b5
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 28 deletions.
17 changes: 12 additions & 5 deletions PusherClient.cpp
Expand Up @@ -26,6 +26,7 @@
#include <HashMap/HashMap.h>
#include <WString.h>
#include <string.h>
#include <WiFlyHQ.h>
#include <stdlib.h>

const byte HASH_SIZE = 10;
Expand All @@ -46,7 +47,7 @@ prog_char unsubscribeMessage[] PROGMEM = "{\"channel\": \"{0}\" }";
prog_char triggerEventMessage[] PROGMEM = "{\"event\": \"{0}\", \"data\": {1} }";
prog_char eventNameStart[] PROGMEM = "event";
prog_char unsubscribeEventName[] PROGMEM = "pusher:unsubscribe";

prog_char dataStart[] PROGMEM = "data";

PROGMEM const char *stringTable[] =
{
Expand All @@ -62,7 +63,8 @@ PROGMEM const char *stringTable[] =
unsubscribeMessage,
triggerEventMessage,
eventNameStart,
unsubscribeEventName
unsubscribeEventName,
dataStart
};

String PusherClient::getStringTableItem(int index) {
Expand All @@ -83,7 +85,6 @@ bool PusherClient::connect(String appId) {

char pathData[path.length() + 1];
path.toCharArray(pathData, path.length() + 1);

return _client.connect("ws.pusherapp.com", pathData, 80);
}

Expand All @@ -95,6 +96,10 @@ void PusherClient::disconnect() {
_client.disconnect();
}

void PusherClient::setClient(WiFly client) {
_client.setClient(client);
}

void PusherClient::monitor () {
_client.monitor();
}
Expand Down Expand Up @@ -159,15 +164,17 @@ void PusherClient::triggerEvent(String eventName, String eventData) {

void PusherClient::dataArrived(WebSocketClient client, String data) {
String eventNameStart = getStringTableItem(11);
String dataStart = getStringTableItem(13);
String eventName = parseMessageMember(eventNameStart, data);
String dataStr = parseMessageMember(dataStart, data);

if (_bindAllDelegate != NULL) {
_bindAllDelegate(data);
_bindAllDelegate(dataStr);
}

EventDelegate delegate = _bindMap[eventName];
if (delegate != NULL) {
delegate(data);
delegate(dataStr);
}
}

Expand Down
2 changes: 2 additions & 0 deletions PusherClient.h
Expand Up @@ -31,6 +31,7 @@
#include <WString.h>
#include "Arduino.h"
#include <WebSocketClient.h>
#include <WiFlyHQ.h>

//Uncomment this to use WIFLY Client
//#define WIFLY true
Expand All @@ -43,6 +44,7 @@ class PusherClient {
bool connect(String appId);
bool connected();
void disconnect();
void setClient(WiFly client);
void monitor();
void bindAll(EventDelegate delegate);
void bind(String eventName, EventDelegate delegate);
Expand Down
46 changes: 25 additions & 21 deletions WebSocketClient.cpp
Expand Up @@ -26,6 +26,7 @@
#include <WString.h>
#include <string.h>
#include <stdlib.h>
#include <WiFlyHQ.h>

prog_char stringVar[] PROGMEM = "{0}";
prog_char clientHandshakeLine1[] PROGMEM = "GET {0} HTTP/1.1";
Expand All @@ -51,11 +52,12 @@ String WebSocketClient::getStringTableItem(int index) {
strcpy_P(buffer, (char*)pgm_read_word(&(WebSocketClientStringTable[index])));
return String(buffer);
}

void WebSocketClient::setClient(WiFly client) {
_client = client;
}
bool WebSocketClient::connect(char hostname[], char path[], int port) {
bool result = false;

if (_client.connect(hostname, port)) {
if (_client.open(hostname, port)) {
sendHandshake(hostname, path);
result = readHandshake();
}
Expand All @@ -65,28 +67,30 @@ bool WebSocketClient::connect(char hostname[], char path[], int port) {


bool WebSocketClient::connected() {
return _client.connected();
return _client.isConnected();
}

void WebSocketClient::disconnect() {
_client.stop();
_client.close();
}

void WebSocketClient::monitor () {
char character;

if (_client.available() > 0 && (character = _client.read()) == 0) {
String data = "";
bool endReached = false;
while (!endReached) {
character = _client.read();
endReached = character == -1;

if (!endReached) {
data += character;
}
int WebSocketClient::getMessage(char *buf, int size)
{
int len = 0;

if (_client.available() > 0) {
if (_client.read() == 0) {
/* read up to the end of the message (255) */
len = _client.getsTerm(buf, size, 255);
}

}
return len;
}
void WebSocketClient::monitor () {
char inBuf[128];
char outBuf[128];
uint8_t outBufInd = 0;
if (getMessage(inBuf, sizeof(inBuf)) > 0) {
String data = String(inBuf);
if (_dataArrivedDelegate != NULL) {
_dataArrivedDelegate(*this, data);
}
Expand Down Expand Up @@ -137,7 +141,7 @@ bool WebSocketClient::readHandshake() {
result = handshake.indexOf(response) != -1;

if(!result) {
_client.stop();
_client.close();
}

return result;
Expand Down
6 changes: 4 additions & 2 deletions WebSocketClient.h
Expand Up @@ -28,7 +28,7 @@
#include <string.h>
#include <stdlib.h>
#include <WString.h>
#include <Ethernet.h>
#include <WiFlyHQ.h>
#include "Arduino.h"

//Uncomment this to use WIFLY Client
Expand All @@ -39,17 +39,19 @@ class WebSocketClient {
typedef void (*DataArrivedDelegate)(WebSocketClient client, String data);
bool connect(char hostname[], char path[] = "/", int port = 80);
bool connected();
void setClient(WiFly client);
void disconnect();
void monitor();
void setDataArrivedDelegate(DataArrivedDelegate dataArrivedDelegate);
void send(String data);
private:
String getStringTableItem(int index);
void sendHandshake(char hostname[], char path[]);
EthernetClient _client;
WiFly _client;
DataArrivedDelegate _dataArrivedDelegate;
bool readHandshake();
String readLine();
int getMessage(char *buf, int size);
};


Expand Down

0 comments on commit 21cb4b5

Please sign in to comment.