Skip to content

Commit

Permalink
init commit
Browse files Browse the repository at this point in the history
  • Loading branch information
gaoyifan committed Dec 8, 2014
0 parents commit 9234fdd
Show file tree
Hide file tree
Showing 13 changed files with 420 additions and 0 deletions.
28 changes: 28 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Compiled Object files, Static and Dynamic libs (Shared Objects)
*.o
*.a
*.so

# Folders
_obj
_test

# Architecture specific extensions/prefixes
*.[568vq]
[568vq].out

*.cgo1.go
*.cgo2.c
_cgo_defun.c
_cgo_gotypes.go
_cgo_export.*

_testmain.go

*.exe
*.test
*.prof

.idea
config.ini
out
11 changes: 11 additions & 0 deletions MultiwaySwitch.iml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="GO_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="jdk" jdkName="Go SDK go1.3.3 darwin/amd64" jdkType="Google Go SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
6 changes: 6 additions & 0 deletions config.ini.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[common]
role = server
logFile = production.log
[server]
bind = 0.0.0.0:10086
recevie_buffer_size = 1024
5 changes: 5 additions & 0 deletions doc/sample-tcp-json/authorization.request.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"drone_id" : 1
"type" : "authorization",
"secret_key": "..."
}
4 changes: 4 additions & 0 deletions doc/sample-tcp-json/authorization.response.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"drone_id":1,
"token": "..."
}
13 changes: 13 additions & 0 deletions src/mulswitch/MultiwaySwitch.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package mulswitch

import (
"fmt"
)

func init() {
initConfig()
initLogger()
}
func main() {
fmt.Printf("Hello world!")
}
92 changes: 92 additions & 0 deletions src/mulswitch/auth.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
package mulswitch

import (
"bytes"
"code.google.com/p/log4go"
"encoding/json"
"github.com/Unknwon/goconfig"
js "github.com/bitly/go-simplejson"
"io"
"net"
"strconv"
)

type PackageType byte

const (
AUTHORIZATION PackageType = iota
)

func serverTcp() {
bind_addr := configServer("bind", FATAL)
listener, err := net.Listen("tcp", bind_addr)
if err != nil {
logger.Critical("CANNOT bind address:", bind_addr, " -- ", err.Error())
panic("CANNOT bind address")
}
for {
conn, err := listener.Accept()
if err != nil {
logger.Error("Error Accept: ", err.Error())
}
logger.Info("Accepted the Connection :", conn.RemoteAddr())
go authServer(&conn)
}
}

func authServer(conn *net.Conn) {
defer conn.Close()
receiveBufferSize, err := strconv.Atoi(configServer("recevie_buffer_size", FATAL))
if err != nil {
logger.Debug("no recevie_buffer_size field in config file")
}
receiveBufferSize = 1024
buffer := make([]byte, receiveBufferSize)
data_received := bytes.NewBuffer([]byte{})
for {
n_buffer, err := conn.Read(buffer)
switch err {
case nil:
data_received.Write(buffer)
case io.EOF:
data_received.Write(buffer[:n_buffer])
selectPackgeType(*data_received, conn)
data_received.Reset()
default:
logger.Error(err.Error())
break
}
}
}

func parseJsonFromBuffer(data bytes.Buffer) *js.Json {
json, err := js.NewFromReader(bytes.NewReader(data.Bytes()))
if err != nil {
logger.Error("parsing json failed:", err.Error())
}
return json
}

func selectPackgeType(data bytes.Buffer, conn *net.Conn) {
jsonData := parseJsonFromBuffer(data)
droneId := jsonData.Get("drone_id").MustInt64()
packageFormat := PackageType(jsonData.Get("type").MustInt())
switch packageFormat {
case AUTHORIZATION:
response := authorization(droneId, jsonData)
conn.Write(response)
default:
logger.Debug("package type not recognized")
}
}

func authorization(id int64, jsonData *js.Json) []byte {
secretKey := jsonData.Get("secret_key").MustString()
if CheckSecretKey(id, secretKey) {
token, err := FlushToken(id)
if err != nil {
logger.Warn(err.Error())
}

}
}
77 changes: 77 additions & 0 deletions src/mulswitch/config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package mulswitch

import (
"code.google.com/p/log4go"
"github.com/Unknwon/goconfig"
"log"
)

const (
config_file = "config.ini"
)

type level int

const (
FATAL level = iota
ERROR
WARMING
INFO
)

var cfg *goconfig.ConfigFile

func initConfig() {
var err error

cfg, err = goconfig.LoadConfigFile(config_file)
if err != nil {
log.Fatalf("CANNOT load config file(%s) : %s\n", config_file, err)
}
/*
role, err := cfg.GetValue("common", "role")
if err != nil {
log.Fatalf("CONNOT read role field from config file: %s\n", err)
}
config, err := cfg.GetSection("common")
if err != nil {
log.Fatalf("CONNOT read common session from config file: %s\n", err)
}
config_role, err := cfg.GetSection(role)
if err != nil {
log.Fatalf("CONNOT read %s session from config file: %s\n", role, err)
}
config = make(map[string]string)
if err := mergo.Merge(&config, config_role); err != nil {
log.Fatalf("merge config in difference session failed", role, err)
}
*/
}

func config(section, key string, lvl level) string {
value, err := cfg.GetValue(section, key)
if err != nil {
switch lvl {
case FATAL:
logger.Critical("Error Read config:", err.Error())
panic(err.Error())
case ERROR:
logger.Error("Error Read config:", err.Error())
case WARMING:
logger.Warn("Error Read config:", err.Error())
case INFO:
logger.Info("Error Read config:", err.Error())
}
return ""
}
return value
}
func configCommon(key string, lvl level) string {
return config("common", key, lvl)
}
func configServer(key string, lvl level) string {
return config("server", key, lvl)
}
func configClient(key string, lvl level) string {
return config("client", key, lvl)
}
108 changes: 108 additions & 0 deletions src/mulswitch/createDB.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
package mulswitch

//package main

import (
"database/sql"
"github.com/coopernurse/gorp"
_ "github.com/mattn/go-sqlite3"
"log"
"time"
)

var dbmap *gorp.DbMap

func createDatabase() {
// initialize the DbMap
dbmap = initDb()
defer dbmap.Db.Close()

// delete any existing rows
err := dbmap.TruncateTables()
checkErr(err, "TruncateTables failed")

// create two drones
p1 := newDrone("2MDSlOW8qd/kkqYjCdV/HBDq5bfpaeXApPZe9kgneKs+vjCK8Bjav9s549ghXXkzvOPvriHbQmgPG/5yL43bag==", "4khSEpIm9p8Ds+Q+GJXMY+x2kKzWpwUiyZHPGKQcLkNPy8TgyxkvzR60+eH5Jobyw9I3q8BUky6a69JTp/siyORK4kY9Pxew/xT5je5F/+XMO3z9Y/5UxBnvBujECtLApDqb/DPTKlHiwUIu58GmbSIiDBr/o9KpH5bUdYr2dOIaT0XFZrMopy1YOM1eI1SEk9GyaP2jB+z4FSerm2r3DhF4E/ZNZmtJ3GtrMTDZTBbATVLnvyGg70m+9kbeajpAJDlvyjvrBzCxLGzK7c2F+FEsBgGrro6b5hKj4k3dhj4mSXd1diJDmJCVQQijjpN+mz3ddBYd2vi0NjIuNngSmDXfAZ5T7cNj1NHOIZjinJdWx4r3RadXdQUN2/XvgKJJcFc487wvx9XYCVIJP7QyFxeZOMWEi/lT95m6aEwUfeO6+sTI1M37kTNdicZShAaMzBRNQhPQdAd0a4sa0cdt4QOMiQITVZE+4vHQmHlgLr7M5qsuWprw8UX+ueRDSp+iDbWwpbIrU9sSe/Oequ83357vF9RVj0xcbi9HDOuIL3eQfvniy5rWPNgqMvJ8vpXm8ix03spppmBnxSbrT6uVtAXVb7NzndWRSONY0QFYkT5fF3V1W+fPt1rMuTHAawJ7f9uj7BGqtsF1eSvlwG56+qij/66tpXcu1UB1MAdQ4UbuoVj9xEsPsZaOEn+qKEt/uTD0AleUMtlgFwInSjIu6PIXvzzrCuWKZR0kZ/KVe50crLACm80xI6ksY5L331KJLL9eLfuG7mRq8hCxkdxgHP+s+y7ItRUbTFfT+AcK4cL4qhpJjzMPZ2bLZuxCdZ6SD5cSgmb2eJ7qNf9opqiyfi5wzbgUHTEujE/Vj1NdNq3XhRlq5+NkSkSWwNmlAEsGnc6+y49phs6qQlVr4guMbCKOaZ6dYzB2xxh3TC9yU7Dp+AT97HTIAUGFIMj6I6auBHC4FmsNCC/vfAHZmndeBnkRUNAXUcXzWoLSgAByAVaIW9SVUdOc9fU4G5pUNvL+4qOF4pZEm9GY0zmeJ5e+ftakIVYMlaej0sF+f8Cv3RQRtBhSEYHv4L+vyetowCaevn3fJKbK//ZoxyzM/UH9JKFQ49kc+ausuZN8q59C1y5iy6yLR3ca4bwf7rjzlFLYEC9x5m3k6KWWriJ5GfDi9cAf/Ll11d/HPC32hqwwQ1iSOMWYfBz4EPnqjm6qh1+WrPlGbM4j+qIXieMFF3hEgZJU1yMhqezX63kyRCdXG5BZBn8reTTkmoaRQN7ET/X77kCIgDYNHxGVhErHAcBNB9aolpMIKk0742b6Kd1annv7cUbCD7DuCGDWmtNiYvOcYfy/Aypy2H5s3dquIIsy5Q==")
p2 := newDrone("4p2QMVEIy+zzsLpmFFEtkWFDapSk4SwZb43D7OpwvpN83x/U6T0R6B+vKDc4IRdzlDyaSwTJrkwk6hCqPY64kA==", "Ne2QpVaZLFUqpRNezeHlH2gzHpDQFeIHxCymL7Io5VEDwana/Nc/iFvSKTp4jGyTZ7rLbPZ64GzgJ4QmMji6pSw8JL5qB1GLjcF1e77Uao754+bnye4DKyeLK+hMItdgoUKzF+seOpqZa9wNlYcHZbyWFCqNUmT7igx8C2N23Mht6jjk40M3GIlW0g9in36A/PTWMCsk0pt0k30D7VFTUMzBgDFsSuuM1N2N9qqnhIfh5pkGJnKmcBTzUwezuNLX5gdnK6vlBUOehRxIALce0zS0oX03E5HJlSpJRLdBJ9oU0g8aMGr+ufav6jCVrDeKdghaZPzFAU2n7rPtwOpWlbrUk6HdpXquk4hewZFwdbyIuEZ0I+EM1xN3Jsy2RRGrYX8ANNk0Jb3cRSY/E+ab76RgAWT8DVaGe6iv++NPa9gJGgfNfqiAAoJx9X0lvEduxDwvDPrzDXSbBu/40gs+Bkol6YD8e8c+J3JNTDOMLcD3YA0LeBDayLuYm3Y8zaDNd7nD+WKIn2C0eiD/L6QGD98XN3zjK6CgyTtUoTcw6nKUjkJHLmsOSLaqIg+Fka323bNjGSMyXzocT/KtGVkhA4dz+AsDfj3rcfVt2YRF7uuCwgtsulIlzjLBN/WwdCoAAx6hKA5bTdZq53XQuY8LnLmrMLKAH0Uk0z2ubtuVhcRsu0xdkFPE3PE0V9BwaOVEx5dVvlrJ80Hnm9Vqce4XK4DukDtDOjJgQpa91QwRF5gVwLrPaokgHkiBeE+FnkBg1/7THirbC7I/szg9LpAMaNcfbpWoH8P85hEC78wOT5NqhoSZksFMuBGe2Y5cwPvsEAW+GQfg9R0lhObmTgPBrEkCL3IE5lf8wDBgGLK53J6DJlTBqksdzEFpJj1WxNvFoV4fmFhOg19hABSdpt4kkBABhcgubjvx+yLv9oxpJpY3e+Lyg6MlV9sm+SkAPnH8nzmTmQdXafuUg87RQ4Wqw0XSn1c9Y7PH45qCVQFNPeeBFK9FVFYTOLk9NO6DioxOVetNGvASy6xd/Xdrzl9kDS5D/XomMeg0R5AV1TwI0VS2Lruop/QLWowgQqKJrdIdE44w6nJw/owqjDYBLDUD+UvwdKQoj1eiAK9cq7zF4hkZHWjh2aq/Fub5tiMm+jBNdFZDX8+3OGKikhYSO2w8TL55fk15yJWmhEoH3iyak87fbfGsNqRsscTSF1A0xH+BPyNL3Jk0IFh2CpQrZmnMxQX38srlTPPVTXBj6Ykv8xbHq+PiLHrclNf3HSCRd72PMhbtN4I469f9fH7OsRnQj6FtDs7jJzMN402jBoiHSBogX0mocKGXQB1bSGHFx201cRdZu2oMqu2B3ct+7wL53A==")

// insert rows - auto increment PKs will be set properly after the insert
err = dbmap.Insert(&p1, &p2)
checkErr(err, "Insert failed")

// use convenience SelectInt
//count, err := dbmap.SelectInt("select count(*) from drones")
//checkErr(err, "select count(*) failed")
//log.Println("Rows after inserting:", count)

// update a row
//p2.Token = "Go 1.2 is better than ever"
//count, err = dbmap.Update(&p2)
//checkErr(err, "Update failed")
//log.Println("Rows updated:", count)

// fetch one row - note use of "drone_id" instead of "Id" since column is aliased
//
// Dronegres users should use $1 instead of ? placeholders
// See 'Known Issues' below
//
//err = dbmap.SelectOne(&p2, "select * from drones where drone_id=?", p2.Id)
//checkErr(err, "SelectOne failed")
//log.Println("p2 row:", p2)

// fetch all rows
//var drones []Drone
//_, err = dbmap.Select(&drones, "select * from drones order by drone_id")
//checkErr(err, "Select failed")
//log.Println("All rows:")
//for x, p := range drones {
// log.Printf(" %d: %v\n", x, p)
//}

// delete row by PK
//count, err = dbmap.Delete(&p1)
//checkErr(err, "Delete failed")
//log.Println("Rows deleted:", count)

// delete row manually via Exec
//_, err = dbmap.Exec("delete from drones where drone_id=?", p1.Id)
//checkErr(err, "Exec failed")

// confirm count is zero
//count, err = dbmap.SelectInt("select count(*) from drones")
//checkErr(err, "select count(*) failed")
//log.Println("Row count - should be zero:", count)

//log.Println("Done!")
}

func newDrone(title, body string) Drone {
return Drone{
Created: time.Now().UnixNano(),
Token: title,
SecretKey: body,
}
}

func initDb() *gorp.DbMap {
// connect to db using standard Go database/sql API
db, err := sql.Open("sqlite3", "/tmp/dronevery_db.bin")
checkErr(err, "sql.Open failed")

// construct a gorp DbMap
dbmap := &gorp.DbMap{Db: db, Dialect: gorp.SqliteDialect{}}

// add a table, setting the table name to 'drone' and
// specifying that the Id property is an auto incrementing PK
dbmap.AddTableWithName(Drone{}, "drones").SetKeys(true, "Id")

err = dbmap.CreateTablesIfNotExists()
checkErr(err, "Create tables failed")

return dbmap
}

func checkErr(err error, msg string) {
if err != nil {
log.Fatalln(msg, err)
}
}
Loading

0 comments on commit 9234fdd

Please sign in to comment.