bool PusherClient::connect()
{   
	String stringVar0; 
	String path; 
	String host; 
	String key;
	
	getStringTableItem(0, stringVar0);
    getStringTableItem(3, path);	
    getStringTableItem(4, host);	
    getPusherInfoItem(1, key);	
    path.replace(stringVar0, key);

    if (!_client.connect(host, path, 80))
	{
		LogPrintLn(logMessageTablePusherClient, 0);
		return false;
	}	
	
#if (ENABLE_AUTH == 1)
	while(_socketid.length() == 0)
	{
		delay(100);
		monitor();
	}
#endif
	
	LogPrintLn(logMessageTablePusherClient, 1);
	return true;
}
void PusherClient::unsubscribe(String channel) {
    String unsubscribeEventName = getStringTableItem(12);
    String stringVar0 = getStringTableItem(0);
    String message = getStringTableItem(9);
    message.replace(stringVar0, channel);
    triggerEvent(unsubscribeEventName, message);
}
void PusherClient::subscribePrivate(const String& channel) 
{
    String message;
    getStringTableItem(7, message);
	
	{
		String stringVar;
		
		{
			String auth;
			getStringTableItem(1, stringVar);
			getAuthString(channel, auth);	
			message.replace(stringVar, auth);
			LogPrintLn(message);
		}
		
		getStringTableItem(0, stringVar);
		message.replace(stringVar, channel);
		LogPrintLn(message);	
	}
	
	String subscribeEventName;
	getStringTableItem(5, subscribeEventName);
    triggerEvent(subscribeEventName, message);
}
void PusherClient::subscribe(String channel, String auth) {
    String subscribeEventName = getStringTableItem(5);
    String stringVar0 = getStringTableItem(0);
    String stringVar1 = getStringTableItem(1);
    String message = getStringTableItem(7);
    message.replace(stringVar0, channel);
    message.replace(stringVar1, auth);
    triggerEvent(subscribeEventName, message);
}
Example #5
0
void PusherClient::triggerEvent(String eventName, String eventData) {
    String eventString = getStringTableItem(0);
    String dataString = getStringTableItem(1);
    String message = getStringTableItem(10);
    
    message.replace(eventString, eventName);
    message.replace(dataString, eventData);
    
    _client.send(message);
}
void PusherClient::triggerEvent(String eventName, String eventData) {
    String stringVar0 = getStringTableItem(0);
    String stringVar1 = getStringTableItem(1);
    String message = getStringTableItem(10);
    
    message.replace(stringVar0, eventName);
    message.replace(stringVar1, eventData);
    
    _client.send(message);
}
bool PusherClient::connect(String appId) {
    String stringVar0 = getStringTableItem(0);
    String path = getStringTableItem(3);
    path.replace(stringVar0, appId);

    char pathData[path.length() + 1];
    path.toCharArray(pathData, path.length() + 1);
    
    return _client.connect("ws.pusherapp.com", pathData, 80);
}
void WebSocketClient::sendHandshake(char hostname[], char path[]) {
    String stringVar = getStringTableItem(0);
    String line1 = getStringTableItem(1);
    String line2 = getStringTableItem(2);
    String line3 = getStringTableItem(3);
    String line4 = getStringTableItem(4);
    String line5 = getStringTableItem(5);
    String line6 = getStringTableItem(6);
    String line7 = getStringTableItem(7);
    String line8 = getStringTableItem(8);
    
    line1.replace(stringVar, path);
    line4.replace(stringVar, hostname);
    
    Serial.println(line1+"\n"+line2+"\n"+line3+"\n"+line4+"\n"+line5+"\n"+line6+"\n" + line7 + "\n" + line8 + "\n");
    
    _client.println(line1);
    _client.println(line2);
    _client.println(line3);
    _client.println(line4);
    _client.println(line5);
    _client.println(line6);
    _client.println(line7);
    //_client.println(line8);
    _client.println();
}
void PusherClient::triggerEvent(String eventName, String eventData, String channel) {
    String stringVar0 = getStringTableItem(0);
    String stringVar1 = getStringTableItem(1);
    String stringVar2 = getStringTableItem(2);
    String message = getStringTableItem(14);
    
    message.replace(stringVar0, eventName);
    message.replace(stringVar1, eventData);
    message.replace(stringVar2, channel);
    Serial.println(message);
    _client.send(message);
}
void PusherClient::unsubscribe(const String& channel) 
{
    String unsubscribeEventName; 
    String stringVar0; 
    String message; 
		
	getStringTableItem(12, unsubscribeEventName);
	getStringTableItem(0, stringVar0);
	getStringTableItem(9, message);
	
    message.replace(stringVar0, channel);
	
    triggerEvent(unsubscribeEventName, message);
}
bool WebSocketClient::readHandshake() {
    bool result = false;
    char character;
    String handshake = "", line;
    int maxAttempts = 300, attempts = 0;
    
    while(_client.available() == 0 && attempts < maxAttempts) 
    { 
        delay(100); 
        attempts++;
    }
    
    while((line = readLine()) != "") {
        handshake += line + '\n';
    }
    
    Serial.println(handshake);
    String response = getStringTableItem(9);
    result = handshake.indexOf(response) != -1;
    
    if(!result) {
        _client.stop();
    }
    
    return result;
}
void PusherClient::getAuthString(const String& channel, String& auth)
{
	Sha256Class sha256;
	
	//Sha init with secret key
	{
		String secret;
		getPusherInfoItem(2, secret);
		sha256.initHmac((uint8_t*)&secret[0], secret.length());
	}
	
	//Set the data to encrypt
	{
		String text;
		text.reserve(_socketid.length() + 1 + channel.length());
		text = _socketid;
		text += ':';
		text += channel;
		sha256.print(text);
	}
	
	uint8_t* result = sha256.resultHmac();
	
	String hexChars;
	getStringTableItem(19, hexChars);
	
	auth.reserve(21 /*key*/ + 1 + 64 /*sha256*/);	
	getPusherInfoItem(1, auth); //key
	auth += ':';	
	for (int i=0; i<32; i++)
	{
		auth += hexChars.charAt(result[i]>>4);
		auth += hexChars.charAt(result[i]&0xf);
	}
}
Example #13
0
void PusherClient::dataArrived(WebSocketClient client, String data) {
    Serial.println(data);
    String eventNameStart = getStringTableItem(11);
    String eventName = parseMessageMember(eventNameStart, data);
 
    if (_bindAllDelegate != NULL) {
        _bindAllDelegate(data);
    }
    
    EventDelegate delegate = _bindMap[eventName];
    Serial.println(eventName);
    if (delegate != NULL) {
        String dataStart = getStringTableItem(13);
        String payload = parseMessageMember(dataStart, data);
        delegate(payload);
    }
 }
PusherClient::PusherClient()
{ 
    String eventName; 
	getStringTableItem(17, eventName);
	bind(eventName, connectionEstablished);
	
	_client.setDataArrivedDelegate(dataArrived);
	lastPingTime = millis();
}
void PusherClient::triggerEvent(const String& eventName, const String& eventData)
{
    String stringVar; 
    String message; 
    
	getStringTableItem(10, message);
	
	getStringTableItem(0, stringVar);
	message.replace(stringVar, eventName);
    
	getStringTableItem(1, stringVar);
	message.replace(stringVar, eventData);
	
    _client.send(message);
	
	LogPrint(logMessageTablePusherClient, 5);
	LogPrintLn(eventName);
}
void PusherClient::subscribe(const String& channel) 
{
    if (!_client.connected())
		return;
		
    String subscribeEventName; 
    String stringVar0; 
    String message;
	
	getStringTableItem(5, subscribeEventName);
	getStringTableItem(0, stringVar0);	
	getStringTableItem(6, message);
	
    message.replace(stringVar0, channel);
    
	triggerEvent(subscribeEventName, message);

	LogPrint(logMessageTablePusherClient, 3);
	LogPrintLn(channel);
}
void PusherClient::dataArrived(const String& message)
{
	String paramName;
	String eventName;
	String eventData;
	
	getStringTableItem(11, paramName);
	parseMessageMember(message, paramName, eventName);
	
	getStringTableItem(13, paramName);
	parseMessageMember(message, paramName, eventData);
    
    if (_bindAllDelegate != NULL) {
        _bindAllDelegate(eventName, eventData);
    }
    
    EventDelegate delegate = _bindMap[eventName];
    if (delegate != NULL) {
        delegate(eventName, eventData);
    }
}
void PusherClient::triggerPrivateEvent(const String& channelName, const String& eventName, const String& eventData)
{
    String stringVar0; 
    String stringVar1; 
	String stringVar2; 
    String message; 
    
	getStringTableItem(0, stringVar0);
	getStringTableItem(1, stringVar1);
	getStringTableItem(2, stringVar2);
	getStringTableItem(14, message);
	
    message.replace(stringVar0, eventName);
    message.replace(stringVar1, eventData);
    message.replace(stringVar2, channelName);
	
    _client.send(message);
	
	LogPrint(logMessageTablePusherClient, 5);
	LogPrintLn(eventName);
}
void PusherClient::dataArrived(WebSocketClient client, String data) {
    String eventNameStart = getStringTableItem(11);
    String eventName = parseMessageMember(eventNameStart, data);
    
    if (_bindAllDelegate != NULL) {
        _bindAllDelegate(data);
    }
    
    EventDelegate delegate = _bindMap[eventName];
    if (delegate != NULL) {
        delegate(data);
    }
}
void WebSocketClient::sendHandshake(char hostname[], char path[]) {
    String stringVar = getStringTableItem(0);
    String line1 = getStringTableItem(1);
    String line2 = getStringTableItem(2);
    String line3 = getStringTableItem(3);
    String line4 = getStringTableItem(4);
    String line5 = getStringTableItem(5);
    
    line1.replace(stringVar, path);
    line4.replace(stringVar, hostname);
    
    _client.println(line1);
    _client.println(line2);
    _client.println(line3);
    _client.println(line4);
    _client.println(line5);
    _client.println();
}
void PusherClient::KeepConnectionAlive()
{
    String pingEvent; 
    getStringTableItem(15, pingEvent);	
	_client.send(pingEvent);
}
void PusherClient::acquireSocketId(const String& eventData)
{
    String socketIdName;	
	getStringTableItem(18, socketIdName);
	parseMessageMember(eventData, socketIdName, _socketid);
}