first version to work, for simplex

master
cheetah 4 years ago
parent 9a738d41cd
commit 6114644362

@ -1,14 +1,27 @@
const amqp = require('amqp-connection-manager') const amqp = require('amqp-connection-manager')
// Create a connetion manager // Create a connetion manager
const connection = amqp.connect(['amqp://daemon:daemon@10.13.37.37:5672/']) const connection = amqp.connect([
connection.on('connect', () => console.log('Connected!')) 'amqp://daemon:daemon@10.13.37.37:5672/'
connection.on('disconnect', err => console.log('Disconnected.', err.stack)) ])
connection.on('connect', () => console.log('Connected to AMQP.'))
connection.on('disconnect', err => console.log('Disconnected from AMQP.', err.stack))
const types = require('./types') // also initalized the CentralEventEmitter const types = require('./types') // also initializes the registries, if they havent been loaded
types.ConnectorRegistry.register(new types.Connectors.POCSAGConnector(connection)) // activate POCSAG types.ConnectorRegistry.register(new types.Connectors.POCSAGConnector(connection)) // activate POCSAG
types.ConnectorRegistry.transmit("pocsag", { types.DeviceRegistry.register(new types.devices.GenericPager())
types.DeviceRegistry.register(new types.devices.BirdySlim())
async function main() {
let id = await types.MessageManager.New('simple', { device: null, connectors: [
['pocsag', '133701A']
] }, "Hallo")
console.log('msgid', id)
await types.MessageManager.Deliver(id)
}
main()
/*types.ConnectorRegistry.transmit("pocsag", {
ric: '133701', ric: '133701',
body: "AAAA" body: "AAAAhh, ich\n\n\n\nHabe einen Sprung"
}) })*/

@ -17,6 +17,7 @@
}, },
"homepage": "https://github.com/smartpager-network/pocsag-daemon#readme", "homepage": "https://github.com/smartpager-network/pocsag-daemon#readme",
"dependencies": { "dependencies": {
"@supercharge/strings": "^1.18.0",
"amqp-connection-manager": "^3.2.2", "amqp-connection-manager": "^3.2.2",
"amqplib": "^0.7.0" "amqplib": "^0.7.0"
} }

@ -7,9 +7,9 @@ class ConnectorRegistry {
register(connector) { register(connector) {
this.Connectors[ connector.name ] = connector this.Connectors[ connector.name ] = connector
} }
transmit(name, message) { transmit(name, msg, params) {
if (!this.Connectors[ name ]) throw "not registred" if (!this.Connectors[ name ]) throw "not registred"
this.Connectors[ name ].transmitMessage(message) this.Connectors[ name ].transmitMessage(msg, params)
} }
} }
const registry = new ConnectorRegistry() const registry = new ConnectorRegistry()

@ -1,5 +1,3 @@
const { GenericPager, BirdySlim } = require("./devices")
class DeviceRegistry { class DeviceRegistry {
constructor() { constructor() {
this.Devices = {} this.Devices = {}
@ -9,6 +7,4 @@ class DeviceRegistry {
} }
} }
const registry = new DeviceRegistry() const registry = new DeviceRegistry()
registry.register(new GenericPager())
registry.register(new BirdySlim())
module.exports = registry module.exports = registry

@ -1,12 +1,12 @@
class Message { class Message {
ID
Type
RoutingMask
Content
constructor() { constructor() {
this.ID // get from MessageManager.New
this.Type // "simple" or "duplex"
this.RoutingMask // device=birdy&lora=devID:fPort&pocsag=133701B&dapnet=testID
this.Content // Blabla
this.Headers
} }
} }
module.exports = Message module.exports = Message

@ -0,0 +1,45 @@
const ConnectorRegistry = require("./ConnectorRegistry")
class MessageManager {
constructor() {
this.messages = {}
}
async New(type, routingParams, payload) {
if (!routingParams.device) {
routingParams.device = 'generic'
}
const msgObj = {
type,
routingParams,
payload,
}
await require("./DeviceRegistry").Devices[ routingParams.device ].formatTX(msgObj)
// console.log('finished msg obj is ', msgObj)
this.messages[ msgObj.id ]._routerData = this.messages[ msgObj.id ]._routerData || {
recvAck: false,
readAck: false,
response: false,
}
console.log('finished msg obj is ', msgObj)
return msgObj.id
}
async Deliver(msgId) {
const msg = this.messages[ msgId ]
// Throw error, because wtf
if (!msg._routerData) throw `No Routerdata attached to msg with id ${ msgId }`
// attach Start Delivery Unix Timestamp if not already there
if (!msg._routerData.startDelivery) msg._routerData.startDelivery = Math.floor(new Date().valueOf()/1e3)
if (!msg._routerData.deliveryLog) msg._routerData.deliveryLog = []
let logLength = msg._routerData.deliveryLog.length
if (logLength < msg.routingParams.connectors.length) {
let deliveryConnector = msg.routingParams.connectors[ logLength ]
console.log('delivering with ', deliveryConnector)
await ConnectorRegistry.transmit(deliveryConnector[0], msg, deliveryConnector.slice(1))
msg._routerData.deliveryLog.push(deliveryConnector)
}
}
async BindMsg(msg) {
this.messages[ msg.id ] = msg
}
}
module.exports = new MessageManager()

@ -3,7 +3,7 @@ class Connector {
this.amqpConnMngr = amqpConnMngr this.amqpConnMngr = amqpConnMngr
this.name = "_base" this.name = "_base"
} }
transmitMessage(msg) { async transmitMessage(msg, params) {
throw "not implemented" throw "not implemented"
} }
} }

@ -12,13 +12,13 @@ class POCSAGConnector extends Connector {
} }
}) })
} }
transmitMessage(msg) { async transmitMessage(msg, params) {
if (!msg.ric) return false if (params.length < 1) return false
const RIC = msg.ric const RIC = params[0]
const lastChar = RIC[RIC.length - 1].charCodeAt(0) - 65 const lastChar = RIC[RIC.length - 1].charCodeAt(0) - 65
const addressPart = lastChar >= 0 && lastChar <= 3 ? RIC.substring(0, RIC.length - 1) : RIC const addressPart = lastChar >= 0 && lastChar <= 3 ? RIC.substring(0, RIC.length - 1) : RIC
const functionBits = lastChar >= 0 && lastChar <= 3 ? lastChar : 0 const functionBits = lastChar >= 0 && lastChar <= 3 ? lastChar : 0
this.channelWrapper.sendToQueue('tx_pocsag', Buffer.from(msg.body), { this.channelWrapper.sendToQueue('tx_pocsag', Buffer.from(msg.payload), {
headers: { headers: {
ric: { ric: {
'!': 'int64', '!': 'int64',
@ -31,9 +31,9 @@ class POCSAGConnector extends Connector {
} }
}) })
.then(function() { .then(function() {
return console.log("Message was sent! Hooray!") return true
}).catch(function(err) { }).catch(function(err) {
return console.log(err,"Message was rejected... Boo!") return false
}) })
} }

@ -4,9 +4,21 @@ const PagerDevice = require("./Device")
class BirdySlim extends PagerDevice { class BirdySlim extends PagerDevice {
constructor () { constructor () {
super() super()
this.duplex = true
this.name = "birdyslim" this.name = "birdyslim"
} }
formatTX(msg) { RandID() {
return `B${ Str.random(4) }`
}
async formatTX(msg) {
msg.id = this.RandID()
await MessageManager.BindMsg(msg)
msg.payload = `${ msg.id }${ msg.payload }`
msg._routerData = {
recvAck: true,
readAck: true,
response: true,
}
} }
} }
module.exports = BirdySlim module.exports = BirdySlim

@ -1,8 +1,9 @@
class PagerDevice { class PagerDevice {
constructor () { constructor () {
this.duplex = false
this.name = "_base" this.name = "_base"
} }
formatTX(msg) { async formatTX(msg) { }
} RandID() { }
} }
module.exports = PagerDevice module.exports = PagerDevice

@ -1,11 +1,26 @@
const MessageManager = require("../MessageManager")
const PagerDevice = require("./Device") const PagerDevice = require("./Device")
const Str = require('@supercharge/strings')
class GenericPager extends PagerDevice { class GenericPager extends PagerDevice {
constructor () { constructor () {
super() super()
this.duplex = false
this.name = "generic" this.name = "generic"
} }
transmit(msg) { RandID() {
return `G${ Str.random(8) }`
}
async formatTX(msg) {
msg.id = this.RandID()
await MessageManager.BindMsg(msg)
msg.payload = `${ msg.id }${ msg.payload }`
msg._routerData = {
recvAck: false,
readAck: false,
response: false,
}
// return msg
} }
} }
module.exports = GenericPager module.exports = GenericPager

@ -6,6 +6,8 @@ module.exports = {
devices: require("./devices"), devices: require("./devices"),
Message: require("./Message"), Message: require("./Message"),
RouteablePage: require("./RouteablePage"), RouteablePage: require("./RouteablePage"),
DeviceRegistry: require("./DeviceRegistry"), DeviceRegistry: require("./DeviceRegistry"),
MessageManager: require("./MessageManager"),
ConnectorRegistry: require("./ConnectorRegistry"), ConnectorRegistry: require("./ConnectorRegistry"),
} }
Loading…
Cancel
Save