private void Deliver(Action <Response> act, ResponseEventArgs e) { if (act != null) { act(e.Response); } EventHandler <ResponseEventArgs> h = Respond; if (h != null) { h(this, e); } }
//on receive nomal coap response void request_Responded(Object sender, ResponseEventArgs e) { DisplayMessage(e.Response); }
//on receive observe response void observe_Responded(Object sender, ResponseEventArgs e) { if (coapWebSocektService.SessionList.Contains(observedSession)) coapWebSocektService.SendToObserved(e.Response.PayloadString, observedSession); //when the client is closed,cancel the observe else { PerformCoAP(Request.Method.GET, _observingRequest.URI, false, false); Console.WriteLine("Websocket链接关闭"); this.clientSocket.Disconnect(false); this.clientSocket.Dispose(); } }
void UpdateMetrics(object sender, ResponseEventArgs e) { lock (this) { Request request = sender as Request; if (request != null) { Metrics.BytesSent.Value += request.Bytes.Length; Metrics.BytesReceived.Value += e.Response.PayloadSize; ++Metrics.TransactionCount.Value; BusinessLogicFactory.Events.MetricsUpdate(this); // TODO: How often should metrics be updated? // TODO: Handle retransmit, rejected etc } } }
void ObserveResponse(object sender, ResponseEventArgs e) { lock (this) { #if DEBUG Console.WriteLine("NOTIFY Recieved"); #endif Request request = sender as Request; if (request != null) { Console.WriteLine(request.UriPath); ObserveRequest observeRequest = null; for (int index = 0; index < _ObserveRequests.Count; index++) { if (_ObserveRequests[index].Request.UriPath == request.UriPath) { observeRequest = _ObserveRequests[index]; break; } } string[] objectInstanceResource = request.UriPath.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries); if (observeRequest != null) { #if DEBUG if (observeRequest.PropertyDefinition != null) Console.WriteLine(observeRequest.PropertyDefinition.Name); #endif if ((e.Response.ContentType == MediaType.TextPlain) || (e.Response.ContentType == TlvConstant.CONTENT_TYPE_PLAIN)) { #if DEBUG string payload = Encoding.UTF8.GetString(e.Response.Payload); Console.WriteLine(payload); #endif } else if (e.Response.ContentType == TlvConstant.CONTENT_TYPE_TLV) { Object lwm2mObject = null; if (e.Response.Payload != null) { TlvReader reader = new TlvReader(e.Response.Payload); lwm2mObject = ObjectUtils.ParseObject(observeRequest.ObjectDefinition, reader); } if ((lwm2mObject != null) && (objectInstanceResource.Length > 1) && (lwm2mObject.InstanceID == null)) { // Instance ID not in TLV, take from request URI lwm2mObject.InstanceID = objectInstanceResource[1]; } if ((lwm2mObject != null) && (lwm2mObject.Properties.Count > 0)) { #if DEBUG foreach (Property item in lwm2mObject.Properties) { if (observeRequest.PropertyDefinition == null || item.PropertyDefinitionID == observeRequest.PropertyDefinition.PropertyDefinitionID) { if (item.Value != null) { Console.WriteLine(item.Value.Value); } else if (item.Values != null) { string[] values = new string[item.Values.Count]; int index = 0; foreach (PropertyValue value in item.Values) { Console.WriteLine(value.Value); values[index++] = value.Value; } } break; } } #endif } if (lwm2mObject != null) BusinessLogicFactory.Events.ObservationNotify(this, lwm2mObject); } } } } }
private void Deliver(Action<Response> act, ResponseEventArgs e) { if (act != null) act(e.Response); EventHandler<ResponseEventArgs> h = Respond; if (h != null) h(this, e); }