# README

Microservices Package

This package gives you all the functionality to interact with ioFog both via Local API and WebSockets:

  • send new message to ioFog with REST (PostMessage)
  • fetch next unread messages from ioFog (GetNextMessages)
  • fetch messages for time period and list of publishers (GetMessagesFromPublishersWithinTimeFrame)
  • get config options (GetConfig)
  • create IoMessage, encode(decode) to(from) raw bytes, encode(decode) data to(from) base64 string (IoMessage methods)
  • connect to ioFog Control Channel via WebSocket (EstablishControlWsConnection)
  • connect to ioFog Message Channel via WebSocket (EstablishMessageWsConnection) and publish new message via this channel (SendMessageViaSocket)

Code snippets:

Get sdk:

go get github.com/eclipse-iofog/iofog-sdk-go

Import package:

import (
	msvcs "github.com/eclipse-iofog/iofog-sdk-go/pkg/microservices"
)

Create IoFog client with default settings:

client, err := msvcs.NewDefaultIoFogClient()

Or specify host, port, ssl and container id explicitly:

client, err := msvcs.NewIoFogClient("IoFog", false, "containerId", 54321)

REST calls

Get list of next unread IoMessages:

messages, err := client.GetNextMessages()

Post new IoMessage to ioFog via REST call:

response, err := client.PostMessage(&msvcs.IoMessage{
	SequenceNumber:1,
	SequenceTotal:1,
	InfoType:"text",
	InfoFormat:"utf-8",
	ContentData: []byte("foo"),
	ContextData: []byte("bar"),
})

Get an array of IoMessages from specified publishers within given timeframe:

messages, err := client.GetMessagesFromPublishersWithinTimeFrame(&msvcs.MessagesQueryParameters{
	TimeFrameStart: 1234567890123,
	TimeFrameEnd: 1234567892123,
	Publishers: []string{"sefhuiw4984twefsdoiuhsdf", "d895y459rwdsifuhSDFKukuewf", "SESD984wtsdidsiusidsufgsdfkh"},
})

Get container's config:

config, err := client.GetConfig()

WebSocket calls

Establish connection with message ws. This call returns two channels, so you can listen to incoming messages and receipts:

dataChannel, receiptChannel := client.EstablishMessageWsConnection()
for {
	select {
	case msg := <-dataChannel:
		// msg is IoMessage received
	case r := <-receiptChannel:
		// r is response with ID and Timestamp
}

After establishing this connection you can send your own message to IoFog:

client.SendMessageViaSocket(&msvcs.IoMessage{
	Tag: "aaa",
	SequenceNumber: 127,
	ContentData: []byte("Here goes some test data"),
	ContextData: []byte("This one is test too"),
})

Establish connection with control ws and pass channel to listen to incoming config update signals:

confChannel := client.EstablishControlWsConnection()
for {
	select {
	case <-confChannel:
		// signal received
		// we can fetch new config now
		config, err := client.GetConfig()
}