Skip to content

Commit

Permalink
implement client
Browse files Browse the repository at this point in the history
  • Loading branch information
domdom82 committed Oct 9, 2018
1 parent 8249cb0 commit a1282ea
Show file tree
Hide file tree
Showing 4 changed files with 120 additions and 29 deletions.
73 changes: 73 additions & 0 deletions client/client.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package client

import (
"fmt"
"io/ioutil"
"net"

"math/rand"
"time"

"bytes"

"bufio"

"gopkg.in/yaml.v2"
)

type Config struct {
ServerAddr string `yaml:"server_addr"`
ServerPort string `yaml:"server_port"`
PayloadSize int `yaml:"payload_size"`
RequestsPerSecond int `yaml:"requests_per_second"`
}

type Client struct {
config *Config
}

func (cfg *Config) NewClient() *Client {
server := &Client{config: cfg}

return server
}

func NewClientConfigFromFile(filename string) (*Config, error) {
data, err := ioutil.ReadFile(filename)
if err != nil {
return nil, err
}
var config *Config
err = yaml.Unmarshal(data, &config)
if err != nil {
return nil, err
}

return config, nil
}

func (c *Client) makePayload(size int) []byte {
payload := new(bytes.Buffer)

for i := 0; i < size; i++ {
payload.WriteByte(byte(rand.Intn(255)))
}
return payload.Bytes()
}

// sync
func (c *Client) Run() {
rand.Seed(time.Now().Unix())

conn, err := net.Dial("tcp", fmt.Sprintf("%s:%s", c.config.ServerAddr, c.config.ServerPort))
if err != nil {
panic(err)
}

w := bufio.NewWriterSize(conn, c.config.PayloadSize)
for {
payload := c.makePayload(c.config.PayloadSize)
w.Write(payload)
fmt.Fprintf(conn, "\n")
}
}
5 changes: 5 additions & 0 deletions client/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
server_addr: localhost
server_port: 1234
payload_size: 1500
requests_per_second: 1
43 changes: 29 additions & 14 deletions main.go
Original file line number Diff line number Diff line change
@@ -1,27 +1,42 @@
package main

import (
"os"
"fmt"
"os"

"github.com/domdom82/go-backpressure/client"
"github.com/domdom82/go-backpressure/server"
)

func main() {
var sconfig *server.ServerConfig
//var cconfig *client.ClientConfig
if len(os.Args) > 1 {
fmt.Printf("Loading sconfig from %q\n", os.Args[1])
s, err := server.NewServerConfigFromFile(os.Args[1])
if err != nil {
fmt.Println(err)
os.Exit(1)

usage := func() {
fmt.Printf("Usage: %s <-client|-server> <configfile>\n", os.Args[0])
os.Exit(1)
}

if len(os.Args) > 2 {
if os.Args[1] == "-server" {
fmt.Printf("Loading server config from %q\n", os.Args[2])
s, err := server.NewServerConfigFromFile(os.Args[2])
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Printf("Starting the server.\n")
s.NewServer().Run()
} else if os.Args[1] == "-client" {
fmt.Printf("Loading client config from %q\n", os.Args[2])
c, err := client.NewClientConfigFromFile(os.Args[2])
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Printf("Starting the client.\n")
c.NewClient().Run()
}
sconfig = s
} else {
fmt.Printf("ERROR: No configuration file provided.\nUsage: %s <-client|-server> <configfile>", os.Args[0])
os.Exit(1)
usage()
}

fmt.Printf("Starting the server.\n")
sconfig.NewServer().Run()
}
28 changes: 13 additions & 15 deletions server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,36 +3,35 @@ package server
import (
"bufio"
"fmt"
"time"
"net"
"io/ioutil"
"net"
"time"

"gopkg.in/yaml.v2"
)


type ServerConfig struct {
Port string `yaml:"port"`
Bufsize int `yaml:"bufsize"`
Delay time.Duration `yaml:"delay"`
type Config struct {
Port string `yaml:"port"`
Bufsize int `yaml:"bufsize"`
Delay time.Duration `yaml:"delay"`
}

type Server struct {
config *ServerConfig
config *Config
}


func (cfg *ServerConfig) NewServer() *Server {
server := &Server{ config: cfg}
func (cfg *Config) NewServer() *Server {
server := &Server{config: cfg}

return server
}

func NewServerConfigFromFile(filename string) (*ServerConfig, error) {
func NewServerConfigFromFile(filename string) (*Config, error) {
data, err := ioutil.ReadFile(filename)
if err != nil {
return nil, err
}
var config *ServerConfig
var config *Config
err = yaml.Unmarshal(data, &config)
if err != nil {
return nil, err
Expand All @@ -41,7 +40,6 @@ func NewServerConfigFromFile(filename string) (*ServerConfig, error) {
return config, nil
}


// sync
func (srv *Server) Run() {
listener, _ := net.Listen("tcp", fmt.Sprintf(":%s", srv.config.Port))
Expand All @@ -52,4 +50,4 @@ func (srv *Server) Run() {
fmt.Println(string(msg))
time.Sleep(srv.config.Delay * time.Millisecond)
}
}
}

0 comments on commit a1282ea

Please sign in to comment.