protected override void AddSubParsersInternal() { base.AddSubParsersInternal(); // GIM this.AddBufferEntityParser((int)FF_GmuId_TargetIds.GIM, (int)FF_AppId_TargetIds.GIM, new FFParser_Tgt_MC300_GIM_G2H()); // Status Block (GMU Events) this.AddBufferEntityParser((int)FF_GmuId_TargetIds.StatusBlock, (int)FF_AppId_TargetIds.StatusBlock, new FFParser_Tgt_MC300_GMUEvent_G2H()); // Meters this.AddBufferEntityParser((int)FF_GmuId_TargetIds.MeterBlock, (int)FF_AppId_TargetIds.MeterBlock, new FFParser_Tgt_MC300_AccountingMeters_G2H()); // Security this.AddBufferEntityParser(FreeformHelper.CreateCombinedId((int)FF_GmuId_SessionIds.Security, true, (int)FF_GmuId_TargetIds.Security, true), FreeformHelper.CreateCombinedId((int)FF_AppId_SessionIds.Security, true, (int)FF_AppId_TargetIds.Security, true), new FFParser_Tgt_MC300_Security_G2H()); this.AddBufferEntityParser(FreeformHelper.CreateCombinedId((int)FF_GmuId_SessionIds.ECash, true, (int)FF_GmuId_TargetIds.Security, true), FreeformHelper.CreateCombinedId((int)FF_AppId_SessionIds.ECash, true, (int)FF_AppId_TargetIds.Security, true), new FFParser_Tgt_MC300_Security_G2H()); this.AddBufferEntityParser(FreeformHelper.CreateCombinedId((int)FF_GmuId_SessionIds.Security, true, (int)FF_GmuId_TargetIds.Security, false), FreeformHelper.CreateCombinedId((int)FF_AppId_SessionIds.Security, true, (int)FF_AppId_TargetIds.Security, false), new FFParser_Tgt_MC300_Security_G2H()); this.AddBufferEntityParser(FreeformHelper.CreateCombinedId((int)FF_GmuId_SessionIds.ECash, true, (int)FF_GmuId_TargetIds.Security, false), FreeformHelper.CreateCombinedId((int)FF_AppId_SessionIds.ECash, true, (int)FF_AppId_TargetIds.Security, false), new FFParser_Tgt_MC300_Security_G2H()); // Tickets this.AddBufferEntityParser((int)FF_GmuId_TargetIds.Tickets, (int)FF_AppId_TargetIds.Tickets, new FFParser_Tgt_MC300_TicketInfo_G2H()); this.AddBufferEntityParser(FreeformHelper.CreateRequestResponseId((int)FF_GmuId_TargetIds.Tickets, true), FreeformHelper.CreateRequestResponseId((int)FF_AppId_TargetIds.Tickets, true), new FFParser_Tgt_MC300_TicketInfo_G2H()); this.AddBufferEntityParser(FreeformHelper.CreateCombinedId((int)FF_GmuId_SessionIds.Tickets, true, (int)FF_GmuId_TargetIds.Security, true), FreeformHelper.CreateCombinedId((int)FF_AppId_SessionIds.Tickets, true, (int)FF_AppId_TargetIds.Security, true), new FFParser_Tgt_MC300_Encrypted_G2H()); // ECash this.AddBufferEntityParser((int)FF_GmuId_TargetIds.ECash, (int)FF_AppId_TargetIds.ECash, new FFParser_Tgt_MC300_EFT_G2H()); this.AddBufferEntityParser(FreeformHelper.CreateCombinedId((int)FF_GmuId_SessionIds.ECash, false, (int)FF_GmuId_TargetIds.Security, true), FreeformHelper.CreateCombinedId((int)FF_AppId_SessionIds.ECash, false, (int)FF_AppId_TargetIds.Security, true), new FFParser_Tgt_MC300_Encrypted_G2H()); // GMU Var Action this.AddBufferEntityParser((int)FF_GmuId_TargetIds.GMUVariableAction, (int)FF_AppId_TargetIds.GMUVariableAction, new FFParser_Tgt_MC300_GMUVarAction_G2H()); // Game Message this.AddBufferEntityParser((int)FF_GmuId_TargetIds.GameMessage, (int)FF_AppId_TargetIds.GameMessage, new FFParser_Tgt_MC300_GameMessage_G2H()); // PID this.AddBufferEntityParser((int)FF_GmuId_TargetIds.PID, (int)FF_AppId_TargetIds.PID, new FFParser_Tgt_MC300_PID_G2H()); }
internal override void ParseEntityInternal(IFreeformEntity entity, ref List <byte> buffer) { IFreeformEntity_MsgTgt tgt = entity as IFreeformEntity_MsgTgt; IFreeformEntity_MsgTgt tgt2 = tgt; if (tgt2 != null) { // has raw data inside the target if (tgt2 is IFFTgt_Override) { buffer.AddRange(tgt2.ToRawData()); return; } int gmuParserId = this.GetTargetId(tgt, out tgt2); int gmuTargetId = gmuParserId.ExtractCombinedId(); bool isSecured = tgt2.IsSecured; bool hasSubTargets = this.HasSubTargets; byte[] buffer2 = null; IFFParser parser = this; IFFParser parserSecured = null; FFParserItem parserItem = this.GetParserItem(null, gmuParserId); if (parserItem == null) { if (tgt2.Parent != null && tgt2.Parent is IFreeformEntity_Msg) { int id = FreeformHelper.CreateCombinedId(tgt2.Parent.UniqueEntityId.GetGmuIdInt8(), gmuParserId); parserItem = this.GetParserItem(null, id); } } // found? if (parserItem != null) { // parser IFFParser parser2 = parserItem.GetParser(this.FlowInitiation); if (parser2 != null) { if (tgt2.Targets != null && tgt2.Targets.Count > 0) { buffer2 = parser2.ParseTarget(tgt2); } else { parser = parser2; } } // secured parser if (isSecured) { int securityId = FreeformHelper.CreateCombinedId(entity.Parent as IFreeformEntity_Msg, SECURITY_ID, false); FFParserItem parserItem2 = this.GetParserItem(null, securityId); if (parserItem2 != null) { parserSecured = parserItem2.GetParser(this.FlowInitiation); } } } bool skipTargetInfo = parser.SkipTargetInfo; if (buffer2 == null) { List <byte> data = new List <byte>(); parser.GetTargetData(tgt2, ref data); buffer2 = data.ToArray(); } // encrypt the target if (isSecured && parserSecured != null) { List <byte> bufferToEncrypt = new List <byte>(); this.AddTargetToBuffer(ref bufferToEncrypt, (byte)gmuTargetId, buffer2, true, false); parserSecured.GetTargetData(tgt2, ref bufferToEncrypt); buffer2 = bufferToEncrypt.ToArray(); gmuTargetId = SECURITY_ID; hasSubTargets = true; skipTargetInfo = false; } this.AddTargetToBuffer(ref buffer, (byte)gmuTargetId, buffer2, hasSubTargets, skipTargetInfo); } }