public void HandleMsg(IFFSocket ffsocket, UInt16 cmd, byte[] strMsg) { var sessionData = ffsocket.GetSessionData(); if (sessionData == null)//!first msg { string strDefaultWorker = "worker#0"; if (m_ffrpc.IsExistNode(strDefaultWorker) == false) { //ffsocket.Close(); FFLog.Error(string.Format("gate worker[{0}] not exist", strDefaultWorker)); FFNet.SendMsg(ffsocket, 256, Util.String2Byte("server is busy!0x0!你好")); return; } Int64 sessionIDNew = ++m_nIDGenerator; ClientInfo cinfo = new ClientInfo() { sockObj = ffsocket, sessionID = sessionIDNew, strAllocWorker = strDefaultWorker }; ffsocket.SetSessionData(sessionIDNew); m_dictClients[sessionIDNew] = cinfo; RouteLogicMsg(cinfo, cmd, strMsg, true); return; } Int64 sessionID = (Int64)sessionData; if (m_dictClients.ContainsKey(sessionID) == false) { return; } ClientInfo cinfo2 = m_dictClients[sessionID]; RouteLogicMsg(cinfo2, cmd, strMsg, false); }
//! 广播消息给所有的client public EmptyMsgRet BroadcastMsgToSession(GateBroadcastMsgToSessionReq reqMsg) { byte[] dataBody = reqMsg.Body; foreach (var cinfo in m_dictClients.Values) { FFNet.SendMsg(cinfo.sockObj, (UInt16)reqMsg.Cmd, dataBody); } return(m_msgEmpty); }
public void HandleMsg(IFFSocket ffsocket, UInt16 cmd, byte[] strMsg) { //FFLog.Trace(string.Format("FFBroker handleMsg....{0}, {1} [{2}]", cmd, strMsg.Length, System.Threading.Thread.CurrentThread.ManagedThreadId.ToString())); try { switch ((FFRPC_CMD)cmd) { case FFRPC_CMD.REGISTER_TO_BROKER_REQ: { RegisterToBrokerReq reqMsg = new RegisterToBrokerReq(); FFNet.DecodeMsg(reqMsg, strMsg); FFLog.Trace(string.Format("FFBroker handleMsg.REGISTER_TO_BROKER_REQ....{0}, {1}", reqMsg.Node_type, reqMsg.Service_name)); if (FFRPC_NODE_TYPE.RPC_NODE == (FFRPC_NODE_TYPE)reqMsg.Node_type) { if (m_brokerData.Service2node_id.ContainsKey(reqMsg.Service_name)) { FFLog.Error(string.Format("FFBroker handleMsg servicename exist....{0}, {1}", reqMsg.Node_type, reqMsg.Service_name)); ffsocket.Close(); return; } Int64 nNodeID = allocNodeId(); m_dictSockets[nNodeID] = ffsocket; m_brokerData.Service2node_id[reqMsg.Service_name] = nNodeID; m_brokerData.Node_id = nNodeID; SyncNodeInfo(m_brokerData, ffsocket); //!广播给所有的子节点 } } break; case FFRPC_CMD.BROKER_ROUTE_MSG: { BrokerRouteMsgReq reqMsg = new BrokerRouteMsgReq(); FFNet.DecodeMsg(reqMsg, strMsg); FFLog.Trace(string.Format("FFBroker.BROKER_ROUTE_MSG service={0},func={1} Callback={2}", reqMsg.Dest_service_name, reqMsg.Dest_msg_name, reqMsg.Callback_id)); if (!m_dictSockets.ContainsKey(reqMsg.Dest_node_id)) { return; } IFFSocket destSocket = m_dictSockets[reqMsg.Dest_node_id]; FFNet.SendMsg(destSocket, (UInt16)FFRPC_CMD.BROKER_TO_CLIENT_MSG, reqMsg); } break; default: break; } } catch (Exception ex) { FFLog.Error("FFBroker.Error:" + ex.Message); } }
//! 转发消息给client public EmptyMsgRet RouteMsgToSession(GateRouteMsgToSessionReq reqMsg) { byte[] dataBody = reqMsg.Body;// Util.String2Byte(reqMsg.Body); foreach (var sessionID in reqMsg.SessionId) { if (m_dictClients.ContainsKey(sessionID) == false) { continue; } ClientInfo cinfo = m_dictClients[sessionID]; FFNet.SendMsg(cinfo.sockObj, (UInt16)reqMsg.Cmd, dataBody); } return(m_msgEmpty); }
public bool ConnectToBroker() { m_socketBroker = FFNet.Connect(m_strBrokerHost, new SocketMsgHandler(HandleMsg), new SocketBrokenHandler(HandleBroken)); if (null == m_socketBroker) { return(false); } RegisterToBrokerReq reqMsg = new RegisterToBrokerReq { Node_type = 2, Service_name = m_strServiceName }; FFNet.SendMsg(m_socketBroker, (UInt16)FFRPC_CMD.REGISTER_TO_BROKER_REQ, reqMsg); return(true); }
private void SyncNodeInfo(RegisterToBrokerRet retMsg, IFFSocket ffsocket)//! 同步给所有的节点,当前的各个节点的信息 { //!广播给所有的子节点 foreach (IFFSocket s in m_dictSockets.Values) { if (s == ffsocket) { retMsg.Register_flag = 1; } else { retMsg.Register_flag = 0; } FFNet.SendMsg(s, (UInt16)FFRPC_CMD.REGISTER_TO_BROKER_RET, retMsg); } }
public void SendToDestNode(BrokerRouteMsgReq retMsg) { retMsg.From_node_id = m_nNodeID; FFNet.SendMsg(m_socketBroker, (UInt16)FFRPC_CMD.BROKER_ROUTE_MSG, retMsg); }