Пример #1
0
        public bool SendMessage(string machineName, int port, PackageMessage message)
        {
            var keyString = machineName + ":" + port;

            dicTcpSendClients.TryGetValue(keyString, out TcpClient tcpClient);
            try
            {
                if (tcpClient == null)
                {
                    tcpClient = new TcpClient(machineName, port);
                    dicTcpSendClients.TryAdd(keyString, tcpClient);
                }
                else if (tcpClient.Connected == false)
                {
                    dicTcpSendClients.TryRemove(keyString, out tcpClient);
                    return(false);
                }
                Byte[]        data   = System.Text.Encoding.Unicode.GetBytes(message.ToJsonSerializeString());
                NetworkStream stream = tcpClient.GetStream();
                stream.Write(data, 0, data.Length);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                return(false);
            }
            return(true);
        }
        public async void PublishPackageMessageAsync(PackageMessage packageMessage)
        {
            var text = JsonConvert.SerializeObject(packageMessage, Formatting.None);
            await Ipfs.PubSub.PublishAsync(packageMessage.Scope, text);

            logger.LogInformation($"PackageMessage {packageMessage.File} has been published to network.");
        }
Пример #3
0
        private async Task Delete(PackageMessage message)
        {
            var task = new DeletePackageTask(notifier, support);

            // ReSharper disable RedundantArgumentName
            await ProcessPackage(
                message.UserInfo, message.FeedName, message.PackageName,
                PackageState.DeletingQueued, PackageState.DamagedDeleting,
                tryWithPackageItemBefore : async pi =>
            {
                Trace.TraceInformation("Deleting package {0}", pi);
                // ReSharper disable once ConvertToLambdaExpression
                return(await pi.Move(PackageState.Deleting, pi.Name));
            },
                tryWithPackage : async(pi, p) =>
            {
                await task.DeletePackage(message.UserInfo, pi.Feed, pi.Name, pi, p);
            }, tryWithPackageItemAfter : async pi =>
            {
                await pi.Delete();
                Trace.TraceInformation("Finished deleting package {0}", pi);
            });

            // ReSharper restore RedundantArgumentName
        }
Пример #4
0
        public bool Validate(PackageMessage message, out IList <string> errors)
        {
            errors = new List <string>();

            if (string.IsNullOrWhiteSpace(message.File))
            {
                errors.Add("Path is null or empty.");
            }

            if (string.IsNullOrWhiteSpace(message.ServerId))
            {
                errors.Add("ServerId is null or empty.");
            }

            if (message.ServerSignature == null || message.ServerSignature.Length == 0)
            {
                errors.Add("Server signature is null or empty.");
            }

            if (!serverIdentityService.Derivation.VerifySignatureMessage(message.ToBinary().ConvertToBase64(), message.ServerSignature, message.ServerId))
            {
                errors.Add("Server signature do not match address and/or binary of message.");
            }

            return(errors.Count == 0);
        }
Пример #5
0
        private async Task Index(PackageMessage message)
        {
            var task = new IndexPackageTask(configuration, notifier, support, addInfoBuilder, pdbStoreManager, fileCompressor);

            // ReSharper disable RedundantArgumentName
            await ProcessPackage(
                message.UserInfo, message.FeedName, message.PackageName,
                PackageState.IndexingQueued, PackageState.DamagedIndexing,
                tryWithPackageItemBefore : async pi =>
            {
                Trace.TraceInformation("Indexing package {0}", pi);
                // ReSharper disable once ConvertToLambdaExpression
                return(await pi.Move(PackageState.Indexing, pi.Name));
            },
                tryWithPackage : async(pi, p) =>
            {
                await task.IndexPackage(message.UserInfo, pi.Feed, pi.Name, pi, p);
            },
                tryWithPackageItemAfter : async pi =>
            {
                await pi.Delete();
                Trace.TraceInformation("Finished indexing package {0}", pi);
            });

            // ReSharper restore RedundantArgumentName
        }
Пример #6
0
        protected virtual void HandleReceviceMessage()
        {
            for (int i = 0; i < HandlerMessageCount; i++)
            {
                new Task(() =>
                {
                    PackageMessage receviceMessage = null;
                    do
                    {
                        receviceMessage = connect.GetReceviceMessage();
                        if (RaisePackageMessage != null)
                        {
                            RaisePackageMessage(receviceMessage);
                        }

                        try
                        {
                            foreach (var handler in MessageHandlers)
                            {
                                if (!handler.HanderMessage(receviceMessage.Message))
                                {
                                    break;
                                }
                            }
                        }
                        catch
                        {
                        }
                    } while (receviceMessage != null);
                }).Start();
            }
        }
        public void One()
        {
            var package = TestPackage.CreateBinary(1);

            var storeNotifications = Mediator.SendAndWait(new StorePackageCommand(package));

            Assert.IsTrue(storeNotifications[0] is PackageStoredNotification);

            var notification = storeNotifications.FindLast <PackageStoredNotification>();


            var message = new PackageMessage
            {
                File     = notification.File,
                Scope    = package.Scopes ?? "twitter.com",
                ServerId = ServerIdentityService.Id
            };

            message.ServerSignature = ServerIdentityService.Sign(message.ToBinary());


            var packageB = Mediator.SendAndWait(new FetchPackageCommand(message.File));

            //Assert.AreEqual(3, notifications.Count, "There should be one notifications");

            //Assert.IsTrue(notifications[0] is ClaimAddedNotification);
            //Assert.IsTrue(notifications[1] is PackageAddedNotification);
            Assert.IsNotNull(packageB);
        }
        public async Task Signal(PackageMessage message)
        {
            Trace.TraceInformation("Signaling message {0}", message);
            var file = Path.Combine(configuration.RootPath, Guid.NewGuid() + ".tmp");

            File.WriteAllText(file, JsonConvert.SerializeObject(message));
            File.Move(file, Path.ChangeExtension(file, ".run"));
        }
Пример #9
0
        public async Task Signal(PackageMessage message)
        {
            var queue = queueClient.GetQueueReference(QueueName);
            await queue.CreateIfNotExistsAsync();

            var queueMessage = new CloudQueueMessage(JsonConvert.SerializeObject(message));
            await queue.AddMessageAsync(queueMessage);
        }
Пример #10
0
 public void Validate(PackageMessage message)
 {
     Validate(message, out IList <string> errors);
     if (errors.Count > 0)
     {
         throw new ApplicationException(string.Join(" - ", errors));
     }
 }
Пример #11
0
        private static async void CheckForChanges(Object obj, EventArgs args)
        {
            timer2.Stop();
            try
            {
                // Check logged in
                if (steamClient.IsConnected && isLoggedOn)
                {
                    // Get the last change ID
                    if (previousChangeNumber == 0 && File.Exists(LastChangeFile))
                    {
                        var contents = File.ReadAllText(LastChangeFile);
                        previousChangeNumber = contents == "" ? 0 : UInt32.Parse(contents);
                    }

                    // Get latest changes. If more than 5000, returns 0
                    var JobID    = steamApps.PICSGetChangesSince(previousChangeNumber, true, true);
                    var callback = await JobID;

                    if (previousChangeNumber < callback.CurrentChangeNumber)
                    {
                        Log.Info(
                            $"{callback.CurrentChangeNumber - callback.LastChangeNumber:N0} changes, {callback.AppChanges.Count} apps, {callback.PackageChanges.Count} packages"
                            );

                        // Save apps
                        foreach (var appID in callback.AppChanges.Keys)
                        {
                            var appPayload = AppMessage.create(appID);
                            AbstractConsumer.Produce(AbstractConsumer.queue_cs_apps, appPayload);
                        }

                        // Save packages
                        foreach (var packageID in callback.PackageChanges.Keys)
                        {
                            var packagePayload = PackageMessage.create(packageID);
                            AbstractConsumer.Produce(AbstractConsumer.queue_cs_packages, packagePayload);
                        }

                        // Save changes
                        var changePayload = ChangeMessage.create(callback.CurrentChangeNumber, callback);
                        AbstractConsumer.Produce(AbstractConsumer.queue_go_changes, changePayload);

                        // Update change number
                        previousChangeNumber = callback.CurrentChangeNumber;
                        File.WriteAllText(LastChangeFile, previousChangeNumber.ToString());
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Error("Failed checking for changes - " + ex.Message);
            }
            finally
            {
                timer2.Start();
            }
        }
Пример #12
0
        public bool SendMessage(string machineName, TinctMessage message)
        {
            PackageMessage pmsg = new PackageMessage();

            pmsg.SourceName      = NodeInfo.NodeName;
            pmsg.DestinationName = machineName;
            pmsg.SendTimeStamp   = DateTimeExtension.GetTimeStamp();
            pmsg.Message         = message;
            return(SendMessage(machineName, masterPort, pmsg));
        }
Пример #13
0
        private async Task Retry(PackageMessage message)
        {
            var deleteTask = new DeletePackageTask(notifier, support);

            // ReSharper disable RedundantArgumentName
            if (!await ProcessPackage(
                    message.UserInfo, message.FeedName, message.PackageName,
                    PackageState.Partial, PackageState.DamagedDeleting,
                    tryWithPackageItemBefore: async pi =>
            {
                Trace.TraceInformation("Retrying package {0}", pi);
                return(await pi.Move(PackageState.Deleting, pi.Name));
            },
                    tryWithPackage: async(pi, p) =>
            {
                await deleteTask.DeletePackage(message.UserInfo, pi.Feed, pi.Name, pi, p);
            },
                    tryWithPackageItemAfter: async pi =>
            {
                await pi.Delete();
            }))
            // ReSharper restore RedundantArgumentName
            {
                return;
            }

            var indexTask = new IndexPackageTask(configuration, notifier, support, addInfoBuilder, pdbStoreManager, fileCompressor);

            // ReSharper disable RedundantArgumentName
            if (!await ProcessPackage(
                    message.UserInfo, message.FeedName, message.PackageName,
                    PackageState.Original, PackageState.DamagedIndexing,
                    tryWithPackageItemBefore: async pi =>
            {
                return(await pi.Copy(PackageState.Indexing, pi.Name));
            },
                    tryWithPackage: async(pi, p) =>
            {
                await indexTask.IndexPackage(message.UserInfo, pi.Feed, pi.Name, pi, p);
            },
                    tryWithPackageItemAfter: async pi =>
            {
                Trace.TraceInformation("Finished retrying package {0}", pi);
                await pi.Delete();
            }))
            // ReSharper restore RedundantArgumentName
            {
                return;
            }
        }
Пример #14
0
        public async Task Process(PackageMessage message)
        {
            var before = DateTime.Now;

            try
            {
                switch (message.PackageState)
                {
                case PackageState.New:
                    await Queue(message);

                    break;

                case PackageState.IndexingQueued:
                    await Index(message);

                    break;

                case PackageState.DeletingQueued:
                    await Delete(message);

                    break;

                case PackageState.Partial:
                    await Retry(message);

                    break;

                case PackageState.Original:
                case PackageState.Indexing:
                case PackageState.Succeded:
                case PackageState.Deleting:
                case PackageState.Deleted:
                    throw new NotSupportedException();

                default:
                    throw new ArgumentOutOfRangeException("packageState", message.PackageState, null);
                }

                support.TrackRequest(message.PackageState, before, DateTime.Now - before, true);
            }
            catch (Exception e)
            {
                support.TrackException(e, new { message });
                support.TrackRequest(message.PackageState, before, DateTime.Now - before, false);
                throw;
            }
        }
Пример #15
0
        private void UpdateSlaveNodeInfo(PackageMessage msg)
        {
            var nodeInfo = SlaveNodes.FirstOrDefault(node => node.NodeName == msg.SourceName);

            if (nodeInfo == null)
            {
                NodeInfo newnodeInfo = new NodeInfo();
                newnodeInfo.LastUpdateTime = msg.ReceviceTimeStamp;
                newnodeInfo.Status         = NodeStatus.Running;
                newnodeInfo.NodeName       = msg.SourceName;
                SlaveNodes.Add(newnodeInfo);
            }
            else
            {
                nodeInfo.LastUpdateTime = msg.ReceviceTimeStamp;
                nodeInfo.Status         = NodeStatus.Running;
                nodeInfo.NodeName       = msg.SourceName;
            }
        }
Пример #16
0
        private async Task Queue(PackageMessage message)
        {
            var         task           = new QueuePackageTask();
            PackageName newPackageName = null;

            // ReSharper disable RedundantArgumentName
            await ProcessPackage(
                message.UserInfo, message.FeedName, message.PackageName,
                PackageState.New, PackageState.DamagedNew,
                tryWithPackageItemBefore : async pi =>
            {
                Trace.TraceInformation("Reading package {0}", pi);
                return(pi);
            },
                tryWithPackage : async(pi, p) =>
            {
                newPackageName = await task.ReadName(message.UserInfo, p);
                await notifier.Starting(message.UserInfo, newPackageName);
            },
                tryWithPackageItemAfter : async pi =>
            {
                Trace.TraceInformation("Queueing package {0} as {1}", pi, newPackageName);

                if (await pi.Copy(PackageState.Original, newPackageName) == null)
                {
                    throw new Exception(string.Format("Failed to copy package {0} to {1}", pi, newPackageName));
                }

                if (await pi.Move(PackageState.IndexingQueued, newPackageName) == null)
                {
                    throw new Exception(string.Format("Failed to move package {0} to {1}", pi, newPackageName));
                }

                message.PackageState = PackageState.IndexingQueued;
                message.PackageName  = newPackageName;
                await scheduler.Signal(message);

                Trace.TraceInformation("Finished queueing package {0} as {1}", pi, newPackageName);
            });

            // ReSharper restore RedundantArgumentName
        }
Пример #17
0
        protected override Task <int> OnExecute(CommandLineApplication app)
        {
            var context = StartupSpike.CreateStartupSpike();

            if (string.IsNullOrEmpty(PackageMessage))
            {
                PackageMessage = "ipfs://QmUWpEZyccMkPRhRL1wSYTZpcXDMNgHD5oEiF1i8XxCsbt";
            }

            var message = new PackageMessage
            {
                File     = PackageMessage,
                Scope    = "twitter.com",
                ServerId = context.ServerIdentityService.Id
            };

            message.ServerSignature = context.ServerIdentityService.Sign(message.ToBinary());

            context.PackageService.PublishPackageMessageAsync(message);

            return(Task.FromResult(0));
        }
Пример #18
0
        /// <summary>
        /// Deserialize Message
        /// </summary>
        public void Read(IReader r)
        {
            // Read Map Length
            var len = r.ReadMapHeader();

            for (var i = 0; i < len; i++)
            {
                var tag = r.ReadTag();
                switch (tag)
                {
                case 100:                 // Read message
                    Message = r.ReadMessage <PackageMessage>();
                    break;

                case 101:                 // Read dep_dep
                    DepDep = r.ReadMessage <DependMessage>();
                    break;

                default:
                    r.Skip();
                    break;
                }
            }
        }
Пример #19
0
 public async Task Process([QueueTrigger(WebJobsSchedulerService.QueueName)] PackageMessage message)
 {
     await processor.Process(message);
 }
 public Task Signal(PackageMessage message)
 {
     return(Task.Delay(TimeSpan.Zero));
 }
Пример #21
0
 public Task Process(PackageMessage message)
 {
     throw new NotImplementedException();
 }
 public PackagePublishedNotification(Package package, PackageMessage message)
 {
     Package = package;
     Message = message;
 }
Пример #23
0
 public void PublishPackageMessageAsync(PackageMessage packageMessage)
 {
     tempMessage = packageMessage;
 }
Пример #24
0
 private void UpdateMasteNodeInfo(PackageMessage message)
 {
     MasterNodeInfo.LastUpdateTime = message.ReceviceTimeStamp;
     MasterNodeInfo.Status         = NodeStatus.Running;
 }
Пример #25
0
        private void EnQueueMessage()
        {
            while (true)
            {
                Console.WriteLine("Waiting for a connection... ");
                TcpClient acceptClient = listener.AcceptTcpClient();
                new Task(() =>
                {
                    Console.WriteLine("Connected!");
                    NetworkStream stream = acceptClient.GetStream();

                    List <byte> lists = new List <byte>();

                    int readStep = 0;
                    while (true)
                    {
                        Byte[] bytes = new Byte[8192 * 10];
                        try
                        {
                            readStep = stream.Read(bytes, 0, bytes.Length);
                            lists.AddRange(bytes);

                            if (readStep < bytes.Length)
                            {
                                long receviceTime = DateTimeExtension.GetTimeStamp();
                                var data          = System.Text.Encoding.Unicode.GetString(lists.ToArray(), 0, lists.Count);
                                var message       = PackageMessage.GetObjectBySerializeString(data);
                                if (message != null)
                                {
                                    message.ReceviceTimeStamp = receviceTime;
                                    MessageQueues.Enqueue(message);
                                }
                                else
                                {
                                    ///Filter some message
                                }
                                if (MessageQueues.Count == 1)
                                {
                                    eventqueue.Set();
                                    eventqueue.Reset();
                                }
                                lists.Clear();
                            }
                        }
                        catch (IOException e)
                        {
                            Console.WriteLine(e.Message);


                            var remoteName = GetRemoteName(acceptClient);
                            if (dicTcpAcceptClients.Count > 0)
                            {
                                var m1 = dicTcpSendClients.Where(m => m.Key.Contains(remoteName)).First();
                                m1.Value.Close();
                                dicTcpSendClients.TryRemove(m1.Key, out TcpClient clienttcp);
                                clienttcp = null;
                            }
                            stream.Close();
                            acceptClient.Close();
                            return;
                        }
                    }
                    ;
                }).Start();
            }
        }
Пример #26
0
 protected virtual bool SendMessage(string machineName, int port, PackageMessage message)
 {
     return(connect.SendMessage(machineName, port, message));
 }