mqtt-ingest draft
This commit is contained in:
13
app/src/handlers/edge5-video.ts
Normal file
13
app/src/handlers/edge5-video.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
import { onEdgeChunk } from '../stream/edge-chunk-relay.js'
|
||||
import type { TopicHandler } from '../types.js'
|
||||
|
||||
export const TOPIC = 'data/edge5/video/v1'
|
||||
|
||||
export const handleEdge5Video: TopicHandler = async (topic, payload) => {
|
||||
console.log('edge5.video.received', {
|
||||
topic,
|
||||
bytes: payload.length,
|
||||
payload,
|
||||
})
|
||||
onEdgeChunk(payload)
|
||||
}
|
||||
14
app/src/handlers/index.ts
Normal file
14
app/src/handlers/index.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
import { register } from '../registry.js'
|
||||
import { handleTopic1, TOPIC as topic1 } from './topic1.js'
|
||||
import { handleTopic2, TOPIC as topic2 } from './topic2.js'
|
||||
import { handleTopic3, TOPIC as topic3 } from './topic3.js'
|
||||
import { handleTopic4, TOPIC as topic4 } from './topic4.js'
|
||||
import { handleTopic5, TOPIC as topic5 } from './topic5.js'
|
||||
import { handleEdge5Video, TOPIC as edge5Video } from './edge5-video.js'
|
||||
|
||||
register(topic1, handleTopic1)
|
||||
register(topic2, handleTopic2)
|
||||
register(topic3, handleTopic3)
|
||||
register(topic4, handleTopic4)
|
||||
register(topic5, handleTopic5)
|
||||
register(edge5Video, handleEdge5Video)
|
||||
16
app/src/handlers/topic1.ts
Normal file
16
app/src/handlers/topic1.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
import { parseJson } from '../helpers/parse.js'
|
||||
import { isArrayOfChunks125 } from '../helpers/validate.js'
|
||||
import type { TopicHandler } from '../types.js'
|
||||
|
||||
export const TOPIC = 'poc/topic1'
|
||||
|
||||
export const handleTopic1: TopicHandler = async (topic, payload) => {
|
||||
const raw = parseJson(payload)
|
||||
|
||||
if (!isArrayOfChunks125(raw)) {
|
||||
console.warn('topic1.invalid_payload', { topic })
|
||||
return
|
||||
}
|
||||
|
||||
console.log('topic1.received', { topic, chunks: raw.length })
|
||||
}
|
||||
16
app/src/handlers/topic2.ts
Normal file
16
app/src/handlers/topic2.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
import { parseJson } from '../helpers/parse.js'
|
||||
import { isArrayOfLength125 } from '../helpers/validate.js'
|
||||
import type { TopicHandler } from '../types.js'
|
||||
|
||||
export const TOPIC = 'poc/topic2'
|
||||
|
||||
export const handleTopic2: TopicHandler = async (topic, payload) => {
|
||||
const raw = parseJson(payload)
|
||||
|
||||
if (!isArrayOfLength125(raw)) {
|
||||
console.warn('topic2.invalid_payload', { topic })
|
||||
return
|
||||
}
|
||||
|
||||
console.log('topic2.received', { topic, length: raw.length })
|
||||
}
|
||||
16
app/src/handlers/topic3.ts
Normal file
16
app/src/handlers/topic3.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
import { parseUtf8 } from '../helpers/parse.js'
|
||||
import { isNonEmptyString } from '../helpers/validate.js'
|
||||
import type { TopicHandler } from '../types.js'
|
||||
|
||||
export const TOPIC = 'poc/topic3'
|
||||
|
||||
export const handleTopic3: TopicHandler = async (topic, payload) => {
|
||||
const text = parseUtf8(payload)
|
||||
|
||||
if (!isNonEmptyString(text)) {
|
||||
console.warn('topic3.invalid_payload', { topic })
|
||||
return
|
||||
}
|
||||
|
||||
console.log('topic3.received', { topic, text })
|
||||
}
|
||||
29
app/src/handlers/topic4.ts
Normal file
29
app/src/handlers/topic4.ts
Normal file
@@ -0,0 +1,29 @@
|
||||
import { parseJson } from '../helpers/parse.js'
|
||||
import { isFiniteNumber } from '../helpers/validate.js'
|
||||
import type { TopicHandler } from '../types.js'
|
||||
|
||||
export const TOPIC = 'poc/topic4'
|
||||
|
||||
type Topic4Payload = {
|
||||
value: number
|
||||
}
|
||||
|
||||
function isTopic4Payload(value: unknown): value is Topic4Payload {
|
||||
return (
|
||||
typeof value === 'object' &&
|
||||
value !== null &&
|
||||
'value' in value &&
|
||||
isFiniteNumber((value as Topic4Payload).value)
|
||||
)
|
||||
}
|
||||
|
||||
export const handleTopic4: TopicHandler = async (topic, payload) => {
|
||||
const raw = parseJson(payload)
|
||||
|
||||
if (!isTopic4Payload(raw)) {
|
||||
console.warn('topic4.invalid_payload', { topic })
|
||||
return
|
||||
}
|
||||
|
||||
console.log('topic4.received', { topic, value: raw.value })
|
||||
}
|
||||
10
app/src/handlers/topic5.ts
Normal file
10
app/src/handlers/topic5.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
import { parseJsonArray } from '../helpers/parse.js'
|
||||
import type { TopicHandler } from '../types.js'
|
||||
|
||||
export const TOPIC = 'poc/topic5'
|
||||
|
||||
export const handleTopic5: TopicHandler = async (topic, payload) => {
|
||||
const items = parseJsonArray(payload)
|
||||
|
||||
console.log('topic5.received', { topic, count: items.length })
|
||||
}
|
||||
Reference in New Issue
Block a user