simulator

package module
v0.0.0-...-f868c53 Latest Latest
Warning

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

Go to latest
Published: May 31, 2024 License: Apache-2.0 Imports: 7 Imported by: 0

README

Simulator

A discrete event simulator made for simulating protocols in Mobile Ad-Hoc Networks (MANETs). Other protocols can be implemented to run in the simulator using the Node interface, however currently only the Starling protocol has been implemented.

Usage

For the help menu:

go run ./example 

To run a simple example:

go run ./example -e simple

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AddNodeEvent

type AddNodeEvent struct {
	BaseEvent
	// contains filtered or unexported fields
}

func (*AddNodeEvent) EventType

func (e *AddNodeEvent) EventType() EventType

func (*AddNodeEvent) Node

func (e *AddNodeEvent) Node() *InternalNode

type BaseEvent

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

func (*BaseEvent) ParentEvent

func (e *BaseEvent) ParentEvent() Event

func (*BaseEvent) SequenceNumber

func (e *BaseEvent) SequenceNumber() int64

func (*BaseEvent) Time

func (e *BaseEvent) Time() time.Duration

type ConnectEvent

type ConnectEvent struct {
	BaseEvent
	// contains filtered or unexported fields
}

func (*ConnectEvent) EventType

func (e *ConnectEvent) EventType() EventType

func (*ConnectEvent) NodeA

func (e *ConnectEvent) NodeA() *InternalNode

func (*ConnectEvent) NodeB

func (e *ConnectEvent) NodeB() *InternalNode

type Coordinate

type Coordinate struct {
	X float64
	Y float64
}

func (*Coordinate) Distance

func (a *Coordinate) Distance(b Coordinate) float64

type DelayEvent

type DelayEvent struct {
	BaseEvent
	// contains filtered or unexported fields
}

func (*DelayEvent) EventType

func (e *DelayEvent) EventType() EventType

type DisconnectEvent

type DisconnectEvent struct {
	BaseEvent
	// contains filtered or unexported fields
}

func (*DisconnectEvent) EventType

func (e *DisconnectEvent) EventType() EventType

func (*DisconnectEvent) NodeA

func (e *DisconnectEvent) NodeA() *InternalNode

func (*DisconnectEvent) NodeB

func (e *DisconnectEvent) NodeB() *InternalNode

type Event

type Event interface {
	EventType() EventType
	Time() time.Duration
	SequenceNumber() int64
	ParentEvent() Event
}

type EventQueue

type EventQueue []Event

An EventQueue implements heap.Interface and holds Items.

func (EventQueue) Len

func (pq EventQueue) Len() int

func (EventQueue) Less

func (pq EventQueue) Less(i, j int) bool

func (*EventQueue) Next

func (pq *EventQueue) Next() any

func (*EventQueue) Pop

func (pq *EventQueue) Pop() any

func (*EventQueue) Push

func (pq *EventQueue) Push(x any)

func (*EventQueue) ShouldPop

func (pq *EventQueue) ShouldPop(currentTime time.Duration) bool

func (EventQueue) Swap

func (pq EventQueue) Swap(i, j int)

type EventType

type EventType int64
const (
	TIMESTEP EventType = iota
	CONNECT
	DISCONNECT
	ADD_NODE
	RM_NODE
	SEND_MSG
	RCV_MSG
	DELAY
	TERMINATE
)

func (EventType) String

func (e EventType) String() string

type InternalID

type InternalID int

type InternalNode

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

func (*InternalNode) Coords

func (n *InternalNode) Coords() Coordinate

func (*InternalNode) Data

func (n *InternalNode) Data() *map[string]interface{}

func (*InternalNode) Node

func (n *InternalNode) Node() Node

func (*InternalNode) NodeID

func (n *InternalNode) NodeID() NodeID

type InternalPeer

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

func (*InternalPeer) Data

func (p *InternalPeer) Data(node *InternalNode) *map[string]any

func (*InternalPeer) NodeA

func (p *InternalPeer) NodeA() *InternalNode

func (*InternalPeer) NodeB

func (p *InternalPeer) NodeB() *InternalNode

type Logger

type Logger interface {
	Log(message string)
	NewEvent(event Event)
	Init()
}

type MovementInstruction

type MovementInstruction struct {
	Coords Coordinate
	Time   time.Duration
}

func NewMovementInstruction

func NewMovementInstruction(x float64, y float64, time time.Duration) MovementInstruction

type Node

type Node interface {
	OnConnect(peer Peer, id NodeID)
	OnDisconnect(peer Peer, id NodeID)
	OnReceivePacket(peer Peer, packet []byte, id NodeID)
	OnStart(sim NodeArguments)
	ID() NodeID
	OnTerminate()
	TransmissionBehavior() TransmissionBehavior
}

func NodeFromEvent

func NodeFromEvent(e Event) Node

type NodeArguments

type NodeArguments struct {
	Data      func() *map[string]interface{}
	UpdateID  func(newId NodeID)
	DelayBy   func(func(), time.Duration)
	Now       func() time.Time
	Terminate func(error)
	Log       func(message string)
	Loggers   []Logger
}

type NodeID

type NodeID int64

type NodeMovement

type NodeMovement interface {
	StartPosition() Coordinate
	RegisterMovements(Coordinate) MovementInstruction
}

type Peer

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

func (*Peer) Data

func (p *Peer) Data() *map[string]any

func (Peer) SendPacket

func (p Peer) SendPacket(packet []byte)

type ReceiveEvent

type ReceiveEvent struct {
	BaseEvent
	// contains filtered or unexported fields
}

func (*ReceiveEvent) EventType

func (e *ReceiveEvent) EventType() EventType

func (*ReceiveEvent) OriginNodeID

func (e *ReceiveEvent) OriginNodeID() NodeID

func (*ReceiveEvent) Packet

func (e *ReceiveEvent) Packet() []byte

func (*ReceiveEvent) Target

func (e *ReceiveEvent) Target() *InternalNode

type Region

type Region struct {
	Coordinate RegionCoord
	Nodes      []*InternalNode
}

func NewRegion

func NewRegion(c RegionCoord) *Region

func (*Region) AddNode

func (r *Region) AddNode(node *InternalNode)

func (*Region) RemoveNode

func (r *Region) RemoveNode(node *InternalNode)

type RegionCoord

type RegionCoord struct {
	X int
	Y int
}

type RegionMap

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

func NewRegionMap

func NewRegionMap(nodeRange float64) *RegionMap

func (*RegionMap) AddNode

func (r *RegionMap) AddNode(node *InternalNode)

func (*RegionMap) CoordToRegionCoord

func (r *RegionMap) CoordToRegionCoord(c Coordinate) RegionCoord

func (*RegionMap) MoveNode

func (r *RegionMap) MoveNode(node *InternalNode, old Coordinate, new Coordinate)

func (*RegionMap) WithinRange

func (r *RegionMap) WithinRange(node *InternalNode) ([]*InternalNode, []*InternalNode)

type RemoveNodeEvent

type RemoveNodeEvent struct {
	BaseEvent
	// contains filtered or unexported fields
}

func (*RemoveNodeEvent) EventType

func (e *RemoveNodeEvent) EventType() EventType

func (*RemoveNodeEvent) Node

func (e *RemoveNodeEvent) Node() *InternalNode

type SendEvent

type SendEvent struct {
	BaseEvent
	// contains filtered or unexported fields
}

func (*SendEvent) EventType

func (e *SendEvent) EventType() EventType

func (*SendEvent) Origin

func (e *SendEvent) Origin() *InternalNode

func (*SendEvent) Packet

func (e *SendEvent) Packet() []byte

func (*SendEvent) TargetNodeID

func (e *SendEvent) TargetNodeID() NodeID

type Simulator

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

func NewSimulator

func NewSimulator(bleRange float64, transmissionDelay time.Duration, random *rand.Rand, loggers []Logger) *Simulator

func (*Simulator) AddNode

func (s *Simulator) AddNode(node Node, nodeMovement NodeMovement, delay time.Duration)

func (*Simulator) IsRunning

func (s *Simulator) IsRunning() bool

func (*Simulator) IsTerminating

func (s *Simulator) IsTerminating() bool

func (*Simulator) NewConnectEvent

func (s *Simulator) NewConnectEvent(time time.Duration, nodeA *InternalNode, nodeB *InternalNode) *ConnectEvent

func (*Simulator) NewDisconnectEvent

func (s *Simulator) NewDisconnectEvent(time time.Duration, nodeA *InternalNode, nodeB *InternalNode) *DisconnectEvent

func (*Simulator) Nodes

func (s *Simulator) Nodes() []*InternalNode

func (*Simulator) Now

func (s *Simulator) Now() time.Time

func (*Simulator) Peers

func (s *Simulator) Peers() []InternalPeer

func (*Simulator) Start

func (s *Simulator) Start()

Start will start the simulator if it is not already running

func (*Simulator) Terminate

func (s *Simulator) Terminate()

func (*Simulator) Update

func (s *Simulator) Update(updateUntilTime time.Duration) error

type TerminateEvent

type TerminateEvent struct {
	BaseEvent
	// contains filtered or unexported fields
}

func (*TerminateEvent) Error

func (e *TerminateEvent) Error() error

func (*TerminateEvent) EventType

func (e *TerminateEvent) EventType() EventType

type TimestepEvent

type TimestepEvent struct {
	BaseEvent
}

func (*TimestepEvent) EventType

func (e *TimestepEvent) EventType() EventType

type TransmissionBehavior

type TransmissionBehavior interface {
	Transmission(Coordinate, Coordinate, []byte) (shouldBeDropped bool, delay time.Duration)
}

Directories

Path Synopsis
cli command

Jump to

Keyboard shortcuts

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