當前位置: 首頁>>代碼示例>>Golang>>正文


Golang Socket.RecvEvent方法代碼示例

本文整理匯總了Golang中github.com/pebbe/zmq4.Socket.RecvEvent方法的典型用法代碼示例。如果您正苦於以下問題:Golang Socket.RecvEvent方法的具體用法?Golang Socket.RecvEvent怎麽用?Golang Socket.RecvEvent使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在github.com/pebbe/zmq4.Socket的用法示例。


在下文中一共展示了Socket.RecvEvent方法的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。

示例1: dealMonitorEvent

/******************************************************************************
* 概述:     事件處理
* 函數名:    dealMonitorEvent
* 返回值:    error
* 參數列表:  參數名          參數類型      取值範圍     描述
*            isReq          bool                     是否為req事件
*
*******************************************************************************/
func (this *ZmqSocket) dealMonitorEvent(s *zmq4.Socket, isReq bool) error {
	log4.Debug("start dealMonitorEvent...")
	for {
		a, b, c, err := s.RecvEvent(0)
		//if runtime.GOOS == "windows" && len(b) == 0 && c == 0 {
		//	log4.Debug("monitor eagan windows")
		//	return nil
		//}
		if err != nil {
			errno1 := zmq4.AsErrno(err)
			switch errno1 {
			case zmq4.Errno(syscall.EAGAIN):
				log4.Debug("monitor eagan ")
				return nil
			case zmq4.Errno(syscall.EINTR):
				log4.Debug("monitor EINTR")
				continue
			default:
				log4.Debug("zmq req Get err %v, %d!", errno1, errno1)
			}
		}
		if a == 0 {
			//			log4.Debug("monitor return")
			return nil
		}
		switch a {
		case zmq4.EVENT_CONNECTED:
			log4.Info("sub or req monitor event CONNECTED, url:%s %s", this.mreqUrl, this.mreqUrl)
			this.mchooseMutex.Lock()
			defer this.mchooseMutex.Unlock()
			if isReq {
				this.mreqOK = true
			} else {
				this.msubOK = true
			}
			if this.mstateChFlag && this.mreqOK && this.msubOK {
				this.mstateChFlag = false
				select {
				case this.mstateCh <- true:
				default:
				}
			}
			//			this.mok++
		case zmq4.EVENT_DISCONNECTED:
			log4.Error("sub or req monitor event DISCONNECTED, url:%s %s", this.mreqUrl, this.mreqUrl)
			this.mchooseMutex.Lock()
			defer this.mchooseMutex.Unlock()
			if isReq {
				this.mreqOK = false
			} else {
				this.msubOK = false
			}
			//			this.mok--
			if this.mChoose {
				this.mChoose = false
				topics := this.mzmq.MdataCache.GetSdsTopic()
				for i := 0; i < len(*topics); i++ {
					if err := this.msubSocket.SetUnsubscribe((*topics)[i]); err != nil {
						log4.Error("SetUnSubscribe(%s) falied, %s", (*topics)[i], err.Error())
					}
				}
				this.mzmq.Mevent.UpdateWorkSocket()
			}
		case zmq4.EVENT_CLOSED:
			//			this.mchooseMutex.Lock()
			//			this.mok
			//			if this.mChoose{
			//				this.mChoose = false
			//				this.mevent.UpdateWorkSocket()
			//			log4.Error("sdssdk zmqreq monitor event CLOSED", b, c)
			//			}
			//			this.mchooseMutex.UnLock()
		default:
			log4.Debug("zmqreq monitor unknow event err", a, b, c, err)
		}
	}
	return nil

}
開發者ID:EdXu,項目名稱:Service-discovery-service-sds-,代碼行數:87,代碼來源:sdk_socket.go


注:本文中的github.com/pebbe/zmq4.Socket.RecvEvent方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。