()
| 2097 | } |
| 2098 | |
| 2099 | func (self *Server) msgSendLoop() { |
| 2100 | self.quitWg.Add(1) |
| 2101 | defer self.quitWg.Done() |
| 2102 | |
| 2103 | for { |
| 2104 | select { |
| 2105 | case evt := <-self.msgSendC: |
| 2106 | if self.nonConsensusNode() { |
| 2107 | continue |
| 2108 | } |
| 2109 | payload, err := SerializeVbftMsg(evt.Msg) |
| 2110 | if err != nil { |
| 2111 | log.Errorf("server %d failed to serialized msg (type: %d): %s", self.Index, evt.Msg.Type(), err) |
| 2112 | continue |
| 2113 | } |
| 2114 | if evt.ToPeer == math.MaxUint32 { |
| 2115 | // broadcast |
| 2116 | if err := self.broadcastToAll(payload); err != nil { |
| 2117 | log.Errorf("server %d xmit msg (type %d): %s", |
| 2118 | self.Index, evt.Msg.Type(), err) |
| 2119 | } |
| 2120 | } else { |
| 2121 | if err := self.sendToPeer(evt.ToPeer, payload); err != nil { |
| 2122 | log.Errorf("server %d xmit to peer %d failed: %s", self.Index, evt.ToPeer, err) |
| 2123 | } |
| 2124 | } |
| 2125 | |
| 2126 | case <-self.quitC: |
| 2127 | log.Infof("server %d msgSendLoop quit", self.Index) |
| 2128 | return |
| 2129 | } |
| 2130 | } |
| 2131 | } |
| 2132 | |
| 2133 | //creategovernaceTransaction invoke governance native contract commit_pos |
| 2134 | func (self *Server) creategovernaceTransaction(blkNum uint32) (*types.Transaction, error) { |
no test coverage detected