protected void RaiseMetagameEventOnMainThread(Events.World.MetagameEventEventArgs e) { this.SynchronizationContext.Post(x => { OnMetagameEventChange(e); }, null); }
protected void OnMetagameEventChange(Events.World.MetagameEventEventArgs e) { if (MetagameEventChange != null) { MetagameEventChange(this, e); } }
/// <summary> /// resolves a visually /// </summary> /// <param name="check"></param> /// <returns></returns> private Events.World.Event MatchEvents(Events.World.MetagameEventEventArgs check) { Events.World.Event localCheck = null; for (int i = 0; i < _events.Length; i++) { if (check.Payload.metagame_event_id == _events[i].event_id.ToString()) { localCheck = _events[i]; break; } } if (localCheck != null) { return(localCheck); } else { Console.WriteLine("\n\n-----ERROR PARSING EVENT INFORMATION FROM LOCAL DATABASE-------\n\n"); return(null); } }
private async void PlanetsideService_MetagameEventChangedAsync(object sender, Events.World.MetagameEventEventArgs e) { if (e != null) { VisualPayload passMe; if (e.Payload.metagame_event_id != null) { Console.WriteLine("\n[][] DEBUG [][] EVENT PAYLOAD ON " + e.Payload.World_id + " \n"); var notifServ = Xamarin.Forms.DependencyService.Resolve <INotificationService>(); if (e.Payload.metagame_event_id == "159" || e.Payload.metagame_event_id == "160" || e.Payload.metagame_event_id == "162" || e.Payload.metagame_event_id == "163") { passMe = new VisualNonmetaPayload() { payload = e.Payload, name = fR.FetchFacilityNameFromMasterList(e.Payload.facility_id), zoneId = e.Payload.Zone_id, continent = fR.GetContinentName(e.Payload.Zone_id), event_id = int.Parse(e.Payload.metagame_event_id), eventStatus = e.Payload.metagame_event_state_name, nc = int.Parse(e.Payload.faction_nc), tr = int.Parse(e.Payload.faction_tr), vs = int.Parse(e.Payload.faction_vs) } } ; else { passMe = new VisualEventPayload() { payload = e.Payload, name = fR.FetchFacilityNameFromMasterList(e.Payload.facility_id), zoneId = e.Payload.Zone_id, continent = fR.GetContinentName(e.Payload.Zone_id), event_id = int.Parse(e.Payload.metagame_event_id), eventStatus = e.Payload.metagame_event_state_name, nc = double.Parse(e.Payload.faction_nc), tr = double.Parse(e.Payload.faction_tr), vs = double.Parse(e.Payload.faction_vs) }; } Console.WriteLine("[][] DEBUG [][] EVENT passMe param: " + passMe.continent + " / " + passMe.name + " / " + passMe.payload.new_faction_id + " from " + passMe.payload.old_faction_id + "\n [][] zoneID: " + passMe.zoneId + " REAL ACTION: " + passMe.facilityAction + " on server: " + passMe.payload.World_id); var d = MatchEvents(e); if (d != null //&& e.Payload.World_id == worldId /*uncomment to be server specific*/ && passMe.payload.new_faction_id != 0) { passMe.eventName = d.event_name; string message = ($"{d.event_name} on {d.continent} {e.Payload.metagame_event_state_name} at " + epoch.AddSeconds(e.Payload.Timestamp).ToLocalTime().ToShortTimeString()); await NotifyUserAsync("Planetside Alert", message); subscribedMessages.Add(passMe); } } } }
//public string CreateCommand(int selectedWorld, serviceId) //{ //} async void ListenToWebSocketStuff() { var client = new System.Net.Http.HttpClient { BaseAddress = new Uri("http://1.2.3.4"), DefaultRequestHeaders = { Host = "example.com" } }; using (var clientWebSocket = new ClientWebSocket()) { this.ServiceId = "example"; Uri serverUri = new Uri($"wss://push.planetside2.com/streaming?environment=ps2&service-id=s:trashpanda"); //Uri serverUri = new Uri($"wss://push.planetside2.com/streaming?environment=ps2&service-id=s:{ServiceId}"); await clientWebSocket.ConnectAsync(serverUri, CancellationToken.None); // create our command that we're going to tell the service string s = @"{\042service\042:\042event\042,\042action\042:\042subscribe\042,\042worlds\042:[\0421\042,\0429\042,\04210\042,\04211\042,\04213\042,\04217\042,\04218\042,\04219\042,\04225\042,\0421000\042,\0421001\042],\042eventNames\042:[\042FacilityControl\042,\042MetagameEvent\042]}"; //s = "{'service':'event','action':'subscribe','worlds':['17'],'eventNames':['FacilityControl','MetagameEvent','ContinentLock',ContinentUnlock']}"; s = "{'service':'event','action':'subscribe','worlds':['1','10','13','17','19','25','40'],'eventNames':['FacilityControl','MetagameEvent','ContinentLock',ContinentUnlock']}"; //use json later to be able to parse the this.selectedWorld into the string command. //create a method for turning the data from filterbox into a JSON command as seen above ^ // convert the command into an array of Bytes byte[] bytes = Encoding.UTF8.GetBytes(s); // convert to ArraySegment ArraySegment <byte> buffer = new ArraySegment <byte>(bytes); CancellationToken cancellationToken = CancellationToken.None; //send the command asynchroneously await clientWebSocket.SendAsync(buffer, WebSocketMessageType.Text, true, cancellationToken); List <string> results = new List <string>(); WebSocketReceiveResult result; string resultString = string.Empty; while (IsStarted) { //define the WebSocket result result = await clientWebSocket.ReceiveAsync(buffer, cancellationToken); if (result.EndOfMessage) //we have the full message. now we... { //decode the buffer array to a UTF-8 string resultString = Encoding.UTF8.GetString(buffer.Array, 0, result.Count); //empty the buffer so it's ready for a new message buffer = new ArraySegment <byte>(new byte[1024]); //deserialize the resultString into an object of type ReceivedMsg Message message = Newtonsoft.Json.JsonConvert.DeserializeObject <Message>(resultString); //filter out the help message if (message.Service == "push") { Console.WriteLine("CONNECTION STATUS - - - - - " + message.ToString()); var args = new Events.MessageEventArgs() { connectionStatus = message.connectionStatus }; RaiseConnectionStateOnMainThread(args); Console.WriteLine("---------------------EVENTRAISED ON SERVICE END-----------------------------"); //this event just will NOT raise on the other page for some reason } if (message.Service != "push" && !(message.Service == "event" && message.Action == "help")) { Events.ReceivedMsg rMsg = Newtonsoft.Json.JsonConvert.DeserializeObject <Events.ReceivedMsg>(resultString); if (rMsg.Service == "event" && rMsg.Type == "serviceMessage") { //okay, it's an event. That's the first criteria //Events.Payload.EventPayload payload = message.newPayload; //if rMsg.newPayload.Event_name matches any entry in the eventsWeWant var payload = rMsg.newPayload; //if it's not specified for whatever reason, assume user wants FacilityControlArgs if (eventsWeWant == null) { eventsWeWant = new List <string>(); this.eventsWeWant.Add("FacilityControl"); this.eventsWeWant.Add("MetagameEvent"); } int position = Array.IndexOf(eventsWeWant.ToArray(), payload.Event_name); if (position > -1) { //get the event payload Console.WriteLine("\nPAYLOAD RECEIVED " + rMsg.newPayload.ToString()); } if (payload.Event_name == "FacilityControl") { //there is a lot of invalid information that we need to filter out with if statements if ((payload.old_faction_id != 0) && (payload.duration_held < payload.Timestamp)) { Events.FacilityControlChangedEvent newFCevent = Newtonsoft.Json.JsonConvert.DeserializeObject <Events.FacilityControlChangedEvent>(innerPayloadJSON); //raise event var args = new FacilityControlChangedEventArgs() { Payload = payload }; RaiseFacilityControlOnMainThread(args); } } //Generic event if (payload.Event_name == "MetagameEvent") { Events.MetagameEventEvent newMgEvent = Newtonsoft.Json.JsonConvert.DeserializeObject <Events.MetagameEventEvent>(innerPayloadJSON); //raise event var args = new Events.World.MetagameEventEventArgs() { Payload = payload }; RaiseMetagameEventOnMainThread(args); } //ContinentLock if (payload.Event_name == "MetagameEvent" && payload.metagame_event_state_name == "ended") { Events.ContinentLockEvent newMgEvent = Newtonsoft.Json.JsonConvert.DeserializeObject <Events.ContinentLockEvent>(innerPayloadJSON); //raise event var args = new Events.World.ContinentLockEventArgs() { Payload = payload }; RaiseContinentLockEventOnMainThread(args); } //ContinentUnlock if (payload.Event_name == "MetagameEvent" && payload.metagame_event_state_name == "started") { Events.ContinentUnlockEvent newMgEvent = Newtonsoft.Json.JsonConvert.DeserializeObject <Events.ContinentUnlockEvent>(innerPayloadJSON); //raise event var args = new Events.World.ContinentUnlockEventArgs() { Payload = payload }; RaiseContinentUnlockEventOnMainThread(args); } } } //await SendTestCommand } } } }