• R/O
  • HTTP
  • SSH
  • HTTPS

AI004: コミット

サブプロジェクトAI004


コミットメタ情報

リビジョン9e3fa0bd270e6b82544df3e38d7d360f8635ed2c (tree)
日時2014-04-28 20:50:51
作者hikarupsp <hikarupsp@user...>
コミッターhikarupsp

ログメッセージ

ノードの同期はだいたいできた

変更サマリ

差分

--- a/memdb/memdb.js
+++ b/memdb/memdb.js
@@ -11,7 +11,7 @@ function MemoryDB(syncPHPURL){
1111 this.syncPHPURL = syncPHPURL;
1212 this.isEnabledNetDB = true;
1313 //
14- this.callback_addNode = null; // function(nodeinstance){};
14+ this.callback_refreshedNode = null; // function(nodeinstance){};
1515 }
1616 MemoryDB.prototype = {
1717 UUID_Null: "00000000-0000-0000-0000-000000000000",
@@ -46,7 +46,6 @@ MemoryDB.prototype = {
4646 rq.setRequestHeader('Pragma', 'no-cache'); // HTTP/1.0 における汎用のヘッダフィールド
4747 rq.setRequestHeader('Cache-Control', 'no-cache'); // HTTP/1.1 におけるキャッシュ制御のヘッダフィールド
4848 rq.setRequestHeader('If-Modified-Since', 'Thu, 01 Jun 1970 00:00:00 GMT');
49-
5049 },
5150 sendRequestSync: function(mode, url, data){
5251 //同期モード
@@ -74,13 +73,15 @@ MemoryDB.prototype = {
7473 },
7574 syncDB: function(){
7675 // MySQLと同期
77- var r, a, d, t;
76+ // 定期的に呼び出されることを想定
77+ var r, a, d;
7878 if(this.root.length == 0){
7979 // 初回同期時は全て取得
8080 r = this.sendRequestSync("GET", this.syncPHPURL + "?action=getallnode", null);
8181 } else{
8282 // 差分のみを取得
83-
83+ d = this.getNodeFromUUID(this.UUID_Node_MemoryDBNetworkTimestamp).identifier;
84+ r = this.sendRequestSync("GET", this.syncPHPURL + "?action=getnodemod&t=" + d, null);
8485 }
8586 a = r.split("\n");
8687 for(var i = 0, iLen = a.length; i < iLen; i++){
@@ -93,56 +94,24 @@ MemoryDB.prototype = {
9394 if(d === undefined){
9495 continue;
9596 }
96- t = new MemoryDBNodeTag(d[0], d[1], d[2]);
97- if(t){
98- this.root.push(t);
99- this.nodeList.push(t);
100- }
97+ this.refreshNodeInternal(d[2], d[1], d[0]);
10198 }
10299 console.log(this.root);
103100 },
104- editNode: function(ident, tid, nid, disableSync){
105- // Nodeを追加し、データベースにも反映し、可能ならばネットワークにも反映させる
101+ refreshNode: function(ident, tid, nid){
102+ // 該当タグのデータを書き換え、もしくは新規作成する。
103+ // 可能であればネットワークに反映する
106104 // nid(nodeid)は省略可能で、省略時は新たなUUIDが自動的に付与される
107105 // tid(typeid)も省略可能で、省略時はNullUUIDが付与される。
106+ // identはnullもしくは空文字でもかまわない。
108107 // 戻り値はMemoryDBNodeTagインスタンス
109- // すでに同じnodeidのNodeが存在している場合はundefinedを返しデータベースへの変更は行われない。
110- var t, s, r;
111- if(!ident){
112- return undefined;
113- }
114- if(!tid){
115- tid = this.UUID_Null;
116- }
117- if(!nid){
118- nid = this.createUUID();
119- }
120- // 存在確認
121- t = this.getNodeFromUUID(nid);
122- if(t){
123- return undefined;
124- }
125- t = new MemoryDBNodeTag(nid, tid, ident);
126-
127- if(this.isEnabledNetDB){
128- s = this.syncPHPURL + "?action=addnode";
129- s += "&nid=" + encodeURIComponent(nid);
130- s += "&tid=" + encodeURIComponent(tid);
131- s += "&ident=" + encodeURIComponent(ident);
132- r = this.sendRequestSync("GET", s, null);
133- console.log(r);
134- }
108+ // エラー発生時はundefinedを返す。
109+ this.refreshNodeInternal(ident, tid, nid, true);
135110 },
136- addNode: function(ident, tid, nid){
137- // Nodeを追加し、データベースにも反映し、可能ならばネットワークにも反映させる
138- // nid(nodeid)は省略可能で、省略時は新たなUUIDが自動的に付与される
139- // tid(typeid)も省略可能で、省略時はNullUUIDが付与される。
140- // 戻り値はMemoryDBNodeTagインスタンス
141- // すでに同じnodeidのNodeが存在している場合はundefinedを返しデータベースへの変更は行われない。
111+ refreshNodeInternal: function(ident, tid, nid, enableSync){
112+ // 基本的にローカルデータのみ変更
113+ // enableSync == trueでネットワーク同期する
142114 var t, s, r;
143- if(!ident){
144- return undefined;
145- }
146115 if(!tid){
147116 tid = this.UUID_Null;
148117 }
@@ -152,17 +121,24 @@ MemoryDB.prototype = {
152121 // 存在確認
153122 t = this.getNodeFromUUID(nid);
154123 if(t){
124+ // 変更
155125 return undefined;
126+ } else{
127+ // 新規作成
128+ t = new MemoryDBNodeTag(nid, tid, ident);
129+ this.root.push(t);
130+ this.nodeList.push(t);
131+ if(enableSync && this.isEnabledNetDB){
132+ s = this.syncPHPURL + "?action=addnode";
133+ s += "&nid=" + encodeURIComponent(nid);
134+ s += "&tid=" + encodeURIComponent(tid);
135+ s += "&ident=" + encodeURIComponent(ident);
136+ r = this.sendRequestSync("GET", s, null);
137+ console.log(r);
138+ }
156139 }
157- t = new MemoryDBNodeTag(nid, tid, ident);
158-
159- if(this.isEnabledNetDB){
160- s = this.syncPHPURL + "?action=addnode";
161- s += "&nid=" + encodeURIComponent(nid);
162- s += "&tid=" + encodeURIComponent(tid);
163- s += "&ident=" + encodeURIComponent(ident);
164- r = this.sendRequestSync("GET", s, null);
165- console.log(r);
140+ if(this.callback_refreshedNode){
141+ this.callback_refreshedNode(t);
166142 }
167143 },
168144 createUUID: function(){
@@ -182,7 +158,6 @@ function MemoryDBNodeTag(nodeid, typeid, identifier){
182158 this.typeid = typeid;
183159 this.identifier = identifier;
184160 //
185-
186161 }
187162 MemoryDBNodeTag.prototype = {
188163
--- a/memdb/memdb.php
+++ b/memdb/memdb.php
@@ -21,7 +21,7 @@ define("QUERY_CREATE_TABLE_Node", "
2121 create table Node (
2222 nodeid binary(16) primary key,
2323 typeid binary(16) not null,
24- identifier text character set utf8 not null,
24+ identifier text character set utf8,
2525 modtimestamp bigint
2626 )
2727 ");
--- a/mgcanvas/index.html
+++ b/mgcanvas/index.html
@@ -22,11 +22,8 @@ var memdb;
2222
2323 onload = function() {
2424 memdb = new MemoryDB("./../memdb/memdb.php");
25- memdb.syncDB();
26-
27- var c = document.getElementById("mainCanvas");
28- mgmain = new MGCanvas(c);
29- mgmain.loadGraphFromMemoryDB(memdb);
25+ mgmain = new MGCanvas(document.getElementById("mainCanvas"));
26+ mgmain.setSourceMemoryDB(memdb);
3027 }
3128 </script>
3229 </head>
@@ -46,7 +43,7 @@ onload = function() {
4643 identifier:<input id="identBox" type="text"></input>
4744 <br />
4845 <button onclick="mgmain.setIdentifierForSelectedNode(getElementById('identBox').value);">setNodeIdent</button>
49-<button onclick="memdb.addNode(getElementById('identBox').value);">addNode</button>
46+<button onclick="memdb.refreshNode(getElementById('identBox').value);">addNode</button>
5047
5148 </body>
5249 </html>
\ No newline at end of file
--- a/mgcanvas/mgcanvas.js
+++ b/mgcanvas/mgcanvas.js
@@ -12,6 +12,9 @@ function MGCanvas(canvasDOMObj){
1212 this.edgeList = new Array();
1313 this.selectedNode = null;
1414 this.selectedEdge = null;
15+ this.srcMemoryDB = null;
16+ this.srcMemoryDBSyncPerTick = 60;
17+ this.srcMemoryDBSyncCount = this.srcMemoryDBSyncPerTick;
1518
1619 var that = this;
1720 window.addEventListener('keydown', function(event){
@@ -79,22 +82,13 @@ MGCanvas.prototype = {
7982 this.edgeList.push(new MGEdge(this, p[i][2], n(p[i][0]), n(p[i][1])));
8083 }
8184 },
82- loadGraphFromMemoryDB: function(mdb){
83- var a, l, t, u, m, e, f;
84- a = mdb.nodeList;
85- l = a.length;
86- //m = 12 * l;
87- t = new MGNode(this, "Node");
88- this.nodeList.push(t);
89- f = function(){};
90- for(var i = 0; i < l; i++){
91- u = new MGNode(this, a[i].identifier);
92- this.nodeList.push(u);
93- //e = new MGEdge(this, null, t, u);
94- //this.edgeList.push(e);
95- //t = u;
96- //e.freeLength = m;
97- //e.draw = f;
85+ setSourceMemoryDB: function(mdb){
86+ var that = this;
87+ this.srcMemoryDB = mdb;
88+ mdb.callback_refreshedNode = function(t){
89+ var n;
90+ n = new MGNode(that, t.identifier);
91+ that.nodeList.push(n);
9892 }
9993 },
10094 bringToCenter: function(){
@@ -158,11 +152,19 @@ MGCanvas.prototype = {
158152 var nTemp;
159153
160154 this.tickCount++;
155+ this.srcMemoryDBSyncCount++;
161156
162157 //
163- // AutomaticTracking
158+ // Sync
164159 //
160+ if(this.srcMemoryDB && this.srcMemoryDBSyncCount > this.srcMemoryDBSyncPerTick){
161+ this.srcMemoryDB.syncDB();
162+ this.srcMemoryDBSyncCount = 0;
163+ }
165164
165+ //
166+ // AutomaticTracking
167+ //
166168 if(this.isEnabledAutomaticTracking && (this.tickCount % 30 == 0)){
167169 this.bringInScreen();
168170 }
旧リポジトリブラウザで表示