Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 37 additions & 4 deletions accounts.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package main

import (
"container/ring"
"encoding/json"
"errors"
"fmt"
"sync"
Expand Down Expand Up @@ -122,8 +123,35 @@ func (ac *account) PruneExpiredTxs() {
}
}

func genResponseJSON(actCSV string, message string) string {
return `{"account": "` + actCSV + `", "message": "` + message + `"}`
type accountState struct {
Balance string `json:"balance"`
Portfolio map[string]uint64 `json:"portfolio"`
PendingBuys []pendingTxState `json:"pendingBuys"`
PendingSells []pendingTxState `json:"pendingSells"`
}

func (ac *account) GetState() accountState {
pendingBuys := make([]pendingTxState, len(ac.pendingBuys))
for i, pb := range ac.pendingBuys {
pendingBuys[i] = pb.GetState()
}

pendingSells := make([]pendingTxState, len(ac.pendingSells))
for i, ps := range ac.pendingSells {
pendingSells[i] = ps.GetState()
}

return accountState{
Balance: ac.balance.String(),
Portfolio: ac.portfolio,
PendingBuys: pendingBuys,
PendingSells: pendingSells,
}
}

type eventMessage struct {
Account accountState `json:"account"`
Message string `json:"message"`
}

func (ac *account) PushEvent(message string) {
Expand All @@ -133,8 +161,13 @@ func (ac *account) PushEvent(message string) {
return
}

//socket.WriteMessage(websocket.TextMessage, []byte(message))
socket.WriteMessage(websocket.TextMessage, []byte(genResponseJSON(ac.toCSV(), message)))
payload, err := json.Marshal(&eventMessage{ac.GetState(), message})
if err != nil {
consoleLog.Errorf("Failed to json-ify %+v, %s", ac, message)
return
}

socket.WriteMessage(websocket.TextMessage, payload)
}

type summaryItem struct {
Expand Down
8 changes: 8 additions & 0 deletions commands_buy.go
Original file line number Diff line number Diff line change
Expand Up @@ -143,3 +143,11 @@ func (b buyCmd) RollBack() {
func (b buyCmd) IsExpired() bool {
return time.Now().After(b.expiresAt)
}

func (b buyCmd) GetState() pendingTxState {
return pendingTxState{
Stock: b.stock,
Amount: b.purchaseAmount.String(),
ExpiresAt: b.expiresAt.Format("15:04:05 Jan _2"),
}
}
8 changes: 8 additions & 0 deletions commands_sell.go
Original file line number Diff line number Diff line change
Expand Up @@ -143,3 +143,11 @@ func (s sellCmd) RollBack() {
func (s sellCmd) IsExpired() bool {
return time.Now().After(s.expiresAt)
}

func (s sellCmd) GetState() pendingTxState {
return pendingTxState{
Stock: s.stock,
Amount: s.profit.String(),
ExpiresAt: s.expiresAt.Format("15:04:05 Jan _2"),
}
}
7 changes: 7 additions & 0 deletions pendingTx.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
package main

type pendingTxState struct {
Stock string `json:"stock"`
Amount string `json:"amount"`
ExpiresAt string `json:"expiresAt"`
}

type pendingTx interface {
Commit()
RollBack()
IsExpired() bool
GetState() pendingTxState
}
16 changes: 9 additions & 7 deletions static/scripts.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,16 @@ function doAuth(rawData) {
};
conn.onmessage = function (evt) {
jsonData = JSON.parse(evt.data)
var messages = jsonData["message"].split('\n');
for (var i = 0; i < messages.length; i++) {
var item = document.createElement("div");
item.innerText = messages[i];
appendLog(item);

message = jsonData["message"]
if (message !== "") {
var item = document.createElement("div");
item.innerText = message;
appendLog(item)
}
userData = jsonData["account"].split(",")
document.getElementById("balance").innerHTML = userData[1]

userData = jsonData["account"]
document.getElementById("balance").innerHTML = userData["balance"]
};
} else {
var item = document.createElement("div");
Expand Down