Maxim Sokhatsky 10 лет назад
Родитель
Сommit
1b28fb1d9b

+ 12 - 4
priv/web/apps/n2o_sample/priv/static/spa/index.htm

@@ -8,10 +8,18 @@
 <div id="history"></div>
 <input id="message" type="text">
 <button id="send" type="button">Chat</button>
-<script>var transition = {pid: '', port:'8000'}</script>
-<script src='/n2o/bullet.js' type='text/javascript' charset='utf-8'></script>
-<script src='/n2o/n2o.js' type='text/javascript' charset='utf-8'></script>
-<script src='/n2o/bert.js' type='text/javascript' charset='utf-8'></script>
+    <script src='/n2o/protocols/bert.js'></script>
+    <script src='/n2o/protocols/binary.js'></script>
+    <script src='/n2o/protocols/client.js'></script>
+    <script src='/n2o/protocols/nitrogen.js'></script>
+    <script src='/n2o/bullet.js'></script>
+    <script src='/n2o/utf8.js'></script>
+    <script src='/n2o/template.js'></script>
+    <script src='/n2o/n2o.js'></script>
+<script>
+  var transition = {pid: '', port:'8000'}; 
+      protos = [ $client ];
+      N2O_start();</script>
 </script><div id="n2ostatus"></div>
 </body>
 </html>

+ 10 - 4
priv/web/apps/n2o_sample/priv/templates/index.html

@@ -7,9 +7,15 @@
 <body>
 {{body}}
 <script>{{script}}</script>
-<script src='/n2o/bert.js' type='text/javascript' charset='utf-8'></script>
-<script src='/n2o/bullet.js' type='text/javascript' charset='utf-8'></script>
-<script src='/n2o/n2o.js' type='text/javascript' charset='utf-8'></script>
-<div id="n2ostatus"></div>
+    <script src='/n2o/protocols/bert.js'></script>
+    <script src='/n2o/protocols/binary.js'></script>
+    <script src='/n2o/protocols/client.js'></script>
+    <script src='/n2o/protocols/nitrogen.js'></script>
+    <script src='/n2o/bullet.js'></script>
+    <script src='/n2o/utf8.js'></script>
+    <script src='/n2o/template.js'></script>
+    <script src='/n2o/n2o.js'></script>
+<script>protos = [ $client ]; N2O_start();
+</script><div id="n2ostatus"></div>
 </body>
 </html>

+ 2 - 2
priv/web/apps/n2o_sample/src/routes.erl

@@ -5,9 +5,9 @@
 
 finish(State, Ctx) -> {ok, State, Ctx}.
 init(State, Ctx) -> 
-    Path = wf:path(Ctx#context.req),
+    Path = wf:path(Ctx#cx.req),
     wf:info(?MODULE,"Route: ~p~n",[Path]),
-    {ok, State, Ctx#context{path=Path,module=route_prefix(Path)}}.
+    {ok, State, Ctx#cx{path=Path,module=route_prefix(Path)}}.
 
 route_prefix(<<"/ws/",P/binary>>) -> route(P);
 route_prefix(<<"/",P/binary>>) -> route(P);

+ 1 - 1
rebar.config

@@ -1,2 +1,2 @@
 {deps_dir,"deps"}.
-{deps, [{sh, ".*", {git, "git://github.com/synrc/sh", "HEAD"}}]}.
+{deps, [{sh, ".*", {git, "git://github.com/synrc/sh", {tag, "0.9"}}}]}.

+ 2 - 1
src/compile/mad_erl.erl

@@ -9,8 +9,9 @@ compile(File,Inc,Bin,Opt) ->
     BeamFile = erl_to_beam(Bin, File),
     Compiled = mad_compile:is_compiled(BeamFile, File),
     if  Compiled =:= false ->
-        io:format("Compiling ~s~n\r", [File]),
         Opts1 = ?COMPILE_OPTS(Inc, Bin, Opt),
+%        io:format("Compiling ~s Opts ~p~n\r", [File,Opts1]),
+        io:format("Compiling ~s~n\r", [File]),
         compile:file(File, Opts1),
         ok;
     true -> ok end.

+ 13 - 0
src/compile/mad_leex.erl

@@ -0,0 +1,13 @@
+-module(mad_leex).
+-copyright('Sina Samavati').
+-compile(export_all).
+
+xrl_to_erl(F) -> filename:join(filename:dirname(F),filename:basename(F, ".xrl")) ++ ".erl".
+
+compile(File,Inc,Bin,Opt) ->
+    ErlFile = xrl_to_erl(File),
+    Compiled = mad_compile:is_compiled(ErlFile,File),
+    if Compiled == false ->
+        leex:file(File),
+        mad_erl:compile(ErlFile,Inc,Bin,Opt); true -> ok end.
+

+ 4 - 0
src/compile/mad_none.erl

@@ -0,0 +1,4 @@
+-module(mad_none).
+-compile(export_all).
+
+compile(_,_,_,_) -> ok.

+ 0 - 2
src/compile/mad_script.erl

@@ -9,5 +9,3 @@ script(ConfigFile, Conf, _) ->
         {ok, Out} -> Out;
         {error, _} -> Conf
     end.
-
-compile(_,_,_,_) -> ok.

+ 4 - 0
src/mad.erl

@@ -57,6 +57,10 @@ bundle(_Cwd,_ConfigFileName,_Config,Params) ->
     Name = case Params of [] -> mad_utils:cwd(); E -> E end,
     mad_bundle:main(filename:basename(Name)).
 
+up(_Cwd,_ConfigFileName,_Config,Params) ->
+    io:format("Up Params: ~p~n",[Params]),
+    mad_deps:up(Params).
+
 app(_Cwd,_ConfigFileName,_Config,Params) ->
     io:format("Create App Params: ~p~n",[Params]),
     mad_create:app(Params).

+ 4 - 1
src/mad_compile.erl

@@ -24,8 +24,10 @@ dep(Cwd, _Conf, ConfigFile, Name) ->
     deps(Cwd, Conf, ConfigFile, mad_utils:get_value(deps, Conf1, [])),
 
     SrcDir = filename:join([mad_utils:src(DepPath)]),
+%    io:format("DepPath ==> ~p~n\r",[DepPath]),
 
     Files = files(SrcDir,".yrl") ++ 
+            files(SrcDir,".xrl") ++ 
             files(SrcDir,".erl") ++ % comment this to build with erlc/1
             files(SrcDir,".app.src"),
 
@@ -56,8 +58,9 @@ compile_fun(Inc,Bin,Opt) -> fun(File) -> (module(filetype(File))):compile(File,I
 module("erl") -> mad_erl;
 module("erl.src") -> mad_utils;
 module("yrl") -> mad_yecc;
+module("xrl") -> mad_leex;
 module("app.src") -> mad_app;
-module(_) -> mad_script.
+module(_) -> mad_none.
 
 filetype(Path) -> string:join(tl(string:tokens(filename:basename(Path), ".")), ".").
 files(Dir,Ext) -> filelib:fold_files(Dir, Ext, true, fun(F, Acc) -> [F|Acc] end, []).

+ 10 - 0
src/mad_deps.erl

@@ -2,6 +2,16 @@
 -copyright('Sina Samavati').
 -compile(export_all).
 
+up(Params) ->
+    List = case Params of
+                [] -> [ F || F<- mad_repl:wildcards(["deps/*"]), filelib:is_dir(F) ];
+                Apps -> [ "deps/"++A || A <- Apps ] end,
+    os:cmd("git pull"),
+  [ begin
+    io:format("==> up: ~p~n", [F]),
+    os:cmd(io_lib:format("cd ~s && git pull",[F]))
+    end || F <- List ].
+
 fetch(_, _Config, _, []) -> ok;
 fetch(Cwd, Config, ConfigFile, [H|T]) when is_tuple(H) =:= false -> fetch(Cwd, Config, ConfigFile, T);
 fetch(Cwd, Config, ConfigFile, [H|T]) ->

+ 2 - 1
src/mad_plan.erl

@@ -26,7 +26,8 @@ orderapps() ->
               Apps = proplists:get_value(applications,Opt,[]),
               [ { A,Name} || A <- Apps ];
          {error,_} -> skip
-    end || F <- filelib:wildcard("{apps,deps}/*/ebin/*.app"), not filelib:is_dir(F) ]),
+    end || F <- filelib:wildcard("{apps,deps}/*/ebin/*.app")  ++ 
+                filelib:wildcard("ebin/*.app"), not filelib:is_dir(F) ]),
     {ok,Sorted} = sort(Pairs),
     Sorted.
 

+ 1 - 1
src/mad_release.erl

@@ -13,7 +13,7 @@ release(Name,Apps) ->
 main([]) -> main(["sample"]);
 main(Params) ->
     [N|_] = Params,
-    Apps = [ filename:basename(F) || F <- filelib:wildcard("{apps,deps}/*"),  filelib:is_dir(F)],
+    Apps = mad_plan:orderapps(), %[ filename:basename(F) || F <- filelib:wildcard("{apps,deps}/*"),  filelib:is_dir(F)],
     release(N,Apps),
     {_,Status,X} = sh:run("relx",[],binary,".",[]),
     case Status == 0 of

+ 6 - 2
src/mad_repl.erl

@@ -2,8 +2,9 @@
 -copyright('Maxim Sokhatsky').
 -compile(export_all).
 
-disabled() -> [wx,webtool,ssl,runtime_tools,public_key,observer,inets,asn1,et,eunit,hipe].
-system() -> [compiler,syntax_tools,sasl,tools,mnesia,reltool,xmerl,crypto,kernel,stdlib].
+disabled() -> [].
+system() -> [compiler,syntax_tools,sasl,tools,mnesia,reltool,xmerl,crypto,kernel,stdlib,
+             wx,webtool,ssl,runtime_tools,public_key,observer,inets,asn1,et,eunit,hipe].
 
 local_app() -> 
     case filename:basename(filelib:wildcard("ebin/*.app"),".app") of
@@ -69,6 +70,9 @@ main(Params) ->
     io:format("Applications: ~p\n\r",[applist()]),
     Config = load_config(),
 
+    % trick user_drv into starting group.erl's output handler
+    unregister(user),
+
     case os:type() of
          {win32,nt} -> shell:start();
                   _ -> user_drv:start() end,

+ 1 - 0
src/mad_utils.erl

@@ -67,6 +67,7 @@ to_atom(X) -> X.
 atomize("static") -> static;
 atomize("com"++_) -> compile;
 atomize("rep"++_) -> repl;
+atomize("up")     -> up;
 atomize("bun"++_) -> bundle;
 atomize("dep"++_) -> deps;
 atomize("pla"++_) -> plan;