private void ConvertCS1ToEvent()

in Source/RulesEngine/ServiceCallData.cs [297:356]


        private void ConvertCS1ToEvent(Dictionary<string, LinkedList<ServiceCallItem>> servicesHistory)
        {
            var events = servicesHistory["data-vef.xboxlive.com"];
            servicesHistory.Remove("data-vef.xboxlive.com");

            LinkedList<ServiceCallItem> inGameEvents = null;
            if (servicesHistory.ContainsKey("inGameEvents"))
            {
                inGameEvents = servicesHistory["inGameEvents"];
            }
            else
            {
                inGameEvents = new LinkedList<ServiceCallItem>();
                servicesHistory.Add("inGameEvents", inGameEvents);
            }

            // Event Name starts with a string in the form of {Publisher}_{TitleId}
            Regex eventNameMatch = new Regex("[a-zA-z]{4}_[a-zA-Z0-9]{8}");

            foreach(var eventCall in events)
            {
                var requestBody = eventCall.m_reqBody;

                var eventArray = requestBody.Split(Environment.NewLine.ToCharArray());

                foreach(var eventLine in eventArray)
                {
                    var fields = eventLine.Split('|');

                    if(fields.Length < 12)
                    {
                        // This event is not valid as it is missing fields
                        continue;
                    }

                    // The name field is in the form of {Publisher}_{TitleId}.{EventName}
                    var eventNameParts = fields[1].Split('.');

                    if(eventNameParts.Length > 1 && eventNameMatch.IsMatch(eventNameParts[0]))
                    {
                        ServiceCallItem splitEvent = eventCall.Copy();

                        splitEvent.m_host = "inGameEvents";
                        splitEvent.m_eventName = eventNameParts[1];
                        splitEvent.m_reqTimeUTC = (UInt64)DateTime.Parse(fields[2]).ToFileTimeUtc();
                        splitEvent.m_reqBody = String.Empty;
                        splitEvent.m_dimensions = CS1PartBC(fields);
                        splitEvent.m_isInGameEvent = true;
                        
                        if(splitEvent.m_eventName.Contains("MultiplayerRoundStart") || splitEvent.m_eventName.Contains("MultiplayerRoundEnd"))
                        {
                            splitEvent.m_playerSessionId = fields[15];
                            splitEvent.m_multiplayerCorrelationId = fields[16];
                        }

                        inGameEvents.AddLast(splitEvent);
                    }
                }
            }
        }