20160113_jeffrey - silenceuncrio/diary GitHub Wiki

Index

  • 0955 - SQLite - C tutorial
  • 1310 - IoT Platform - Thing Module - Event Handler
  • 1430 - IoT Platform - FastCGI - Event Handler
  • 1740 - IoT Platform - Architecture V2.0

0955

SQLite - C tutorial

The last inserted row id

last_row_id.c

#include <sqlite3.h>
#include <stdio.h>

int main(void) {
    
    sqlite3 *db;
    char *err_msg = 0;
    
    int rc = sqlite3_open(":memory:", &db);
    
    if (rc != SQLITE_OK) {
        
        fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
        sqlite3_close(db);
        
        return 1;
    }
    
    char *sql = "CREATE TABLE Friends(Id INTEGER PRIMARY KEY, Name TEXT);"
    "INSERT INTO Friends(Name) VALUES ('Tom');"
    "INSERT INTO Friends(Name) VALUES ('Rebecca');"
    "INSERT INTO Friends(Name) VALUES ('Jim');"
    "INSERT INTO Friends(Name) VALUES ('Roger');"
    "INSERT INTO Friends(Name) VALUES ('Robert');";
        
    
    rc = sqlite3_exec(db, sql, 0, 0, &err_msg);
    
    if (rc != SQLITE_OK ) {
        
        fprintf(stderr, "Failed to create table\n");
        fprintf(stderr, "SQL error: %s\n", err_msg);
        sqlite3_free(err_msg);
        
    } else {
        
        fprintf(stdout, "Table Friends created successfully\n");
    }
    
    int last_id = sqlite3_last_insert_rowid(db);
    printf("The last Id of the inserted row is %d\n", last_id);

    sqlite3_close(db);
    
    return 0;
}

更新資料庫的前提是要建立資料庫

先緩一緩

1310

IoT Platform - Thing Module - Event Handler

這裡得回到 FastCGI

回顧所需的環境

/etc/nginx/nginx.conf on JS9331

user nobody nogroup;
worker_processes  1;

events {
  worker_connections  1024;
}

http {
  server {
    listen 8080;
    server_name localhost;

    location / {
      fastcgi_pass   127.0.0.1:8000;
      include        fastcgi_params;
    }
  }
}

run nginx

/etc/init.s/nginx start

nginx 有兩個 process

root@JoySince:/www/cgi-bin# ps
  PID USER       VSZ STAT COMMAND
    1 root      1388 S    /sbin/procd
 ....
 1312 root      3408 S    nginx: master process /usr/sbin/nginx
 1313 nobody    3616 S    nginx: worker process
 1320 root      1360 R    ps
root@JoySince:/www/cgi-bin#

fcgi_test.c

#include <stdio.h>
#include <json-c/json.h>
#include "fcgiapp.h"

json_object *obj;

int main () {
    FCGX_Stream *in, *out, *err;
    FCGX_ParamArray envp;
    while (FCGX_Accept(&in, &out, &err, &envp) >= 0) {
        FCGX_FPrintF(out, "Content-type: application/json\r\n\r\n");
        obj = json_object_new_object();
        json_object_object_add(obj, "ok", json_object_new_boolean(TRUE));
        FCGX_FPrintF(out, "%s", json_object_to_json_string(obj));
        json_object_put(obj);
    }
    return 0;
}

run fcgi_test

spawn-fcgi -p 8000 -n ./fcgi_test

覺得要畫一下架構否則之後自己很容易漏掉一些技術環節

1430

IoT Platform - FastCGI - Event Handler

image

畫完突然覺得我這次設計的 IoT 引擎根本就圍繞著 database 在動嘛

1740

IoT Platform - Architecture V2.0

圍繞著 database 再畫一次 IoT Platform Architecture

⚠️ **GitHub.com Fallback** ⚠️