Example #1
0
func (this Handle) DealMsg(session *link.Session, msg []byte) {
	msgID := binary.GetUint16LE(msg[:2])
	var protoMsg protos.ProtoMsg
	if systemProto.IsValidID(msgID) || logProto.IsValidID(msgID) || gameProto.IsValidID(msgID) {
		protoMsg = protos.UnmarshalProtoMsg(msg)
	} else if dbProto.IsValidID(msgID) {
		protoMsg = dbProto.UnmarshalProtoMsg(msg)
	}

	if protoMsg == protos.NullProtoMsg {
		ERR("收到Proto未处理消息:", msgID)
		return
	}

	if f, exists := this[msgID]; exists {
		f(session, protoMsg)
	} else {
		ERR("收到Handle未处理消息:", msgID)
	}
}
//处理接收到的消息
func dealReceiveMsgC2S(session *link.Session, msg packet.RAW) {
	if len(msg) < 2 {
		return
	}

	msgID := binary.GetUint16LE(msg[:2])
	if systemProto.IsValidID(msgID) {
		dealReceiveSystemMsgC2S(session, msg)
	} else if gameProto.IsValidID(msgID) {
		if msgID%2 == 1 {
			//C2S消息,发送到GameServer或者LoginServer
			if gameProto.IsValidLoginID(msgID) {
				sendGameMsg("LoginServer", msg)
			} else {
				sendGameMsg("GameServer", msg)
			}
		} else {
			//S2C消息,发送到GateServer
			sendGameMsg("GateServer", msg)
		}
	}
}