2020-05-02 21:55:20 +00:00
|
|
|
// We need to import the CSS so that webpack will load it.
|
|
|
|
// The MiniCssExtractPlugin is used to separate it out into
|
|
|
|
// its own CSS file.
|
|
|
|
import "../css/app.scss"
|
|
|
|
|
|
|
|
// webpack automatically bundles all modules in your
|
|
|
|
// entry points. Those entry points can be configured
|
|
|
|
// in "webpack.config.js".
|
|
|
|
//
|
|
|
|
// Import deps with the dep name or local files with a relative path, for example:
|
|
|
|
//
|
|
|
|
// import {Socket} from "phoenix"
|
|
|
|
// import socket from "./socket"
|
|
|
|
//
|
|
|
|
import "phoenix_html"
|
|
|
|
|
2020-05-06 05:30:43 +00:00
|
|
|
import { Socket, Presence } from "phoenix"
|
|
|
|
import { Elm } from "../src/Main.elm"
|
|
|
|
import uuid4 from "uuid4"
|
|
|
|
|
|
|
|
var player_id = uuid4()
|
2020-05-07 02:02:44 +00:00
|
|
|
var room_id = uuid4()
|
2020-05-06 05:30:43 +00:00
|
|
|
|
|
|
|
var socket = new Socket("/socket", {params: {player_id: player_id}})
|
|
|
|
socket.connect()
|
2020-05-02 21:55:20 +00:00
|
|
|
|
|
|
|
var app = Elm.Main.init({
|
2020-05-06 05:30:43 +00:00
|
|
|
node: document.getElementById("elm-main"),
|
2020-05-07 02:02:44 +00:00
|
|
|
flags: {
|
2020-05-08 04:34:42 +00:00
|
|
|
player: player_id,
|
2020-05-07 02:02:44 +00:00
|
|
|
room: room_id
|
|
|
|
}
|
2020-05-06 05:30:43 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
app.ports.joinRoom.subscribe(options => {
|
2020-05-07 00:03:31 +00:00
|
|
|
let channel = socket.channel("room:" + options.room, {})
|
2020-05-09 06:06:30 +00:00
|
|
|
|
|
|
|
// Presence events
|
2020-05-06 05:30:43 +00:00
|
|
|
let presences = {}
|
|
|
|
channel.on("presence_state", state => {
|
2020-05-07 00:03:31 +00:00
|
|
|
console.log("presence state", state)
|
2020-05-06 05:30:43 +00:00
|
|
|
presences = Presence.syncState(presences, state)
|
|
|
|
app.ports.gotPresence.send(presences)
|
|
|
|
})
|
|
|
|
channel.on("presence_diff", diff => {
|
2020-05-07 00:03:31 +00:00
|
|
|
console.log("presence diff", diff)
|
2020-05-06 05:30:43 +00:00
|
|
|
presences = Presence.syncDiff(presences, diff)
|
|
|
|
app.ports.gotPresence.send(presences)
|
|
|
|
})
|
2020-05-09 06:06:30 +00:00
|
|
|
|
|
|
|
// Incoming room events
|
|
|
|
const handle = (type) => (data) =>
|
|
|
|
app.ports.roomEvents.send({
|
|
|
|
"type": type,
|
|
|
|
"data": data
|
|
|
|
})
|
|
|
|
["vote", "reset"]
|
|
|
|
.forEach(event => channel.on(event, handle(event)))
|
|
|
|
|
|
|
|
// Outgoing room events
|
|
|
|
app.ports.roomActions.subscribe(action => {
|
|
|
|
channel.push(action.type, action.data)
|
2020-05-08 05:57:55 +00:00
|
|
|
})
|
2020-05-09 06:06:30 +00:00
|
|
|
|
2020-05-07 00:03:31 +00:00
|
|
|
channel.join()
|
|
|
|
.receive("ok", resp => {
|
|
|
|
console.log("Joined successfully", resp);
|
|
|
|
})
|
|
|
|
.receive("error", resp => { console.log("Unable to join", resp) })
|
|
|
|
|
2020-05-06 05:30:43 +00:00
|
|
|
})
|