on master help sign in
Merge aa-clib-appcallbacks
95b40f1Hamish Mackenzie
jsaddle-clib/cbits/include/jsaddle.h+4
@@ -8,4 +8,8 @@ typedef struct native_callbacks {
8 char * jsaddleHtmlData;
8 char * jsaddleHtmlData;
9} native_callbacks;
9} native_callbacks;
10
10
11+typedef struct app_callbacks {
12+ void (* firebaseInstanceIdService_sendRegistrationToServer) (char *);
13+} app_callbacks;
14+
11#endif
15#endif
jsaddle-clib/default.nix+2−2
@@ -1,9 +1,9 @@
1−{ mkDerivation, aeson, base, bytestring, jsaddle, stdenv }:
1+{ mkDerivation, aeson, base, bytestring, data-default, jsaddle, stdenv, text }:
2mkDerivation {
2mkDerivation {
3 pname = "jsaddle-clib";
3 pname = "jsaddle-clib";
4 version = "0.8.2.0";
4 version = "0.8.2.0";
5 src = builtins.filterSource (path: type: !(builtins.elem (baseNameOf path) [ ".git" "dist" ])) ./.;
5 src = builtins.filterSource (path: type: !(builtins.elem (baseNameOf path) [ ".git" "dist" ])) ./.;
6− libraryHaskellDepends = [ aeson base bytestring jsaddle ];
6+ libraryHaskellDepends = [ aeson base bytestring data-default jsaddle text ];
7 description = "Interface for JavaScript that works with GHCJS and GHC";
7 description = "Interface for JavaScript that works with GHCJS and GHC";
8 license = stdenv.lib.licenses.mit;
8 license = stdenv.lib.licenses.mit;
9}
9}
jsaddle-clib/jsaddle-clib.cabal+2
@@ -25,6 +25,8 @@ library
25 base <5,
25 base <5,
26 bytestring >=0.10.6.0 && <0.11,
26 bytestring >=0.10.6.0 && <0.11,
27 jsaddle >= 0.9.0.0 && <0.10
27 jsaddle >= 0.9.0.0 && <0.10
28+ data-default,
29+ text
28 default-language: Haskell2010
30 default-language: Haskell2010
29 hs-source-dirs: src
31 hs-source-dirs: src
30 Include-dirs: cbits/include
32 Include-dirs: cbits/include
jsaddle-clib/src-ghc/Language/Javascript/JSaddle/CLib.hs+28−4
@@ -2,19 +2,27 @@
2module Language.Javascript.JSaddle.CLib
2module Language.Javascript.JSaddle.CLib
3 ( jsaddleInit
3 ( jsaddleInit
4 , NativeCallbacks (..)
4 , NativeCallbacks (..)
5+ , AppCallbacks (..)
6+ , AppConfig (..)
7+ , pokeAppConfig
8+ , appConfigToAppCallbacks
5 ) where
9 ) where
6
10
7import Control.Monad (void)
11import Control.Monad (void)
8import Control.Concurrent (forkIO)
12import Control.Concurrent (forkIO)
9
13
10−import Data.Monoid ((<>))
14+import Data.Aeson (encode, decode)
11import Data.ByteString (useAsCString, packCString)
15import Data.ByteString (useAsCString, packCString)
12−import Data.ByteString.Lazy (ByteString, toStrict, fromStrict)
13import Data.ByteString.Char8 (unpack)
16import Data.ByteString.Char8 (unpack)
14−import Data.Aeson (encode, decode)
17+import Data.ByteString.Lazy (ByteString, toStrict, fromStrict)
18+import Data.Default (def, Default)
19+import Data.Monoid ((<>))
20+import Data.Text (Text)
21+import qualified Data.Text as T
15
22
16−import Foreign.C.String (CString, newCString)
23+import Foreign.C.String (CString, newCString, peekCString)
17import Foreign.Ptr (FunPtr, Ptr)
24import Foreign.Ptr (FunPtr, Ptr)
25+import Foreign.Storable (poke)
18import Foreign.Marshal.Utils (new)
26import Foreign.Marshal.Utils (new)
19
27
20import Language.Javascript.JSaddle (JSM)
28import Language.Javascript.JSaddle (JSM)
@@ -53,6 +61,22 @@ jsaddleInit jsm evaluateJavascriptAsyncPtr = do
53 , _nativeCallbacks_jsaddleHtmlData = jsaddleHtmlPtr
61 , _nativeCallbacks_jsaddleHtmlData = jsaddleHtmlPtr
54 }
62 }
55
63
64+data AppConfig = AppConfig
65+ { _appConfig_firebaseInstanceIdServiceSendRegistrationToServer :: Text -> IO ()
66+ }
67+
68+instance Default AppConfig where
69+ def = AppConfig (\_ -> return ())
70+
71+appConfigToAppCallbacks :: AppConfig -> IO AppCallbacks
72+appConfigToAppCallbacks (AppConfig firebaseReg) = do
73+ firebaseRegPtr <- wrapMessageCallback $ \token ->
74+ firebaseReg =<< (T.pack <$> peekCString token)
75+ return $ AppCallbacks firebaseRegPtr
76+
77+pokeAppConfig :: Ptr AppCallbacks -> AppConfig -> IO ()
78+pokeAppConfig ptr cfg = poke ptr =<< appConfigToAppCallbacks cfg
79+
56jsaddleJs :: ByteString
80jsaddleJs :: ByteString
57jsaddleJs = ghcjsHelpers <> "\
81jsaddleJs = ghcjsHelpers <> "\
58 \runJSaddleBatch = (function() {\n\
82 \runJSaddleBatch = (function() {\n\
jsaddle-clib/src/Language/Javascript/JSaddle/CLib/Internal.hsc+12
@@ -26,3 +26,15 @@ instance Storable NativeCallbacks where
26 <*> #{peek native_callbacks, jsaddleResult} p
26 <*> #{peek native_callbacks, jsaddleResult} p
27 <*> #{peek native_callbacks, jsaddleJsData} p
27 <*> #{peek native_callbacks, jsaddleJsData} p
28 <*> #{peek native_callbacks, jsaddleHtmlData} p
28 <*> #{peek native_callbacks, jsaddleHtmlData} p
29+
30+data AppCallbacks = AppCallbacks
31+ { _appCallbacks_firebaseInstanceIdService_sendRegistrationToServer :: !(FunPtr (CString -> IO ()))
32+ }
33+
34+instance Storable AppCallbacks where
35+ sizeOf _ = #{size app_callbacks}
36+ alignment _ = #{alignment app_callbacks}
37+ poke p nc = do
38+ #{poke app_callbacks, firebaseInstanceIdService_sendRegistrationToServer} p $ _appCallbacks_firebaseInstanceIdService_sendRegistrationToServer nc
39+ peek p = AppCallbacks
40+ <$> #{peek app_callbacks, firebaseInstanceIdService_sendRegistrationToServer} p