aero

package module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 20, 2022 License: GPL-3.0 Imports: 17 Imported by: 0

README

aero

Go module for file sharing between devices. Master device starts the server and node devices connect to the server. Once connected, each device can communicate with each other to get shared file list and directly download the shared files.

Usage

Master device
import (
	// ...
    "github.com/dhamith93/aero"
)

func main() {
	files := make([]aero.File, 0)
	files = append(files, aero.NewFile("/path/to/file"))
	aero := aero.New(
		aero.Device{
			Name:       "MASTER",
			Ip:         "192.168.1.2",
			Port:       "9000",
			SocketPort: "9001",
			Files:      files,
		},
		true,
	)

	aero.SetKey("key-for-jwt-tokens")

	var wg sync.WaitGroup
	wg.Add(2)
	go aero.StartGrpcServer()
	go aero.StartSocketServer()
	wg.Wait()
}
Node device
import (
	// ...
    "github.com/dhamith93/aero"
)

func main() {
	files := make([]aero.File, 0)
	files = append(files, aero.NewFile("/path/to/file"))
	aeroNew := aero.New(
		aero.Device{
			Name:       "Node",
			Ip:         "192.168.1.3",
			Port:       "9000",
			SocketPort: "9001",
			Files:      files,
		},
		true,
	)

    // Register new device to server
    res, err := aeroNew.SendInit(*aeroNew.Self, aero.Device{Port: "9000", Ip: "192.168.1.2"})
	if err != nil {
		fmt.Println(err.Error())
	}

    // Get list of devices with files
    devices, err = aeroNew.GetList()

    // Get status of a device
    status, err := aeroNew.GetStatus(devices[0])

    // Check if file available
    fileIdx := 0
    err := aeroNew.FetchFile(devices[0], fileIdx)

    // Download file and progress checking
    downloadId := aeroNew.Download(devices[0], fileIdx)

    for {
		if aeroNew.SocketServer.Downloads[downloadId].Progress == 100 && aeroNew.SocketServer.Downloads[downloadId].HashMatched {
			fmt.Println("file downloaded")
			break
		}
		if aeroNew.SocketServer.Downloads[downloadId].Error != nil {
			fmt.Println(aeroNew.SocketServer.Downloads[downloadId].Error.Error())
			break
		}
		fmt.Println(aeroNew.SocketServer.Downloads[downloadId].Progress)		
	}

    // Get messages/logs 
    fmt.Println(aeroNew.SocketServer.Messages.Get())
}

Documentation

Index

Constants

View Source
const (
	ERR = "ERROR"
	WRN = "WARN"
	MSG = "MSG"
)

Variables

This section is empty.

Functions

func GenerateAPIDeviceFromDevice

func GenerateAPIDeviceFromDevice(d *Device) *api.Device

func GetHash

func GetHash(f *os.File) (string, error)

Types

type Aero

type Aero struct {
	Devices      []Device
	Self         *Device
	Server       api.Server
	SocketServer SocketServer

	Listener chan bool
	IsMaster bool
	// contains filtered or unexported fields
}

func New

func New(device Device, isMaster bool) Aero

func (*Aero) AddFile

func (aero *Aero) AddFile(f File) error

func (*Aero) Download

func (aero *Aero) Download(d Device, fileIdx int) int

func (*Aero) FetchFile

func (aero *Aero) FetchFile(d Device, fileIdx int) error

func (*Aero) GetList

func (aero *Aero) GetList() ([]Device, error)

func (*Aero) GetStatus

func (aero *Aero) GetStatus(d Device) (Device, error)

func (*Aero) RemoveFileAt

func (aero *Aero) RemoveFileAt(fileIdx int) error

func (*Aero) SendInit

func (aero *Aero) SendInit(d Device, master Device) ([]Device, error)

func (*Aero) SendRefresh

func (aero *Aero) SendRefresh(d Device) (Device, error)

func (*Aero) SetKey

func (aero *Aero) SetKey(key string)

func (*Aero) StartGrpcServer

func (aero *Aero) StartGrpcServer() error

func (*Aero) StartSocketServer

func (aero *Aero) StartSocketServer() error

func (*Aero) Stop

func (aero *Aero) Stop()

type AeroMessages

type AeroMessages struct {
	// contains filtered or unexported fields
}

func (*AeroMessages) Add

func (a *AeroMessages) Add(msg string, msgType string)

func (*AeroMessages) Get

func (a *AeroMessages) Get() *[]Message

type Device

type Device struct {
	Name       string `json:"name,omitempty"`
	Ip         string `json:"ip,omitempty"`
	Port       string `json:"port,omitempty"`
	SocketPort string `json:"socketPort,omitempty"`
	Files      []File `json:"files,omitempty"`
}

func GenerateDeviceFromAPIDevice

func GenerateDeviceFromAPIDevice(d *api.Device) *Device

type File

type File struct {
	Name string `json:"name,omitempty"`
	Hash string `json:"hash,omitempty"`
	Type string `json:"type,omitempty"`
	Ext  string `json:"ext,omitempty"`
	Path string `json:"path,omitempty"`
	Size int64  `json:"size,omitempty"`
}

func GenerateFileFromAPIFile

func GenerateFileFromAPIFile(f *api.File) *File

func NewFile

func NewFile(path string) File

type Message

type Message struct {
	Time   int64
	Type   string
	String string
}

type Messages

type Messages interface {
	Add(msg string, msgType string)
	Get() *[]Message
}

type ProgressWriter

type ProgressWriter struct {
	FileSize    int64
	Received    int64
	Progress    int
	HashMatched bool
	Error       error
}

func (*ProgressWriter) Write

func (pw *ProgressWriter) Write(data []byte) (int, error)

type SocketServer

type SocketServer struct {
	Port    string
	Devices *[]Device
	Self    *Device

	Messages  Messages
	Downloads map[int]*ProgressWriter
	// contains filtered or unexported fields
}

func (*SocketServer) Download

func (s *SocketServer) Download(d Device, fileIdx int) int

func (*SocketServer) Start

func (s *SocketServer) Start() error

func (*SocketServer) Stop

func (s *SocketServer) Stop()

Directories

Path Synopsis
internal
api

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL