A Push Client is the central point where updates are delivered.
Note: Push Client Sample is provided as well in the Data Manager Connect Distributions for Java and .NET. Available online for the closed user group at https://www.vwd.com/ .
using System;
using System.Collections.Generic;
{
class SamplePushClient : PushClient
{
public SamplePushClient(string name) : base(name)
{
}
public override void ProcessUpdates(List<Gevasys.DataCore.Core.Protocol.UpdateMessage> updates)
{
foreach (UpdateMessage update in updates)
{
switch (update.MessageType)
{
case BaseBinaryMessage.MessageType.Proto:
StringField sf = (StringField)update.GetField(1);
if (sf.Value.Equals(MessageIdentifier.NewsMessage))
{
NewsListEntryMessage nm = ProtobufMessageHelper.deserializeNewsMessage(update);
}
break;
case BaseBinaryMessage.MessageType.PartialRecap:
case BaseBinaryMessage.MessageType.Recap:
case BaseBinaryMessage.MessageType.Update:
ProcessUpdateOrRecap(update);
break;
case BaseBinaryMessage.MessageType.RequestStatus:
if (((RequestStatusMessage)update).Status == RequestStatusType.NotDefined)
{
Console.WriteLine("Instrument not definied: " + update.GetInstrument());
}
else if (((RequestStatusMessage)update).Status == RequestStatusType.NoPermission)
{
Console.WriteLine("No permission for instrument: " + update.GetInstrument());
}
else if (((RequestStatusMessage)update).Status == RequestStatusType.NotFound)
{
Console.WriteLine("Instrument not found: " + update.GetInstrument());
}
else if (((RequestStatusMessage)update).Status == RequestStatusType.ServiceNotAvailable)
{
Console.WriteLine("Underlying data service is not available");
}
break;
default:
break;
}
Console.WriteLine(update.toMachineReadableOutput());
}
}
private void ProcessUpdateOrRecap(UpdateMessage update)
{
foreach (BaseField field in update.FieldDict.Values)
{
ProcessFieldUpdate(field);
}
BaseField outField = null;
if (update.TryGetField(80, out outField))
{
ProcessFieldUpdate(outField);
}
}
private void ProcessFieldUpdate(BaseField field)
{
short fieldId = field.FieldId;
switch (field.DataTypeValue)
{
case BaseBinaryMessage.DataType.String:
string stringValue = ((StringField)field).Value;
break;
case BaseBinaryMessage.DataType.DateTime:
DateTime timeValue = ((DateTimeField)field).Value;
break;
case BaseBinaryMessage.DataType.Double:
double doubleValue = ((DoubleField)field).Value;
break;
case BaseBinaryMessage.DataType.Float:
float floatValue = ((FloatField)field).Value;
break;
case BaseBinaryMessage.DataType.Int32:
int intValue = ((IntField)field).Value;
break;
case BaseBinaryMessage.DataType.Long:
long longValue = ((LongField)field).Value;
break;
case BaseBinaryMessage.DataType.Short:
short shortField = ((ShortField)field).Value;
break;
}
}
public override void Update(IConsumer source, ConsumerStateChangedEventArgs arg)
{
if (arg.IsOnline)
{
}
else
{
}
}
}
}