Browse Source

new skaffoldings

Namdak Tonpa 6 years ago
parent
commit
b749b86220

+ 1 - 1
include/mad.hrl

@@ -1 +1 @@
--define(VERSION,"4e7f3a").
+-define(VERSION,"7190ee").

BIN
mad


+ 1 - 1
priv/mqtt/priv/static/login.htm

@@ -28,7 +28,7 @@
     <script src='/n2o/n2o.js?v=11'></script>
     <script>host = location.hostname === 'review.n2o.space' ? 'ns.synrc.com' : location.hostname; port = 8000;</script>
     <script src='/n2o/ftp.js?v=11'></script>
-    <script src='/n2o/nitrogen.js?v=11'></script>
+    <script src='/n2o/nitro.js?v=11'></script>
     <script src='/n2o/mq.js?v=11'></script>
     <script> qi('pass').value = module == "login" ? "" : module; </script>
 </body>

+ 11 - 6
priv/mqtt/priv/static/n2o/ftp.js

@@ -1,11 +1,16 @@
 
 // N2O File Transfer Protocol
 
+function uuid() {
+  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
+  var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8); return v.toString(16); });
+}
+
 var ftp = {
     queue: [],
     init: function (file) {
         var item = {
-            id: performance.now().toString(),
+            id: uuid(),
             status: 'init',
             autostart: ftp.autostart || false,
             name: ftp.filename || file.name,
@@ -50,7 +55,7 @@ var ftp = {
         this.reader.onloadend = function (e) {
             var res = e.target, data = e.target.result;
             if (res.readyState === FileReader.DONE && data.byteLength >= 0) {
-                console.log(item);
+//                console.log(item);
                 ftp.send(item, data);
             }
         };
@@ -61,20 +66,20 @@ var ftp = {
 };
 
 $file.do = function (rsp) {
-    var offset = rsp.v[6].v, block = rsp.v[7].v, status = utf8_dec(rsp.v[9].v);
+    var offset = rsp.v[6].v, block = rsp.v[7].v, status = utf8_arr(rsp.v[9].v);
     switch (status) {
         case 'init':
             if(block == 1) return;
-            var item = ftp.item(utf8_dec(rsp.v[1].v)) || '0';
+            var item = ftp.item(utf8_arr(rsp.v[1].v)) || '0';
             item.offset = offset;
             item.block = block;
-            item.name = utf8_dec(rsp.v[3].v);
+            item.name = utf8_arr(rsp.v[3].v);
             item.status = undefined;
             if (item.autostart) ftp.start(item.id);
             break;
         case 'send':
             var x = qi('ftp_status'); if (x) x.innerHTML = offset;
-            var item = ftp.item(utf8_dec(rsp.v[1].v));
+            var item = ftp.item(utf8_arr(rsp.v[1].v));
             item.offset = offset;
             item.block = block;
             (block > 0 && ftp.active) ? ftp.send_slice(item) : ftp.stop(item.id)

+ 9 - 8
priv/mqtt/src/index.erl

@@ -12,37 +12,38 @@ event(init) ->
     nitro:update(logout,  #button { id=logout,  body="Logout "  ++ n2o:user(),       postback=logout}),
     nitro:update(send,    #button { id=send,    body="Chat",       source=[message], postback=chat}),
     nitro:update(heading, #h2     { id=heading, body=Room}),
-    nitro:update(upload,  #upload { id=upload   }),
+    nitro:update(upload,  #upload { id=attach }),
     nitro:wire("mqtt.subscribe('room/"++Room++"',subscribeOptions);"),
     Topic = iolist_to_binary(["events/1/",Node,"/index/anon/",Id,"/",Token]),
-    n2o:send_reply(<<>>, 2, Topic, term_to_binary(#client{data={Room,list}})),
+    n2o_vnode:send_reply(<<>>, 2, Topic, term_to_binary(#client{data={Room,list}})),
     io:format("Room: ~p~n",[Room]),
     nitro:wire(#jq{target=message,method=[focus,select]});
 
 event(chat) ->
     User    = n2o:user(),
-    Message = n2o:q(message),
+    Message = nitro:q(message),
     Room    = n2o:session(room),
     io:format("Chat pressed: ~p\r~n",[{Room,Message,User}]),
     #cx{session=ClientId} = get(context),
     kvs:add(#entry{id=kvs:next_id("entry",1),
                    from=n2o:user(),feed_id={room,Room},media=Message}),
     nitro:insert_top(history, nitro:jse(message_view(User,Message))),
-    Actions = iolist_to_binary(n2o_nitro:render_actions(n2o:actions())),
+    Actions = iolist_to_binary(n2o_nitro:render_actions(nitro:actions())),
     M = term_to_binary({io,Actions,<<>>}),
-    io:format("Actions: ~p~n",[Actions]),
-    n2o:send_reply(ClientId, 2, iolist_to_binary([<<"room/">>,Room]), M);
+    n2o_vnode:send_reply(ClientId, 2, iolist_to_binary([<<"room/">>,Room]), M);
 
 event(#client{data={Room,list}}) ->
     [ nitro:insert_top(history, nitro:jse(message_view(E#entry.from,E#entry.media)))
       || E <- lists:reverse(kvs:entries(kvs:get(feed,{room,Room}),entry,30)) ];
 
+event(#ftp{sid=_Sid,filename=Filename,status={event,init}}=Data) ->
+    ok;
+
 event(#ftp{sid=_Sid,filename=Filename,status={event,stop}}=Data) ->
-    io:format("FTP Delivered ~p~n",[Data]),
     Name = hd(lists:reverse(string:tokens(nitro:to_list(Filename),"/"))),
     IP = application:get_env(sample,host,"127.0.0.1"),
     erlang:put(message,
-    nitro:render(#link{href=iolist_to_binary(["http://",IP,":8000/ftp/",
+    nitro:render(#link{href=iolist_to_binary(["http://",IP,":8000/n2o/",
                        nitro_conv:url_encode(Name)]),body=Name})),
     event(chat);
 

+ 2 - 2
priv/mqtt/src/login.erl

@@ -11,8 +11,8 @@ event(init) ->
                     postback=login,source=[user,pass]});
 
 event(login) ->
-    User = nitro:to_list(n2o:q(user)),
-    Room = nitro:to_list(n2o:q(pass)),
+    User = nitro:to_list(nitro:q(user)),
+    Room = nitro:to_list(nitro:q(pass)),
     n2o:user(User),
     n2o:session(room,Room),
     nitro:redirect("/index.htm");

+ 6 - 6
priv/mqtt/src/sample.erl

@@ -11,18 +11,18 @@ start(_,_) -> emqttd_access_control:register_mod(auth, n2o_auth, [[]], 10),
               supervisor:start_link({local,sample},sample,[]).
 stop(_)    -> ok.
 spec()     ->
-    Acceptors  = application:get_env(sample, acceptors,   4),
-    Clients    = application:get_env(sample, max_clients, 512),
-    Protocol   = application:get_env(sample, protocol,    http),
-    Port       = application:get_env(sample, port,        8000),
+    Acceptors  = application:get_env(?MODULE, acceptors,   4),
+    Clients    = application:get_env(?MODULE, max_clients, 512),
+    Protocol   = application:get_env(?MODULE, protocol,    http),
+    Port       = application:get_env(?MODULE, port,        8000),
     Options    = [{max_clients, Clients}, {acceptors, Acceptors}],
     Args       = [{mochiweb, handle, [docroot()]}],
     mochiweb:child_spec(Protocol, Port, Options, Args).
 
 docroot() ->
-    {file, Here} = code:is_loaded(sample),
+    {file, Here} = code:is_loaded(?MODULE),
     Dir = filename:dirname(filename:dirname(Here)),
-    Root = application:get_env(sample, "statics_root", "priv/static"),
+    Root = application:get_env(?MODULE, "statics_root", "priv/static"),
     filename:join([Dir, Root]).
 
 rebar3()   -> mad_repl:application_config(mad_repl:load_sysconfig()),

+ 1 - 0
priv/mqtt/sys.config

@@ -11,6 +11,7 @@
          {swift,"deps/sample/bpe/"}]},
    {n2o, [{pickler,n2o_secret},
           {app,sample},
+          {upload,"./priv/static/n2o"},
           {routes,routes},
           {cowboy_spec,cow2},
           {log_modules,[index,sample,login,n2o_vnode,n2o,n2o_auth,n2o_heart,n2o_nitro]},

+ 11 - 6
priv/web/priv/static/n2o/ftp.js

@@ -1,11 +1,16 @@
 
 // N2O File Transfer Protocol
 
+function uuid() {
+  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
+  var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8); return v.toString(16); });
+}
+
 var ftp = {
     queue: [],
     init: function (file) {
         var item = {
-            id: performance.now().toString(),
+            id: uuid(),
             status: 'init',
             autostart: ftp.autostart || false,
             name: ftp.filename || file.name,
@@ -50,7 +55,7 @@ var ftp = {
         this.reader.onloadend = function (e) {
             var res = e.target, data = e.target.result;
             if (res.readyState === FileReader.DONE && data.byteLength >= 0) {
-                console.log(item);
+//                console.log(item);
                 ftp.send(item, data);
             }
         };
@@ -61,20 +66,20 @@ var ftp = {
 };
 
 $file.do = function (rsp) {
-    var offset = rsp.v[6].v, block = rsp.v[7].v, status = utf8_dec(rsp.v[9].v);
+    var offset = rsp.v[6].v, block = rsp.v[7].v, status = utf8_arr(rsp.v[9].v);
     switch (status) {
         case 'init':
             if(block == 1) return;
-            var item = ftp.item(utf8_dec(rsp.v[1].v)) || '0';
+            var item = ftp.item(utf8_arr(rsp.v[1].v)) || '0';
             item.offset = offset;
             item.block = block;
-            item.name = utf8_dec(rsp.v[3].v);
+            item.name = utf8_arr(rsp.v[3].v);
             item.status = undefined;
             if (item.autostart) ftp.start(item.id);
             break;
         case 'send':
             var x = qi('ftp_status'); if (x) x.innerHTML = offset;
-            var item = ftp.item(utf8_dec(rsp.v[1].v));
+            var item = ftp.item(utf8_arr(rsp.v[1].v));
             item.offset = offset;
             item.block = block;
             (block > 0 && ftp.active) ? ftp.send_slice(item) : ftp.stop(item.id)

+ 12 - 9
priv/web/src/index.erl

@@ -7,20 +7,24 @@ body() -> [].
 main() -> [].
 event(init) ->
     Room = n2o:session(room),
+    io:format("Room: ~p~n",[Room]),
     n2o:reg({topic,Room}),
-    nitro:update(logout,#button{id=logout, body="Logout " ++ n2o:user(), postback=logout}),
-    nitro:update(heading, #h2     { id=heading, body=Room}),
-    nitro:update(upload,#upload{id=upload}),
-    nitro:update(send, #button{ id=send, body= <<"Chat">>, postback=chat, source=[message] }),
+    Sid = (get(context))#cx.session,
+    n2o:reg(Sid),
+    nitro:clear(history),
+    nitro:update(logout, #button{id=logout, body="Logout " ++ n2o:user(), postback=logout}),
+    nitro:update(heading, #h2{id=heading, body=Room}),
+    nitro:update(upload, #upload{}),
+    nitro:update(send, #button{id=send, body= <<"Chat">>, postback=chat, source=[message] }),
     [ event({client,{E#entry.from,E#entry.media}})
-      || E <- kvs:entries(kvs:get(feed,{room,Room}),entry,10) ];
+      || E <- lists:reverse(kvs:entries(kvs:get(feed,{room,Room}),entry,10)) ];
 event(logout) ->
     n2o:user([]),
     nitro:redirect("/app/login.htm");
 event(chat) ->
     User    = n2o:user(),
     Room    = n2o:session(room),
-    Message = n2o:q(message),
+    Message = nitro:q(message),
     n2o:info(?MODULE,"Chat pressed: ~p~n",[{Room,Message,User}]),
     kvs:add(#entry{id=kvs:next_id("entry",1),from=n2o:user(),
                    feed_id={room,Room},media=Message}),
@@ -31,10 +35,9 @@ event(#client{data={User,Message}}) ->
     DTL = #dtl{file="message",app=sample,bindings=[{user,User},{color,"gray"},{message,HTML}]},
     nitro:insert_top(history, nitro:jse(nitro:render(DTL)));
 event(#ftp{sid=Sid,filename=Filename,status={event,stop}}=Data) ->
-    n2o:info(?MODULE,"FTP Delivered ~p~n",[Data]),
     Name = hd(lists:reverse(string:tokens(nitro:to_list(Filename),"/"))),
-    erlang:put(message,nitro:render(#link{href=iolist_to_binary(["/app/",Sid,"/",nitro:url_encode(Name)]),body=Name})),
-    n2o:info(?MODULE,"Message ~p~n",[wf:q(message)]),
+    erlang:put(message,nitro:render(#link{href=iolist_to_binary(["/app/",Sid,"/",nitro_conv:url_encode(Name)]),body=Name})),
+    n2o:info(?MODULE,"FTP Delivered ~p~n",[Data]),
     event(chat);
 event(Event) ->
     n2o:info(?MODULE,"Event: ~p", [Event]),

+ 2 - 2
priv/web/src/login.erl

@@ -11,8 +11,8 @@ event(init) ->
       #button{id=loginButton,
               body="Login",postback=login,source=[user,pass]});
 event(login) ->
-    User = nitro:to_list(n2o:q(user)),
-    Room = nitro:to_list(n2o:q(pass)),
+    User = nitro:to_list(nitro:q(user)),
+    Room = nitro:to_list(nitro:q(pass)),
     n2o:user(User),
     n2o:session(room,Room),
     n2o:info(?MODULE,"User: ~p",[User]),

+ 4 - 2
priv/web/src/routes.erl

@@ -17,6 +17,8 @@ route_prefix(<<"/",P/binary>>) -> route(P);
 route_prefix(P) -> route(P).
 
 route(<<>>)              -> login;
-route(<<"app/index",_/binary>>) -> index;
-route(<<"app/login",_/binary>>) -> login;
+route(<<"index",_/binary>>) -> index;   % github static
+route(<<"login",_/binary>>) -> login;   % github static
+route(<<"app/index",_/binary>>) -> index; % priv static
+route(<<"app/login",_/binary>>) -> login; % priv static
 route(_) -> login.

+ 2 - 2
priv/web/src/sample.erl

@@ -17,5 +17,5 @@ port()     -> application:get_env(n2o,port,8001).
 env()      -> [ { env, [ { dispatch, n2o_cowboy:points() } ] } ].
 spec()     -> ranch:child_spec(http,100,ranch_tcp,[{port,port()}],cowboy_protocol,env()).
 rebar3()   -> {ok,[{_,R,L}]}=file:consult(code:lib_dir(sample)++"/ebin/sample.app"),
-              [ application:start(X) || X <- proplists:get_value(applications,L,[]) ],
-              application:start(R).
+              [ application:ensure_started(X) || X <- proplists:get_value(applications,L,[]) ],
+              application:ensure_started(R).