/// <summary>
        /// Serializes the object to JSON.
        /// </summary>
        /// <param name="writer">The <see cref="T: Newtonsoft.Json.JsonWriter" /> to write to.</param>
        /// <param name="obj">The object to serialize to JSON.</param>
        internal static void Serialize(JsonWriter writer, ServiceCreatedEvent obj)
        {
            // Required properties are always serialized, optional properties are serialized when not null.
            writer.WriteStartObject();
            writer.WriteProperty(obj.Kind, "Kind", FabricEventKindConverter.Serialize);
            writer.WriteProperty(obj.EventInstanceId, "EventInstanceId", JsonWriterExtensions.WriteGuidValue);
            writer.WriteProperty(obj.TimeStamp, "TimeStamp", JsonWriterExtensions.WriteDateTimeValue);
            writer.WriteProperty(obj.ServiceId, "ServiceId", JsonWriterExtensions.WriteStringValue);
            writer.WriteProperty(obj.ServiceTypeName, "ServiceTypeName", JsonWriterExtensions.WriteStringValue);
            writer.WriteProperty(obj.ApplicationName, "ApplicationName", JsonWriterExtensions.WriteStringValue);
            writer.WriteProperty(obj.ApplicationTypeName, "ApplicationTypeName", JsonWriterExtensions.WriteStringValue);
            writer.WriteProperty(obj.ServiceInstance, "ServiceInstance", JsonWriterExtensions.WriteLongValue);
            writer.WriteProperty(obj.IsStateful, "IsStateful", JsonWriterExtensions.WriteBoolValue);
            writer.WriteProperty(obj.PartitionCount, "PartitionCount", JsonWriterExtensions.WriteIntValue);
            writer.WriteProperty(obj.TargetReplicaSetSize, "TargetReplicaSetSize", JsonWriterExtensions.WriteIntValue);
            writer.WriteProperty(obj.MinReplicaSetSize, "MinReplicaSetSize", JsonWriterExtensions.WriteIntValue);
            writer.WriteProperty(obj.ServicePackageVersion, "ServicePackageVersion", JsonWriterExtensions.WriteStringValue);
            writer.WriteProperty(obj.PartitionId, "PartitionId", PartitionIdConverter.Serialize);
            if (obj.Category != null)
            {
                writer.WriteProperty(obj.Category, "Category", JsonWriterExtensions.WriteStringValue);
            }

            if (obj.HasCorrelatedEvents != null)
            {
                writer.WriteProperty(obj.HasCorrelatedEvents, "HasCorrelatedEvents", JsonWriterExtensions.WriteBoolValue);
            }

            writer.WriteEndObject();
        }
        public RemoteOnlineService()
        {
            _pubsub          = PubSubEvents.Singleton;
            _clientGroupList = ClientGroupCollection.Instance;
            _clientGroupList[MagicStrings.DefaultGroup].OnlineClients = DefaultClientList;
            _remoteUpdateSenderAdapterDic = new Dictionary <int, FileSendProxy>();
            _pushService = OperationContext.Current.GetCallbackChannel <IPushServiceCallback>();
            _tokenList   = new ClientTokenList();
            ServerPushList.Add(_pushService);
            var scEvent = new ServiceCreatedEvent <RemoteOnlineService>(this);

            _pubsub.Publish(scEvent);
        }