Skip to content

Commit 8357e6c

Browse files
committed
add MessagePort
1 parent 52a94dd commit 8357e6c

File tree

8 files changed

+71
-8
lines changed

8 files changed

+71
-8
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import Effect (Effect)
1515
import Control.Monad.Except (runExcept)
1616
import Foreign (readInt)
1717
import Web.Worker.GlobalScope (postMessage, onMessage)
18-
import Web.Worker.Event (data_)
18+
import Web.Worker.MessageEvent (data_)
1919
import Effect.Console (log)
2020
2121
main :: Effect Unit
@@ -39,7 +39,7 @@ import Foreign (readInt)
3939
import Effect (Effect)
4040
import Effect.Console (log)
4141
import Web.Worker.Worker (defaultWorkerOptions, new, postMessage, onMessage)
42-
import Web.Worker.Event (data_)
42+
import Web.Worker.MessageEvent (data_)
4343
4444
main :: Effect Unit
4545
main = do

src/Web/Worker/GlobalScope.purs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import Effect (Effect)
1414
import Web.Worker.Navigator (Navigator)
1515
import Web.Worker.Location (Location)
1616
import Web.Event.Event (Event)
17-
import Web.Worker.Event (MessageEvent)
17+
import Web.Worker.MessageEvent (MessageEvent)
1818

1919
foreign import location :: Effect Location
2020

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,8 @@ export function origin(ev) {
88

99
export function lastEventId(ev) {
1010
return ev.lastEventId;
11+
}
12+
13+
export function ports(ev) {
14+
return ev.ports;
1115
}
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,22 @@
1-
module Web.Worker.Event where
1+
module Web.Worker.MessageEvent
2+
( data_
3+
, lastEventId
4+
, origin
5+
, module Types
6+
)
7+
where
28

39
import Foreign (Foreign)
4-
5-
foreign import data MessageEvent :: Type
10+
import Web.Worker.Types (MessageEvent, MessagePort)
11+
import Web.Worker.Types (MessageEvent) as Types
612

713
foreign import data_ :: MessageEvent -> Foreign
814

915
foreign import origin :: MessageEvent -> String
1016

1117
foreign import lastEventId :: MessageEvent -> String
1218

19+
foreign import ports :: MessageEvent -> Array MessagePort
20+
1321
-- source :: WindwProxy | MessagePort | ServiceWorker
1422
-- ports :: Array MessagePort

src/Web/Worker/MessagePort.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
export function close(port) {
2+
return function () {
3+
port.close();
4+
};
5+
}
6+
7+
export function start(port) {
8+
return function () {
9+
port.start();
10+
};
11+
}
12+
13+
export function onMessage(f) {
14+
return function (port) {
15+
return function () {
16+
port.onmessage = function (ev) {
17+
f(ev)();
18+
};
19+
};
20+
};
21+
}
22+
23+
export function onMessageError(f) {
24+
return function (port) {
25+
return function () {
26+
port.onmessageerror = function (ev) {
27+
f(ev)();
28+
};
29+
};
30+
};
31+
}

src/Web/Worker/MessagePort.purs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
module Web.Worker.MessagePort
2+
( close
3+
, module Types
4+
, onMessage
5+
, onMessageError
6+
)
7+
where
8+
9+
import Prelude
10+
import Effect (Effect)
11+
import Web.Worker.Types (MessageEvent, MessagePort)
12+
import Web.Worker.Types (MessagePort) as Types
13+
14+
foreign import onMessage :: (MessageEvent -> Effect Unit) -> MessagePort -> Effect Unit
15+
foreign import onMessageError :: (MessageEvent -> Effect Unit) -> MessagePort -> Effect Unit
16+
foreign import close :: MessagePort -> Effect Unit
17+
foreign import start :: MessagePort -> Effect Unit

src/Web/Worker/Types.purs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
module Web.Worker.Types where
2+
3+
foreign import data MessagePort :: Type
4+
foreign import data MessageEvent :: Type

src/Web/Worker/Worker.purs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@ import Unsafe.Coerce (unsafeCoerce)
2121
import Web.Event.Event (Event)
2222
import Web.Event.EventTarget (EventTarget)
2323
import Web.Internal.FFI (unsafeReadProtoTagged)
24-
import Web.Worker.Event (MessageEvent)
25-
24+
import Web.Worker.MessageEvent (MessageEvent)
2625

2726
foreign import data Worker :: Type
2827

0 commit comments

Comments
 (0)