2012������09·���

2012������09·���29������

chrome¾�����������¡�Web\µ���¼\Ð���¼�����ҏ���돢�«���·�����������Ώ�����

Chrome Apps v2's socket api

Chrome ������ Web apps���� manifest v2 �����������Џ�������������¡��½������µ����½��¡񏩡��������� Packaged Apps ���̏��������������������Џ��������������������������������¹��¡�

���½�������������������������̏����������������������䏢�·�������������������������̏�¡�socket api��¡�Chrome������Packaged Apps���«��������¡񏪢���������\½\��\���\���\³���¼\���\��\���\�돢��½Ð�����������������������Ï��������������������������¹��¡�

���³������ socket api ���������¹���̏�¡��³������������������ tcp \½\��\���\���������\µ���¼\Ð���¼�����ҏ��폢�������������³���������̏��������­���������«������������(listen���������«accept������\���\½\���\������̏��µ���«������������)�������������¹���̏�¡�돫ҏ����� Google API Expert MTG������ µ����������µ���������«��������¡��ӏ�돫ҏ�����Chromium������¼��������؏��µ�����������ď����Ώ����ď�������¡ߏ�����������¾��Ï����я��̏�¡����������������Ï��³��������������¡񏪡���������������ޏ�����Web\µ���¼\Ð���¼�����ҏ���돢�«���·�����������Ώ��������·�����ď��Ï��Ï��Ï����������������Ï������̏��򏩡��䏢����Entry���������¹��¡�(¼¹������»��Џ�������������������¡��¹��������������¡�canary build����������������돢�������������������������¹����

�����������������Ï��³��������������¡񏪡���������\³���¼\���������¾���²��Ï��·���������¹��¡���Chrome������돪����·canary build 24.0.1280.0 ������³���������·���������������������¹��¡����������쏢¡�chrome://flags��������¡�����»����³�ޏ�ď����Џ�����������³������\µ����½ API ��¡������ҏ��­�����⏢�������¹���������������ҏ����쏪���돢��������������������

\µ\���\��\���\³���¼\���

manifest.json

{
  "manifest_version": 2,
  "name": "simple HTTP server",
  "description": "something what ridiculous simple web server",
  "version": "0.1",
  "minimum_chrome_version": "24",
  "app": {
    "background": {
      "scripts": ["httpserver.js"]
    }
  },
  "permissions": [
    "experimental",
    {"socket": [
      "tcp-listen"
    ]}
  ]
}

permissions��������¡�tcp-listen������»������������¹��������������\���\½���������¹��¡�

httpserver.js

function t2ab(str /* String */) {
    var buffer = new ArrayBuffer(str.length);
    var view = new DataView(buffer);
    for(var i = 0, l = str.length; i < l; i++) {
      view.setInt8(i, str.charAt(i).charCodeAt());
    }
    return buffer;
}

function ab2t(buffer /* ArrayBuffer */) {
  var arr = new Int8Array(buffer);
  var str = "";
  for(var i = 0, l = arr.length; i < l; i++) {
    str += String.fromCharCode.call(this, arr[i]);
  }
  return str;
}


var RESPHEAD = [
  "HTTP/1.1 200 OK",
  "Server: chrome24",
  "Content-Length: {%len%}",
  "Connection: Close",
  "Content-Type: text/html"
]

RESPHEAD = RESPHEAD.join("\r\n")+"\r\n\r\n";

var RESP = [
  "<!doctype html>",
  "<html>",
  "<head>",
  "</head>",
  "<body>",
  "<h1>Welcome!!</h1>",
  "<p>this web server is built w/ chrome's packaged apps v2 feature</p>",
  "</body>",
  "</html>"
]
RESP = RESP.join("\r\n");

var response = function(str){
  var len = str.length;
  return RESPHEAD.replace("{%len%}", len)+str;
}


var rtw = function(sid) {
  // [TODO]
  // call recursive for keep-alive features
  // currently, I haven't tested.
  chrome.socket.read(sid, 65535, function(e){
    console.log(ab2t(e.data));
    if(e.resultCode < 0) {
      chrome.socket.destroy(sid);
      return;
    }
    chrome.socket.write(sid, t2ab(response(RESP)), function(e){
      // [TODO] check datasize
      console.dir(e);
      rtw(sid);
    });
  });
}

chrome.socket.create('tcp', {}, function(e){
  var s = e;

  chrome.socket.listen(s.socketId, "0.0.0.0", 0, 10, function(e){
    chrome.socket.getInfo(s.socketId, function(e){
      console.log("Local web server's URL => http://localhost:"+e.localPort+"/"); // you can check listen port :)
    });
    var accept_ = function(sid){
      chrome.socket.accept(sid, function(e){
        rtw(e.socketId);
        accept_(s.socketId);
      });
    }
    accept_(s.socketId);
  });
});

tcp������accept���·�����ď���������¡�돩�������accept�����ҏ��������Ð��������������������¡�2²��я�����돪�¹��Ώ�����tcp�����䏪�³����\���\���\���\������������­�����������������ď������������³��������돢돫��µ���·�������������«�������������Ï��Ï��Ï�����¡���������������𡯏����롭�������ޏ��������������������������������������Ï��³��������������¡�돩�µ������½��Џ��������������������������¹�������³������½��Џ��­������������������¡�\���\���\������̏�������������ġ������叢��

����돢돫�³������

¾���µ­\³���¼\��������� github�����������ӏ����������������쏢�­���������·�����ď�¡�chrome://extensions ���������³������������\���\���\¹\������¼\������¹��������������������\���\���\���\���\��Џ��¼\������¼\�����¡ߏ�����\���\��\���\��������ҏ����Џ�������¡���\���\���\�ޏ��¼\���²½���µ������������������������������³������\µ����½�����ҏ�����������¹��Џ�������¡ߏ�������¡�³��돪���ӏ�����\���\���\���\������¼������»���������������¡�\Ð\���\���\��\���\���\���\���\��\���\»\¹���������·������Web\µ���¼\Ð���¼����µ�������돢�·���������¹��¡�

���³���³��������¡�simple HTTP server��������\���\������¼�����ҏ������돢�: _generated_background_page.html��¡ߏ�����\���\���\���\������¹������������ dev tools ����µ�������돢�·���������¹��¡��³���³��������¡�\³\���\½���¼\���������\���\��ӏ�����\���\���\���\������¹��������������¡�Web\µ���¼\Ð���¼������URL���̏��½¼�����µ���������������������������¹��¡�
0929-0

���½������URL������\���\���\���\��������\��\���\»\¹���¹��������������¡�돪�²¼������²������������̏��½¼�����µ���������������¹��¡���Web\µ���¼\Ð���¼����������돢���������������������������ď�������¡�\���\���\���\�������������������Ð�����������я�������������¡�\��\���\»\¹²������½���������¹��¡�돪�²¼������\¹\���\������¼\���\·\���\���\��������� FireFox������Safari���«������\��\���\»\¹���·������¾���¹�������
0929-1

�����������я�����\���\���\��\¹\������������Ð���·��������������¡񏩡�ޡ돫�\���\½���¼\¹���·���«�����ӏ��µ�����������������\·\���\��\���������Web\µ���¼\Ð���¼����µ�������돢�·���������·�����ġ��

������������������

����²��я�����\���\¹\�����������������¡�Chrome apps v2��������������µ����½�����¡돫������� socket api ��������������������������¡�

  • ��돫ҏ����䏢����������������¼��������؏��µ������������ tcp\µ���¼\Ð���¼������API
  • \µ\���\��\������������·������Web\µ���¼\Ð���¼������\³���¼\���
������¾���²��Ï��·���������·�����ď�¡�\���\���\���\��������tcp\µ���¼\Ð���¼����µ�������돢�������­��������������¡�Web \��\��\���\�ޏ��¼\·\���\��я����������������������­������¹­���̏��������������¹��¡��³���������«������������Web���̏��������¹���������¹³��⏢�·���������������������������­���������·�����ġ��

��ď��µ���\���\���\��\���\���\­\���\�돢����
kotesaki at 02:52����Permalink����Comments(18)����clip!
\��\���\»\¹\«\���\���\��ď��¼

    <% for ( var i = 0; i < 7; i++ ) { %> <% } %>
    <%= wdays[i] %>
    <% for ( var i = 0; i < cal.length; i++ ) { %> <% for ( var j = 0; j < cal[i].length; j++) { %> <% } %> <% } %>
    0) { %> id="calendar-47184-day-<%= cal[i][j]%>"<% } %>><%= cal[i][j] %>
    QR\³���¼\���
    QR\³¼\