Skip to content
Snippets Groups Projects
main.cpp 2.42 KiB
Newer Older
  • Learn to ignore specific revisions
  • /*
     * Open Pixel Control server for Fadecandy
     * 
     * Copyright (c) 2013 Micah Elizabeth Scott
     * 
     * Permission is hereby granted, free of charge, to any person obtaining a copy of
     * this software and associated documentation files (the "Software"), to deal in
     * the Software without restriction, including without limitation the rights to
     * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
     * the Software, and to permit persons to whom the Software is furnished to do so,
     * subject to the following conditions:
     * 
     * The above copyright notice and this permission notice shall be included in all
     * copies or substantial portions of the Software.
     * 
     * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
     * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
     * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
     * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
     * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     */
    
    #include "rapidjson/document.h"
    #include "rapidjson/reader.h"
    #include "rapidjson/filestream.h"
    #include "fcserver.h"
    #include <unistd.h>
    
    #include <signal.h>
    
    #include <cstdio>
    
    int main(int argc, char **argv)
    {
        if (argc != 2) {
            fprintf(stderr,
                "\n"
                "Fadecandy Open Pixel Control server\n"
                "\n"
                "usage: fcserver <config.json>\n"
                "\n"
                "Copyright (c) 2013 Micah Elizabeth Scott <micah@scanlime.org>\n"
                "https://github.com/scanlime/fadecandy\n"
                "\n");
            return 1;
        }
    
        FILE *configFile = fopen(argv[1], "r");
        if (!configFile) {
            perror("Error opening config file");
            return 2;
        }
    
        rapidjson::FileStream istr(configFile);
        rapidjson::Document config;
        config.ParseStream<0>(istr);
        if (config.HasParseError()) {
    
            fprintf(stderr, "Parse error at character %d: %s\n",
                int(config.GetErrorOffset()), config.GetParseError());
    
            return 3;
        }
    
        FCServer server(config);
        if (server.hasError()) {
            fprintf(stderr, "Configuration errors:\n%s", server.errorText());
            return 5;
        }
    
    
        struct ev_loop *loop = EV_DEFAULT;
        server.start(loop);
        signal(SIGPIPE, SIG_IGN);
        ev_run(loop, 0);