public void Send(BlDataStruct eventReport) { var eventReportAttr = GetEventreportAttribute(eventReport); if (eventReportAttr == null) { throw new Exception("Event report must have EventReportAttribute"); } var eventReportData = new EventReportEncoder(eventReportAttr.EventReportType, eventReport); eventReportData.SenderId = eventReport.SenderId; eventReportData.ReceiverId = eventReport.ReceiverId; foreach (var field in eventReport.GetType().GetFields()) { if (field.Name == "SenderId" || field.Name == "ReceiverId") { continue; } var value = field.GetValue(eventReport); eventReportData.Write(value, field); } NetSimAgent.Instance.SendEventReportInteraction(ExerciseConnection.ExerciseConnectionPtr, eventReportData.EventReportPduPtr); }
private void EventReportReceived(uint eventType, IntPtr pduPtr) { if (subscribersByEventType.ContainsKey(eventType) && subscribersByEventType[eventType].Count > 0) { if (eventReportsTypes.ContainsKey(eventType)) { Type eventReportType = eventReportsTypes[eventType]; BlDataStruct o = (BlDataStruct)Activator.CreateInstance(eventReportType); var eventReportData = new EventReportEncoder(pduPtr, o); o.SenderId = eventReportData.SenderId; o.ReceiverId = eventReportData.ReceiverId; foreach (var field in eventReportType.GetFields()) { field.SetValue(o, eventReportData.Read(field.FieldType, field)); } foreach (var subscriber in subscribersByEventType[eventType]) { subscriber(o); } } } }