github.com/dolotech/hongbao@v0.0.0-20191130105438-fd59d7a5dda5/src/logic/websocket_client.go (about)

     1  package logic
     2  
     3  import (
     4  	"data"
     5  	"fmt"
     6  	"github.com/golang/glog"
     7  	"github.com/gorilla/websocket"
     8  	jsoniter "github.com/json-iterator/go"
     9  	"log"
    10  	"math/rand"
    11  	"net/url"
    12  	"strconv"
    13  	"sync"
    14  	"time"
    15  	"utils/cfg"
    16  )
    17  
    18  const (
    19  	pongWait = 3 * time.Second
    20  )
    21  
    22  type Resp struct {
    23  	Code    string          `json:"code"`
    24  	Honbao  data.HonbaoTbs  `json:"honbao"`
    25  	Honbaos data.HonbaosTbs `json:"honbaos"`
    26  }
    27  
    28  type Float float64
    29  
    30  func (this Float) Last() int {
    31  	s := this.String()
    32  	l := s[len(s)-1:]
    33  	i, _ := strconv.Atoi(l)
    34  	return i
    35  }
    36  
    37  func (this Float) String() string {
    38  	return fmt.Sprintf("%.2f", this)
    39  }
    40  
    41  var syc sync.Map
    42  
    43  func Websocet(cookies cfg.Cookies) {
    44  	u := url.URL{Scheme: "ws", Host: cookies.Address, Path: "/"}
    45  	log.Printf("connecting to %s", u.String())
    46  
    47  	c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
    48  	if err != nil {
    49  		log.Fatal("dial:", err)
    50  	}
    51  	defer c.Close()
    52  
    53  	for {
    54  		c.SetReadDeadline(time.Now().Add(pongWait))
    55  		_, message, err := c.ReadMessage()
    56  		if err != nil {
    57  			glog.Info("read:", err)
    58  			return
    59  		}
    60  
    61  		r := rand.Int31n(int32(len(cookies.Cookie)))
    62  
    63  		ParseData(message,	cookies.API,cookies.Cookie[r])
    64  	}
    65  }
    66  
    67  func ParseData(message []byte,addr ,cookie string)  {
    68  	any := jsoniter.Get(message)
    69  
    70  	if any.Get("code").ToString() == "ok" {
    71  		d := &Resp{}
    72  		any.ToVal(d)
    73  
    74  		honbao := d.Honbao
    75  		honbaos := d.Honbaos
    76  		//go honbao.Save()
    77  		//go honbaos.Save()
    78  
    79  		for i := 0; i < len(honbao); i++ {
    80  			v := honbao[i]
    81  			//glog.Info(v.Number)
    82  			count:=0
    83  			leiCount:=0
    84  			var moneyLeft float64
    85  			for _, value := range honbaos {
    86  				if value.HbId == v.Id {
    87  					moneyLeft += value.GetMoney()
    88  					count ++
    89  				}
    90  				if value.Zlei == 1&& "dbca9"!=value.Uid{
    91  					//glog.Info(value.Nickname,value.Uid)
    92  					leiCount = 1
    93  					break
    94  				}
    95  			}
    96  
    97  			//抢包处理
    98  			//if count==5{
    99  			if leiCount==1{
   100  				if _, ok := syc.Load(v.Id); !ok {
   101  					syc.Store(v.Id, struct{}{})
   102  					money := v.GetMoney()
   103  					if Float(money - moneyLeft).Last() != v.Lei {
   104  						//r := rand.Int31n(int32(len(cookies.Cookie)))
   105  						//time.AfterFunc(time.Millisecond*100, func() {
   106  							go Http(addr, strconv.Itoa(int(v.Id)),cookie,v)
   107  						//})
   108  					}
   109  				}
   110  			}
   111  		}
   112  	}
   113  }