HTTP (RPC) Server mit UI

Dependencies:   EthernetInterface mbed-rpc mbed-rtos mbed

Fork of IoTKit_RPC-Server by th.iotkit.ch

HTTP (RPC) Server mit eigener UI Oberfläche.

Board mit dem Ethernet verbinden. Console starten und angezeigte IP-Adresse notieren und in Browser öffnen.

Create Object

Type: DigitalOut Name: led1 arg(optional): PTB22

und Create Button drücken.

Call a function

Command: /led1/write 1

eingeben und Send drücken. Das rote LED auf dem Board geht aus. Mittels /led1/write 0 wird es wieder eingeschaltet.

Für die komplette Dokumentation siehe /users/feb11/code/HTTP-Server/

RequestHandler.cpp

Committer:
marcel1691
Date:
2015-03-23
Revision:
12:e04008977007
Parent:
7:838d7ea07e18

File content as of revision 12:e04008977007:

#include "RequestHandler.h"
#include "mbed_rpc.h"
#include "RPCObjectManager.h"
#include "RPCCommand.h"

const char* INVALID_CMD = "Invalid RPC command";
const char* DELETE_ERROR = "You must send a DELETE request to remove an object ";
const char* CREATE_ERROR = "You must send a PUT request to create an object";
const char* FUNC_CALL_ERROR = "You must send a GET request to call a function";

void GetRequestHandler::handle(const RPCCommand& cmd, char *reply)
{
    switch(cmd.get_type())
    {
        case DELETE:
            printf("Error: %s\n", DELETE_ERROR);
            strcat(reply, DELETE_ERROR);
            break;
        case FUNCTION_CALL:
            RPC::call(cmd.get_cmd(), reply);
            break;
        case CREATE:
            printf("Error: %s\n", CREATE_ERROR);
            strcat(reply, CREATE_ERROR);
            break;
        default:
            printf("Error: %s\n", INVALID_CMD);
            strcat(reply, INVALID_CMD);
            break;
    }
}

void PutRequestHandler::handle(const RPCCommand& cmd, char *reply)
{
    switch(cmd.get_type())
    {
        case DELETE:
            printf("Error: %s\n", DELETE_ERROR);
            strcat(reply, DELETE_ERROR);
            break;
        case FUNCTION_CALL:
            printf("Error: %s\n", FUNC_CALL_ERROR);
            strcat(reply, FUNC_CALL_ERROR);
            break;
        case CREATE:
            RPC::call(cmd.get_cmd(), reply);
            if(strlen(reply) > 0)
            {
                RPCObjectManager::instance().store_object(reply);
                strcat(reply, " has been created");
            }
            else
            {
                printf("Error while creating object\n");
                strcat(reply, "Error while creating object.");
            }
            break;
        default:
            printf("Error: %s\n", INVALID_CMD);
            strcat(reply, INVALID_CMD);
            break;
    }
}

void DeleteRequestHandler::handle(const RPCCommand& cmd, char *reply)
{
    switch(cmd.get_type())
    {
        case CREATE:
            printf("Error: %s\n", CREATE_ERROR);
            strcat(reply, CREATE_ERROR);
            break;
        case FUNCTION_CALL:
            printf("Error: %s\n", FUNC_CALL_ERROR);
            strcat(reply, FUNC_CALL_ERROR);
            break;
        case DELETE:
            RPC::call(cmd.get_cmd(), reply);
            RPCObjectManager::instance().remove_object(cmd.get_obj_name());
            strcat(reply, "Deleted object ");
            strcat(reply, cmd.get_obj_name());
            break;
        default:
            printf("Error: %s\n", INVALID_CMD);
            strcat(reply, INVALID_CMD);
            break;
    }
}

void ComplexRequestHandler::handle(const RPCCommand& cmd, char *reply)
{
    switch(cmd.get_type())
    {
        case CREATE :
            putHandler.handle(cmd, reply);
            break;
        case DELETE :
            deleteHandler.handle(cmd, reply);
            break;
        case FUNCTION_CALL :
            getHandler.handle(cmd, reply);
            break;
        default :
            printf("Error: %s\n", INVALID_CMD);
            strcat(reply, INVALID_CMD);
            break;
    }
}