<?php
//
//ヒッキー板チャットクライアント
//
// サイト：  http://c...content-available-to-author-only...l.cx/
//

//定数的データ
$client = "SJIS";
$server = "UTF-8";
$url = 'http://c...content-available-to-author-only...l.cx/api/';
$commands = array(
	'enter' => 1,
	'read' => 1,
	'write' => 1,
	'leave' => 1
);

//文字エンコード
function enc($str) {
    global $client, $server;
    if ($client == $server) return $str;
    return mb_convert_encoding($str, $server, $client);
}
function dec($str) {
    global $client, $server;
    if ($client == $server) return $str;
    return mb_convert_encoding($str, $client, $server);
}

//通信処理
function postit($cmd, $msg = '') {
	global $url, $name, $commands;
	//コマンドの確認
	if (!isset($commands[$cmd])) {
		return false;
	}
	//送信データの用意
	$data = array('name' => $name);
	if ($cmd == 'write') {
		if ($msg == false) {
			return false;
		}
		$data['body'] = enc($msg);
	}
	
	//通信部
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url . $cmd);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    $result = curl_exec($curl);
    curl_close($curl);
    
    return $result;
}

//名前の入力
do {
    echo 'Name?: ';
    $name = rtrim(fgets(STDIN));
} while ($name == false);
$name = enc($name);

//入室
if (postit('enter') === false) {
    die("failed to enter." . PHP_EOL);
}

//ループ
do {
    //チャットの読み込みと表示
    if (($json = postit('read')) === false) {
        die("failed to read." . PHP_EOL);
    }
    $chat = json_decode($json);
    if (json_last_error() != JSON_ERROR_NONE) {
        postit('leave');
        die("failed by json.(" . json_last_error() .")\n");
    }
    foreach ($chat as $value) {
        echo '[', $value->time, ']', dec($value->name),': ', dec($value->body), PHP_EOL;
    }
    echo PHP_EOL;
    
    //コマンドの入力
    echo 'Command: write read leave', PHP_EOL;
    do {
        echo '? ';
        $cmd = rtrim(fgets(STDIN));
    } while (!isset($commands[$cmd]));
    
    //メッセージの入力
    if ($cmd == 'write') {
        do {
            echo 'message? ';
            $mes = rtrim(fgets(STDIN));
        } while ($mes == false);
        if (postit('write', $mes) === false) {
            die('failed to write.' . PHP_EOL);
        }
    }
} while ($cmd != 'leave');

//退室
postit('leave');

?>