Upgrade to Pro — share decks privately, control downloads, hide ads and more …

この中に1人、素人がいる!

 この中に1人、素人がいる!

12月2日に行われたインフィニットループ×クラスメソッド×クリプトン合同勉強会で発表した資料です

http://connpass.com/event/20314/

Infiniteloop

August 16, 2023
Tweet

More Decks by Infiniteloop

Other Decks in Programming

Transcript

  1. ソケット通信部分のソースコード ※ClientSocketはシングルトンクラス int ClientSocket::connection( const u8* ip, int port )

    { if( ( socket_ = socket( PF_INET, SOCK_STREAM, 0 ) ) < 0 ){ return CONNECT_SOCK_ERROR; } pthread_create( &thread_, NULL, threadHook, this ); return CONNECT_SUCCESS; } 事例3:後先を考えない(2)
  2. データ送信部分のソースコード(要約) // 送信データの構造体 typedef struct { char a; // 1バイト

    long b; // 4バイト } Foo_t; 事例4:自分に非があるかもしれないことを考えない(2)
  3. データ送信部分のソースコード(要約) Foo_t bar; bar.a = 10; bar.b = 20; char*

    data = new char[sizeof(Foo_t)]; // 1 + 4で5(?) memcpy(data, &bar, sizeof(Foo_t)); Connection::getInstance()->send(data); // 送信 事例4:自分に非があるかもしれないことを考えない(3)
  4. 事例5:サーバは最強だと思っている(1) 今回は課金時のエラー処理の事例。 while (true) { char* receipt = getReceipt(); //

    レシートを受け取る int status = PurchaseManager::send(receipt); // ポイント追加 if (status == SUCCESS) { break; // 成功したので抜ける } }
  5. 事例6.本番の想定ができない(3) 当時書いたPHPのコード(要約) if (!$is_login) { return; } // 日をまたいでいるかどうか $login_bonus->add($user_id,

    1); // 1日加算(UPDATE) $days = $login_bonus->get($user_id); //日数を取得(SELECT) $reward->give($days); // その日の報酬を配布