2020-06-17
第31回高専プロコンの競技部門の予定だった競技を「囲みます」と名付けて、ロゴ完成!前回に引き続き、オンラインで集まり開発進めるハックデー。

今日の5名2グループ、1時間1スプリントでの進捗は、APIサーバーがDenoで2人体制で進み、クライアントのフィールド表示の初期段階ができて、FigmaのデザインからHTMLへ起こす目処がなんとなく立つまで。 短時間の割にはまずまず?

今日の参加者 -1 (残念ながら、寮の回線状況悪かった、さよ)

囲みますプロジェクトは Code for KOSEN に移管!
codeforkosen/Kakomimasu: #procon31 競技部門 コアモジュール for Deno/Node.js
Code for KOSEN チームで作っていきます。


側面支援、C言語でJSONでやりとりする apiserver に接続するプログラムができました!

HTTP POSTを実現する post.h は、コマンド curl を popen を使って起動し、返ってきた文字列を返します。

#include <stdio.h> #define MAX_LEN_REQ (1 * 1024 * 1024) // 1Mbyte int post(const char* host, const char* path, const char* json, char* buf, int lenbuf) { char cmd[MAX_LEN_REQ]; sprintf(cmd, "curl -s -H 'Authorization: token1' -X POST %s%s -d '%s'", host, path, json); printf("[post req]\n%s\n\n", cmd); // char* cmd = "curl -s -H 'Authorization: token1' -X POST http://localhost:8880/action -d '{\"actions\":[{\"agentID\": 2, \"dx\": 1, \"dy\": 1, \"type\": \"move\"}, {\"agentID\": 3, \"dx\": 1, \"dy\": 1, \"type\": \"move\"}]}'"; // for test FILE* fp = popen(cmd, "r"); if (!fp) { fprintf(stderr, "can't popen\n"); return 1; } fgets(buf, lenbuf, fp); if (!feof(fp)) { fprintf(stderr, "too long json, check MAX_LEN_JSON\n"); return 1; } printf("[post res]\n%s\n\n", buf); pclose(fp); return 0; }

post.h を使って、受け取った文字列を、sscanf でパースし、AIロジックで使いましょう! scanfでパースしやすく、tokenなどの文字数は固定で決めておくと良さそう。 (src on GitHub)

#include <stdio.h> #include "post.h" #define MAX_LEN_JSON (1 * 1024 * 1024) // 1Mbyte #define LEN_TOKEN 6 // TOKENの長さは固定 int action_test(const char* host) { char buf[MAX_LEN_JSON]; if (post(host, "/action", "{\"actions\":[{\"agentID\": 2, \"dx\": 1, \"dy\": 1, \"type\": \"move\"}, {\"agentID\": 3, \"dx\": 1, \"dy\": 1, \"type\": \"move\"}]}", buf, MAX_LEN_JSON)) { printf("post error!\n"); return 1; } char token[LEN_TOKEN + 1]; int nActions; int res = sscanf(buf, "{\"yourToken\":\"%6s\",\"yourPath\":\"/action\",\"nActions\":%d}", token, &nActions); // 6 == LEN_TOKEN if (!res) { printf("parse error!\n"); return 1; } printf("[parsed]\n"); printf("token (%d chars): %s\n", LEN_TOKEN, token); printf("nActions: %d\n", nActions); return 0; } int main(int argc, char** argv) { const char* host = "http://localhost:8880"; return action_test(host); }

Code for KOSEN」のwebサイトも手を入れ、参加者募集も追加!

競技プロコン、ウェブサイト、その他高専に関する何かプロジェクトなどなど。
我こそはという高専生の参加、お待ちしてます!

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS