public void TestProcessTransferMessage()
        {
            //Message Storage

            int messageCount = _messageStorage.GetAllMessages().Count();

            var newTransferMesage = new TransferMessage()
            {
                Header = new TransferMessageHeader()
                {
                    MessageType = "Unit Test Message",
                    Source      = "Unit Test",
                    Status      = "Testing",
                    TimeStamp   = DateTime.Now.ToString()
                },
                Body = SerializationHelper.SerializeObjectToXml <List <string> >(
                    new List <string>()
                {
                    "<Test></Test>", "<Test></Test>"
                }
                    ).DocumentElement
            };

            var response = _service.ProcessTransferMessage(newTransferMesage, "UnitTestSendAdapter");

            Assert.IsTrue(response.Header.Status == "Received");

            int messageCountAfter = _messageStorage.GetAllMessages().Count();

            Assert.IsTrue(messageCountAfter > messageCount);
        }
        public void TestHostedInboundService()
        {
            var newTransferMesage = new TransferMessage()
            {
                Header = new TransferMessageHeader()
                {
                    Destination = "Command Center",
                    MessageType = "Unit Test Message",
                    Source      = "UnitTestSendAdapter",
                    Status      = "Testing",
                    TimeStamp   = DateTime.Now.ToString()
                },
                Body = SerializationHelper.SerializeObjectToXml <List <string> >(
                    new List <string>()
                {
                    "Test 1", "Test 2"
                }
                    ).DocumentElement
            };

            var response =
                Connected.Common.ClientWCFServiceInvokerUtil.CallInboundWcfService(
                    "ConnectInBoundHttpEndPoint",
                    newTransferMesage,
                    "Counter Send Adapter");

            Assert.IsTrue(response.Header.Status == "Received");
        }
Ejemplo n.º 3
0
        public void ChangeOrderPaymentStatus(Message pMessage)
        {
            TransferMessage tMessage = pMessage as TransferMessage;

            Guid pOrderNumber = tMessage.OrderGuid;

            Console.WriteLine("change ----- - - - --" + pOrderNumber);
            using (TransactionScope lScope = new TransactionScope())
            {
                using (VideoStoreEntityModelContainer lContainer = new VideoStoreEntityModelContainer())
                {
                    Order order = lContainer.Orders.Include("OrderItems.Media.Stocks").Include("Customer.LoginCredential").Where((tOrder) => tOrder.OrderNumber == pOrderNumber).FirstOrDefault();
                    //LoadMediaStocks(order);
                    MarkAppropriateUnchangedAssociations(order);
                    Console.WriteLine("Change status");
                    if (tMessage.BTransfer)
                    {
                        order.OrderStatus = "payed";
                    }
                    else
                    {
                        Console.WriteLine("revert stock");
                        order.OrderStatus = "fail";
                        order.RevertStockLevels();
                    }

                    lContainer.Orders.ApplyChanges(order);
                    lContainer.SaveChanges();
                    lScope.Complete();
                }
            }
        }
Ejemplo n.º 4
0
        public void SerializeDeserializeTransferMessage()
        {
            var transferMessage = new TransferMessage()
            {
                Header = new TransferMessageHeader()
                {
                    Destination = "Test Destination",
                    Source      = "Test Source",
                    Status      = "Testing",
                    TimeStamp   = DateTime.Now.ToString()
                },
                Body = SerializationHelper.SerializeObjectToXml <List <string> >(new List <string>()
                {
                    "Test body message"
                }).DocumentElement
            };

            string          transferMessageSerialized   = SerializationHelper.SerializeObjectToXml <TransferMessage>(transferMessage).InnerXml;
            TransferMessage transferMessageDeserialized = (TransferMessage)SerializationHelper.DeSerializeFromString <TransferMessage>(transferMessageSerialized);

            if (string.IsNullOrWhiteSpace(transferMessageSerialized) && transferMessageDeserialized == null)
            {
                Assert.Fail();
            }
            else
            {
                Assert.IsTrue(true);
            }
        }
Ejemplo n.º 5
0
        //public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber)
        public void Transfer(Message message)
        {
            using (TransactionScope lScope = new TransactionScope())
                using (BankEntityModelContainer lContainer = new BankEntityModelContainer())
                {
                    //Specify the binding to be used for the client.
                    NetMsmqBinding binding = new NetMsmqBinding(NetMsmqSecurityMode.None);

                    //Specify the address to be used for the client.
                    EndpointAddress address =
                        new EndpointAddress("net.msmq://localhost/private/PublisherMessageQueue");
                    PublisherServiceClient lClient = new PublisherServiceClient(binding, address);

                    try
                    {
                        TransferMessage transferMessage = message as TransferMessage;
                        double          pAmount         = transferMessage.Total;
                        int             pFromAcctNumber = transferMessage.FromAccountNumber;
                        int             pToAcctNumber   = transferMessage.ToAccountNumber;
                        Account         lFromAcct       = GetAccountFromNumber(pFromAcctNumber);
                        Account         lToAcct         = GetAccountFromNumber(pToAcctNumber);
                        lFromAcct.Withdraw(pAmount);
                        lToAcct.Deposit(pAmount);
                        lContainer.Attach(lFromAcct);
                        lContainer.Attach(lToAcct);
                        lContainer.ObjectStateManager.ChangeObjectState(lFromAcct, System.Data.EntityState.Modified);
                        lContainer.ObjectStateManager.ChangeObjectState(lToAcct, System.Data.EntityState.Modified);
                        lContainer.SaveChanges();
                        Console.WriteLine("Amount: " + pAmount + " FromAccount: " + pFromAcctNumber + " ToAccount: " + pToAcctNumber);
                        // Return successful result
                        TransferMessage result = new TransferMessage()
                        {
                            Topic     = "bank",
                            OrderGuid = transferMessage.OrderGuid,
                            BTransfer = true
                        };
                        //HostServiceAndPublishMessage(result);
                        lClient.Publish(result);
                        lScope.Complete();
                    }
                    catch (Exception lException)
                    {
                        // Return Failure result
                        TransferMessage transferMessage = message as TransferMessage;
                        TransferMessage result          = new TransferMessage()
                        {
                            Topic     = "bank",
                            OrderGuid = transferMessage.OrderGuid,
                            BTransfer = false,
                            Comment   = lException.Message
                        };
                        // HostServiceAndPublishMessage(result);
                        lClient.Publish(result);
                        lScope.Complete();
                        Console.WriteLine("Error occured while transferring money:  " + lException.Message);
                        //throw;
                    }
                }
        }
Ejemplo n.º 6
0
 public void PublishToSubscriber(Common.Model.Message pMessage)
 {
     if (pMessage is Common.Model.TransferMessage)
     {
         TransferMessage lMessage = pMessage as TransferMessage;
         TransferProvider.Transfer(lMessage.pAmount, lMessage.pFromAcctNumber, lMessage.pToAcctNumber, lMessage.pExternalOrderNumber);
     }
 }
Ejemplo n.º 7
0
        protected override void HandleTransfer(CAP_CQRSEntities entities, TransferMessage transfer)
        {
            Console.WriteLine(String.Format("Decrease {0}.", transfer.FromAccount));

            AccountBalance from = GetAccountEntity(transfer.FromAccount, entities);

            from.Balance -= transfer.Amount;
        }
Ejemplo n.º 8
0
        protected override void HandleTransfer(CAP_CQRSEntities entities, TransferMessage transfer)
        {
            Console.WriteLine(String.Format("Increase {0}.", transfer.ToAccount));

            AccountBalance to = GetAccountEntity(transfer.ToAccount, entities);

            to.Balance += transfer.Amount;
        }
Ejemplo n.º 9
0
        public static void Transfer(
            [PerperWorkerTrigger] IAgentContext <IDictionary <string, BigInteger> > context,
            [PerperWorker("sender")] string sender,
            [PerperWorker("message")] TransferMessage message)
        {
            var removeTokensPublication = RemoveTokens(context.State, message.From, message.Amount);
            var addTokensPublication    = AddTokens(context.State, message.To, message.Amount);

            context.MakePublication(removeTokensPublication);
            context.MakePublication(addTokensPublication);
        }
        /// <summary>
        /// This method will call a WCF Service that implements the IInboundService Contract
        /// </summary>
        /// <param name="activeEndPointName">End point name</param>
        /// <param name="transferMessage">The message that needs to be submitted</param>
        public static void CallReceiveAdapterWcfService(string activeEndPointName, TransferMessage transferMessage)
        {
            var recvAdapterChannelFactory = new ChannelFactory <IReceiveAdapter>(activeEndPointName);

            // Create a channel.
            var wcfClient = recvAdapterChannelFactory.CreateChannel();

            // send the message to the adapter
            wcfClient.ProcessMessage(transferMessage);
            ((IClientChannel)wcfClient).Close();
        }
Ejemplo n.º 11
0
        private void HostServiceAndPublishMessage(TransferMessage message)
        {
            //Specify the binding to be used for the client.
            NetMsmqBinding binding = new NetMsmqBinding(NetMsmqSecurityMode.None);

            //Specify the address to be used for the client.
            EndpointAddress address =
                new EndpointAddress("net.msmq://localhost/private/PublisherMessageQueue");
            PublisherServiceClient lClient = new PublisherServiceClient(binding, address);

            lClient.Publish(message);
        }
Ejemplo n.º 12
0
        public static TransferMessage ProcessMessage(string Address, int Port, TransferMessage msg)
        {
            TransferMessage transferMessage;
            TransferMessage transferMessage1 = null;

            byte[] numArray = msg.Compress();
            string str      = null;
            string str1     = string.Format("tcp://{0}:{1}/RemoteMessaging", Address, Port);

            try
            {
                TransferConnection.m_Remote = Activator.GetObject(typeof(RemoteMessaging), str1) as RemoteMessaging;
            }
            catch
            {
                MessageBox.Show(string.Format("Failed to connect to remote server {0} : {1}", Address, Port));
                transferMessage = null;
                return(transferMessage);
            }
            try
            {
                byte[] numArray1 = TransferConnection.m_Remote.PerformRemoteRequest(msg.GetType().FullName, numArray, out str);
                if (numArray1 != null)
                {
                    Type type = Type.GetType(str);
                    if (type == null)
                    {
                        Assembly assembly = Assembly.GetAssembly(typeof(TransferMessage));
                        if (assembly != null)
                        {
                            type = assembly.GetType(str);
                        }
                    }
                    transferMessage1 = TransferMessage.Decompress(numArray1, type);
                    if (TransferConnection.HasErrors(transferMessage1, type, str))
                    {
                        transferMessage1 = null;
                    }
                }
                else
                {
                    MessageBox.Show(string.Concat("No Data Received from Remote Server for ", msg.GetType().FullName));
                    transferMessage = null;
                    return(transferMessage);
                }
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.Message);
                transferMessage1 = null;
            }
            return(transferMessage1);
        }
Ejemplo n.º 13
0
 public static AuthEntry GetAuthEntry(TransferMessage msg)
 {
     // go through the auth list and find the corresponding auth entry for the message
     foreach(AuthEntry a in AuthList)
     {
         // confirm authentication id match and accesslevel
         if(a.AuthenticationID == msg.AuthenticationID)
         {
             return a;
         }
     }
     return null;
 }
Ejemplo n.º 14
0
 public static bool HasErrors(TransferMessage msg, Type t, string rtype)
 {
     if (msg == null)
     {
         MessageBox.Show(string.Format("No Message Data Received from Remote Server for {0} ({1})", t, rtype));
         return(true);
     }
     if (!(msg is ErrorMessage))
     {
         return(false);
     }
     MessageBox.Show((msg as ErrorMessage).Message);
     return(true);
 }
Ejemplo n.º 15
0
        //public void Transfer(double pAmount, int pFromAcctNumber, int pToAcctNumber)
        public void Transfer(Message message)
        {
            using (TransactionScope lScope = new TransactionScope())
                using (BankEntityModelContainer lContainer = new BankEntityModelContainer())
                {
                    try
                    {
                        TransferMessage transferMessage = message as TransferMessage;
                        double          pAmount         = transferMessage.Total;
                        int             pFromAcctNumber = transferMessage.FromAccountNumber;
                        int             pToAcctNumber   = transferMessage.ToAccountNumber;
                        Account         lFromAcct       = GetAccountFromNumber(pFromAcctNumber);
                        Account         lToAcct         = GetAccountFromNumber(pToAcctNumber);
                        lFromAcct.Withdraw(pAmount);
                        lToAcct.Deposit(pAmount);
                        lContainer.Attach(lFromAcct);
                        lContainer.Attach(lToAcct);
                        lContainer.ObjectStateManager.ChangeObjectState(lFromAcct, System.Data.EntityState.Modified);
                        lContainer.ObjectStateManager.ChangeObjectState(lToAcct, System.Data.EntityState.Modified);
                        lContainer.SaveChanges();

                        // Return successful result
                        TransferMessage result = new TransferMessage()
                        {
                            Topic     = "transfer",
                            OrderGuid = transferMessage.OrderGuid,
                            BTransfer = true
                        };
                        HostServiceAndPublishMessage(result);
                        lScope.Complete();
                    }
                    catch (Exception lException)
                    {
                        // Return Failure result
                        TransferMessage transferMessage = message as TransferMessage;
                        TransferMessage result          = new TransferMessage()
                        {
                            Topic     = "transfer",
                            OrderGuid = transferMessage.OrderGuid,
                            BTransfer = false,
                            Comment   = lException.Message
                        };
                        HostServiceAndPublishMessage(result);
                        lScope.Complete();
                        Console.WriteLine("Error occured while transferring money:  " + lException.Message);
                        //throw;
                    }
                }
        }
Ejemplo n.º 16
0
        // TODO 2d: Command doesn't update current state.
        public void Transfer(string fromAccount, string toAccount, decimal amount)
        {
            try
            {
                using (CAP_CQRSEntities entities = new CAP_CQRSEntities())
                {
                    using (var tx = new TransactionScope())
                    {
                        AccountBalance from = GetAccountEntity(fromAccount, entities);

                        if (from.Balance < amount)
                        {
                            throw new ApplicationException("Insufficient funds.");
                        }

                        // INSERT
                        entities.AddToTransfers(new Transfer()
                        {
                            From   = fromAccount,
                            To     = toAccount,
                            Amount = amount
                        });

                        // PUBLISH
                        TransferMessage message = new TransferMessage()
                        {
                            FromAccount = fromAccount,
                            ToAccount   = toAccount,
                            Amount      = amount
                        };
                        using (var queue = new MessageQueue(IncreaseQueueName))
                        {
                            queue.Send(message, MessageQueueTransactionType.Automatic);
                        }
                        using (var queue = new MessageQueue(DecreaseQueueName))
                        {
                            queue.Send(message, MessageQueueTransactionType.Automatic);
                        }

                        entities.SaveChanges();
                        tx.Complete();
                    }
                }
            }
            catch (Exception ex)
            {
                throw new FaultException(ex.Message);
            }
        }
Ejemplo n.º 17
0
 public void Visit(IVisitable pVisitable)
 {
     if (pVisitable is Order)
     {
         Order lOrder = pVisitable as Order;
         Result = new TransferMessage()
         {
             OrderGuid         = lOrder.OrderNumber,
             FromAccountNumber = mFromAccountNumber,
             ToAccountNumber   = mToAccountNumber,
             Total             = lOrder.Total ?? 0,
             Topic             = "transfer"
         };
     }
 }
Ejemplo n.º 18
0
        private void HostServiceAndPublishMessage(TransferMessage message)
        {
            //Specify the binding to be used for the client.
            NetMsmqBinding binding = new NetMsmqBinding(NetMsmqSecurityMode.None);

            //Specify the address to be used for the client.
            EndpointAddress address =
                new EndpointAddress("net.msmq://localhost/private/PublisherMessageQueue");

            //pOrder.OrderNumber = Guid.NewGuid();
            //OrderToTransferMessage lVisitor = new OrderToTransferMessage(UserProvider.ReadUserById(pOrder.Customer.Id).BankAccountNumber, RetrieveVideoStoreAccountNumber());
            //lVisitor.Visit(pOrder);
            PublisherServiceClient lClient = new PublisherServiceClient(binding, address);

            lClient.Publish(message);
        }
        public static TransferMessage ProcessMessage(string Address, int Port, TransferMessage msg)
        {
            byte[] data1      = msg.Compress();
            string answerType = (string)null;
            string url        = string.Format("tcp://{0}:{1}/RemoteMessaging", (object)Address, (object)Port);

            try
            {
                TransferConnection.m_Remote = Activator.GetObject(typeof(RemoteMessaging), url) as RemoteMessaging;
            }
            catch
            {
                int num = (int)MessageBox.Show(string.Format("Failed to connect to remote server {0} : {1}", (object)Address, (object)Port));
                return((TransferMessage)null);
            }
            TransferMessage msg1;

            try
            {
                byte[] data2 = TransferConnection.m_Remote.PerformRemoteRequest(msg.GetType().FullName, data1, out answerType);
                if (data2 == null)
                {
                    int num = (int)MessageBox.Show("No Data Received from Remote Server for " + msg.GetType().FullName);
                    return((TransferMessage)null);
                }
                Type type = Type.GetType(answerType);
                if (type == null)
                {
                    Assembly assembly = Assembly.GetAssembly(typeof(TransferMessage));
                    if (assembly != null)
                    {
                        type = assembly.GetType(answerType);
                    }
                }
                msg1 = TransferMessage.Decompress(data2, type);
                if (TransferConnection.HasErrors(msg1, type, answerType))
                {
                    msg1 = (TransferMessage)null;
                }
            }
            catch (Exception ex)
            {
                int num = (int)MessageBox.Show(ex.Message);
                msg1 = (TransferMessage)null;
            }
            return(msg1);
        }
Ejemplo n.º 20
0
        private void ThreadProc()
        {
            while (!_stopping.WaitOne(10))
            {
                try
                {
                    using (CAP_CQRSEntities entities = new CAP_CQRSEntities())
                    {
                        using (var tx = new TransactionScope())
                        {
                            using (MessageQueue queue = new MessageQueue(_queueName))
                            {
                                Message message = queue.Receive(TimeSpan.FromSeconds(1.0), MessageQueueTransactionType.Automatic);
                                _wroteEmptyMessage = false;

                                message.Formatter = Formatter;
                                TransferMessage transfer = (TransferMessage)message.Body;

                                HandleTransfer(entities, transfer);

                                entities.SaveChanges();
                                tx.Complete();
                            }
                        }
                    }
                }
                catch (MessageQueueException mqex)
                {
                    if (mqex.ErrorCode != TimeoutErrorCode)
                    {
                        Console.WriteLine(mqex.Message);
                    }
                    else
                    {
                        if (!_wroteEmptyMessage)
                        {
                            Console.WriteLine(String.Format("{0} queue empty.", _threadName));
                        }
                        _wroteEmptyMessage = true;
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
        //TODO : ? Instead of caching maybe creating ChannelFactory as static
        //public static ChannelFactory<IReceiveAdapter> recvAdapterChannelFactory;
        public static void CallReceiveAdapterWcfService(Uri uri, TransferMessage transferMessage)
        {
            BasicHttpBinding binding  = new BasicHttpBinding();
            EndpointAddress  endpoint = new EndpointAddress(uri);

            //TODO : Cache ChannelFactory according to URL
            ChannelFactory <IReceiveAdapter> recvAdapterChannelFactory =
                new ChannelFactory <IReceiveAdapter>(binding, endpoint);

            // Create a channel.
            var wcfClient = recvAdapterChannelFactory.CreateChannel();

            wcfClient.ProcessMessage(transferMessage);

            ((IClientChannel)wcfClient).Close();

            recvAdapterChannelFactory.Close();
        }
Ejemplo n.º 22
0
        public void SendData(List <Activity> activityList)
        {
            var newTransferMesage = new TransferMessage()
            {
                Header = new TransferMessageHeader()
                {
                    Destination = "Inbound Service",
                    MessageType = "Counter Data",
                    Source      = "Counter Data",
                    Status      = "New Counter Data",
                    TimeStamp   = DateTime.Now.ToString()
                },
                Body = SerializationHelper.SerializeObjectToXml <List <Activity> >(activityList).DocumentElement
            };

            //TODO : Check response, if not succesfull, log the message, or implement something like queue
            Connected.Common.ClientWCFServiceInvokerUtil.CallInboundWcfService("InBoundHttpEndPoint", newTransferMesage, "Counter Send Adapter");
        }
        public void TestProcessMessage()
        {
            var newTransferMesage = new TransferMessage()
            {
                Header = new TransferMessageHeader()
                {
                    Destination = "Receive Adapter",
                    MessageType = "Service Test Message",
                    Source      = "Unit Test",
                    Status      = "Testing",
                    TimeStamp   = DateTime.Now.ToString(CultureInfo.InvariantCulture)
                },
                Body = null
            };

            new ReceiveAdapterService().ProcessMessage(newTransferMesage);

            Assert.IsTrue(true);
        }
        public void ProcessMessage(TransferMessage transferMessage)
        {
            //Parse message content
            if (transferMessage.Body != null)
            {
                try
                {
                    var xmlSource   = transferMessage.Body.OuterXml;
                    var lstActivity = SerializationHelper.DeSerializeFromString <List <Activity> >(xmlSource);

                    //Send to BussinessLayer
                    _bl.ReceiveActivityList(lstActivity);
                }
                catch (Exception ex)
                {
                    //TODO : Log exception
                    throw ex;
                }
            }
        }
Ejemplo n.º 25
0
        public void Publish(Message pMessage)
        {
            Console.WriteLine("Publish queue-------- Topic: " + pMessage.Topic);
            String topic          = pMessage.Topic;
            String forwardAddress = "";

            if (topic == "bank")
            {
                forwardAddress = "bank";
            }
            if (topic == "transfer")
            {
                TransferMessage transferMessage = pMessage as TransferMessage;
                bool            bTransferResult = transferMessage.BTransfer;
                if (bTransferResult)
                {
                    forwardAddress = "delivery";
                }
                else
                {
                    forwardAddress = "email";
                }
            }
            if (topic == "delivery")
            {
                forwardAddress = "email";
            }
            if (topic == "videostore")
            {
            }

            foreach (String lHandlerAddress in SubscriptionRegistry.Instance.GetTopicSubscribers(forwardAddress))
            {
                ISubscriberService lSubServ = ServiceFactory.GetService <ISubscriberService>(lHandlerAddress);
                Console.WriteLine("Handler Address:" + lHandlerAddress);
                lSubServ.PublishToSubscriber(pMessage);
            }
        }
        public Task <List <TransactionMetadata> > TransferAsync(Transfer transfer, Wallet wallet, TransactionOption options, bool sync = true)
        {
            TransactionMessage message = new TransferMessage(transfer, wallet, options);

            return(BroadcastAsync(message.BuildMessageBody()));
        }
Ejemplo n.º 27
0
        private static TransferMessage ServerRequestResult(TransferMessage msg)
        {
            // find the queue entry for the message and return the result
            foreach(QueuedMessage q in ServerRequests)
            {
                if(q.MessageIn == msg) return q.MessageOut;
            }

            return null;
        }
Ejemplo n.º 28
0
 public QueuedMessage(TransferMessage msg)
 {
     MessageIn = msg;
     Completed = false;
 }
Ejemplo n.º 29
0
 private static void RemoveRequest(TransferMessage msg)
 {
     // search the queue to see if the message is still being processed
     foreach(QueuedMessage q in ServerRequests)
     {
         if(q.MessageIn == msg )
         {
             q.Remove = true;
             break;
         }
     }
 }
Ejemplo n.º 30
0
        private static bool ServerRequestProcessed(TransferMessage msg)
        {
            // search the queue to see if the message is still being processed
            foreach(QueuedMessage q in ServerRequests)
            {
                if(q.MessageIn == msg && !q.Completed) return false;
            }

            // return true if the message is no longer on the queue or it there and has been completed
            return true;
        }
Ejemplo n.º 31
0
        private static string Authenticate(TransferMessage msg)
        {
            if(msg == null)
            {
                // unknown error
                return "Empty message";
            }

            // check to make sure that an authentication entry for this message is on the authentication list
            ArrayList removelist = new ArrayList();

            // default no authentication status
            string errorstatus = "Renew your Session Authentication";

            foreach(AuthEntry a in AuthList)
            {
                // check for entry expiration
                if(a.Timestamp < DateTime.Now - AuthenticationLifetime)
                {
                    removelist.Add(a);
                    continue;
                }

                // confirm authentication id match and accesslevel
                if(a.AuthenticationID == msg.AuthenticationID)
                {

                    // confirm required accesslevel on the msg is below the access level of the auth entry
                    if(a.Level < GetAccessLevel(msg))
                    {
                        // authenticated but insufficient access
                        errorstatus = "Insufficient Access Level";
                    }
                    else
                    {
                        // authenticated and access confirmed
                        errorstatus = null;
                    }
                }
            }

            // clean up the list
            foreach(AuthEntry a in removelist)
            {
                AuthList.Remove(a);
            }

            return errorstatus;
        }
Ejemplo n.º 32
0
        private static AccessLevel GetAccessLevel(TransferMessage msg)
        {
            // default accesslevel is admin
            AccessLevel level = AccessLevel.Administrator;

            MethodInfo minfo = msg.GetType().GetMethod("ProcessMessage");
            object [] attr = minfo.GetCustomAttributes(typeof(TransferAccess), false);
            if(attr != null)
            {
                for(int i=0;i<attr.Length;i++)
                {
                    if(((TransferAccess)attr[i]).Level < level)
                    {
                        level = ((TransferAccess)attr[i]).Level;
                    }
                }
            }

            return level;
        }
Ejemplo n.º 33
0
        public void SignDataTest()
        {
            InputOutput input = new InputOutput
            {
                Address = "tbnb18086qc9yxtk5ufddple8upf0k3072vvagpm2ml",
                Coins   = new List <Token> {
                    new Token
                    {
                        Denom  = "PND-943",
                        Amount = 100000000
                    }
                }
            };

            InputOutput output = new InputOutput
            {
                Address = "tbnb18086qc9yxtk5ufddple8upf0k3072vvagpm2ml",
                Coins   = new List <Token> {
                    new Token
                    {
                        Denom  = "PND-943",
                        Amount = 100000000
                    }
                }
            };

            TransferMessage transferMessage = new TransferMessage
            {
                Inputs = new List <InputOutput> {
                    input
                },
                Outputs = new List <InputOutput> {
                    output
                }
            };

            SignData signData = new SignData
            {
                ChainId       = "Binance-Chain-Nile",
                AccountNumber = "667519",
                Sequence      = "0",
                Memo          = "",
                Msgs          = new TransferMessage[] { transferMessage },
                Source        = "3",
                Data          = null
            };

            //JsonSerializer serializer = new JsonSerializer();
            string json = JsonConvert.SerializeObject(signData);

            // bytes = [123, 34, 97, 99, 99, 111, 117, 110, 116, 95, 110, 117, 109, 98, 101, 114, 34, 58, 34, 54, 54, 55, 53, 49, 57, 34, 44, 34, 99, 104, 97, 105, 110, 95, 105, 100, 34, 58, 34, 66, 105, 110, 97, 110, 99, 101, 45, 67, 104, 97, 105, 110, 45, 78, 105, 108, 101, 34, 44, 34, 100, 97, 116, 97, 34, 58, 110, 117, 108, 108, 44, 34, 109, 101, 109, 111, 34, 58, 34, 34, 44, 34, 109, 115, 103, 115, 34, 58, 91, 123, 34, 105, 110, 112, 117, 116, 115, 34, 58, 91, 123, 34, 97, 100, 100, 114, 101, 115, 115, 34, 58, 34, 116, 98, 110, 98, 49, 56, 48, 56, 54, 113, 99, 57, 121, 120, 116, 107, 53, 117, 102, 100, 100, 112, 108, 101, 56, 117, 112, 102, 48, 107, 51, 48, 55, 50, 118, 118, 97, 103, 112, 109, 50, 109, 108, 34, 44, 34, 99, 111, 105, 110, 115, 34, 58, 91, 123, 34, 97, 109, 111, 117, 110, 116, 34, 58, 49, 48, 48, 48, 48, 48, 48, 48, 48, 44, 34, 100, 101, 110, 111, 109, 34, 58, 34, 80, 78, 68, 45, 57, 52, 51, 34, 125, 93, 125, 93, 44, 34, 111, 117, 116, 112, 117, 116, 115, 34, 58, 91, 123, 34, 97, 100, 100, 114, 101, 115, 115, 34, 58, 34, 116, 98, 110, 98, 49, 56, 48, 56, 54, 113, 99, 57, 121, 120, 116, 107, 53, 117, 102, 100, 100, 112, 108, 101, 56, 117, 112, 102, 48, 107, 51, 48, 55, 50, 118, 118, 97, 103, 112, 109, 50, 109, 108, 34, 44, 34, 99, 111, 105, 110, 115, 34, 58, 91, 123, 34, 97, 109, 111, 117, 110, 116, 34, 58, 49, 48, 48, 48, 48, 48, 48, 48, 48, 44, 34, 100, 101, 110, 111, 109, 34, 58, 34, 80, 78, 68, 45, 57, 52, 51, 34, 125, 93, 125, 93, 125, 93, 44, 34, 115, 101, 113, 117, 101, 110, 99, 101, 34, 58, 34, 48, 34, 44, 34, 115, 111, 117, 114, 99, 101, 34, 58, 34, 51, 34, 125]
            byte[] bytes = Encoding.UTF8.GetBytes(json);
            byte[] hash;
            using (SHA256 sha256 = SHA256.Create())
            {
                // hash = [-124, 96, -11, -122, -27, -7, 103, -38, -29, 0, -34, 45, 98, -83, 32, 16, -11, 108, -8, -88, -66, -80, 106, 14, -13, 34, -115, 99, -94, -124, -101, -117]
                hash = sha256.ComputeHash(bytes);
            }
            Wallet wallet = Wallet.FromPrivateKey("f0e87ed55fa3d86f62b38b405cbb5f732764a7d5bc690da45a32aa3f2fc81a36", BinanceDexEnvironment.TEST_NET);
            //string resultB = wallet.EcKey.SignMessage(bytes);
            //string resultS = wallet.EcKey.SignMessage(json);

            uint256 hash256   = Hashes.Hash256(bytes);
            uint256 uint256   = new uint256(hash, false);
            uint256 uint256le = new uint256(hash, true);
            //uint256 uint256 = new uint256("8460f586e5f967dae300de2d62ad2010f56cf8a8beb06a0ef3228d63a2849b8b");

            // message for GenerateSignature [-124, 96, -11, -122, -27, -7, 103, -38, -29, 0, -34, 45, 98, -83, 32, 16, -11, 108, -8, -88, -66, -80, 106, 14, -13, 34, -115, 99, -94, -124, -101, -117]
            ECDSASignature signature = wallet.EcKey.Sign(uint256le, false);

            byte[] signatureBytes = new byte[64];
            signature.R.ToByteArrayUnsigned().CopyTo(signatureBytes, 0);
            signature.S.ToByteArrayUnsigned().CopyTo(signatureBytes, 32);
            // r = 61420091277463284201584464261002339752469911249959494312431854777400008021097
            // s = 9337502753576151745268672761590576963567913315001541648793269425462248583710
            // signature result = [-121, -54, -118, 43, 107, -25, 50, -112, -101, 34, -63, -121, -111, -90, 109, -72, -95, -42, 55, -87, -108, -42, -21, -99, -2, -74, 13, -106, 99, -34, -108, 105, 20, -92, -42, -38, 116, -51, 15, 44, -17, -29, -119, -53, -119, -51, 58, -48, -38, -92, 39, -99, -64, 119, -81, 112, -97, -103, 112, -91, -71, -119, -78, 30]

            //byte[] resultBytes = Encoders.Base64.DecodeData(resultB);
        }
Ejemplo n.º 34
0
 private static void AddRequest(TransferMessage msg)
 {
     ServerRequests.Add(new QueuedMessage(msg));
 }
 public void TransferMessage(TransferMessage ebcMessage)
 {
     // If there was a message through the WCF channel, inform the "environment".
     this.OnOut_MessageTransfered(ebcMessage.EBCMessageData);
 }
        private static TransferMessage CallInboundWcfService(string activeEndPointName, TransferMessage canonicalMessage, string adapterName, string userName, string password, string domain)
        {
            var recvAdapterChannelFactory = new ChannelFactory <IInboundService>(activeEndPointName);

            // step one - find and remove default endpoint behavior
            var defaultCredentials = recvAdapterChannelFactory.Endpoint.Behaviors.Find <ClientCredentials>();

            recvAdapterChannelFactory.Endpoint.Behaviors.Remove(defaultCredentials);

            // step two - instantiate your credentials
            ClientCredentials loginCredentials = new ClientCredentials();

            loginCredentials.Windows.ClientCredential.UserName = userName;
            loginCredentials.Windows.ClientCredential.Password = password;

            //loginCredentials.UserName.UserName = userName;
            //loginCredentials.UserName.Password = password;
            if (!string.IsNullOrEmpty(domain))
            {
                loginCredentials.Windows.ClientCredential.Domain = domain;
            }

            // step three - set that as new endpoint behavior on factory
            recvAdapterChannelFactory.Endpoint.Behaviors.Add(loginCredentials); //add required ones


            // Create a channel.
            var wcfClient = recvAdapterChannelFactory.CreateChannel();

            // send the message to the adapter
            var transferMessage = wcfClient.ProcessTransferMessage(canonicalMessage, adapterName);

            ((IClientChannel)wcfClient).Close();

            return(transferMessage);
        }
        /// <summary>
        /// Call Receive Adapter Service with existing Channel Factory
        /// </summary>
        /// <param name="channelFactory"></param>
        /// <param name="transferMessage"></param>
        public static void CallReceiveAdapterWcfService(ChannelFactory <IReceiveAdapter> channelFactory, TransferMessage transferMessage)
        {
            var wcfClient = channelFactory.CreateChannel();

            wcfClient.ProcessMessage(transferMessage);
            ((IClientChannel)wcfClient).Close();
        }
Ejemplo n.º 38
0
        /// <summary>
        /// TODO : Fill this
        /// </summary>
        public void PushMessages()
        {
            //Get messages to push them
            List <MessageEnriched> messagesEnriched = new List <MessageEnriched>();

            //If there are waiting messages
            var waitingListReTryList = _waitingList.Where(x => x.Item2 < DateTime.Now).ToList();

            if (waitingListReTryList.Any())
            {
                //Add wating list
                messagesEnriched.AddRange(waitingListReTryList.Select(x => x.Item1).ToList());
            }

            //Add more until limit
            //Check if waiting list reached to the limit, then dont take from DB
            int messageCountToTakeFromDB = _waitingList.Count >= _waitingListLimit ? 0 :
                                           (_messageLimitToBeDispatched - waitingListReTryList.Count() > 0
                ? _messageLimitToBeDispatched - waitingListReTryList.Count()
                : 0);
            var messagesToBeDispatched = MessageStorage.GetMessagesToBeDispatched(messageCountToTakeFromDB,
                                                                                  waitingListReTryList.Count());

            messagesEnriched.AddRange(messagesToBeDispatched);

            //Group messages by receive adapter
            var messagesGrouped = messagesEnriched.GroupBy(x => x.ReceiveAdapterId).ToList();

            foreach (var subMessages in messagesGrouped)
            {
                var receiveAdapterId = subMessages.FirstOrDefault().ReceiveAdapterId;
                var receiveAdapter   = _receiveAdaptersWithDetails.FirstOrDefault(x => x.Id == receiveAdapterId);
                if (receiveAdapter == null)
                {
                    continue;
                }

                //Receive adapter url
                var uri = receiveAdapter.ReceiveAdapterDetails.AdapterServiceURI;

                //Create channel factory for this receive adapter
                var channelFactory = Connected.Common.ClientWCFServiceInvokerUtil.CreateReceiveAdapterServiceChannelFactory(uri);

                //Send messages
                foreach (var messageEnriched in subMessages)
                {
                    int timestoRetry  = receiveAdapter.ReceiveAdapterDetails.TimesToRetry ?? 0;
                    int retryInterval = receiveAdapter.ReceiveAdapterDetails.RetryInterval ?? 0;

                    try
                    {
                        TransferMessage transferMessages = new TransferMessage()
                        {
                            Header = new TransferMessageHeader()
                            {
                                Destination = "Receive Adapter",
                                MessageType = "Pushed Message",
                                Source      = "Dispatcher",
                                Status      = "From Dispatcher",
                                TimeStamp   = DateTime.Now.ToString()
                            },
                            Body =
                                SerializationHelper.SerializeObjectToXml <string>(messageEnriched.Message).DocumentElement
                        };

                        Connected.Common.ClientWCFServiceInvokerUtil.CallReceiveAdapterWcfService(channelFactory, transferMessages);

                        //Delete if succesfully sent
                        MessageStorage.RemoveMessagesDispatcher(messageEnriched.Id);
                    }
                    catch (Exception)
                    {
                        //TODO : Log message
                        var waitingMessage = _waitingList.FirstOrDefault(x => x.Item1.Id == messageEnriched.Id);
                        if (waitingMessage != null)
                        {
                            if (waitingMessage.Item3 >= receiveAdapter.ReceiveAdapterDetails.TimesToRetry)
                            {
                                //TODO : Send message back to inbound service as failed message
                                //TODO : remove from dispatcher topic

                                //Remove from waiting list
                                _waitingList.Remove(waitingMessage);
                            }
                            else
                            {
                                //TODO : Find a better solution to update Tuple
                                _waitingList.Remove(waitingMessage);
                                _waitingList.Add(new Tuple <MessageEnriched, DateTime, int>(
                                                     waitingMessage.Item1,
                                                     DateTime.Now.AddMilliseconds(receiveAdapter.ReceiveAdapterDetails.RetryInterval ?? 0),
                                                     waitingMessage.Item3 + 1));
                            }
                        }
                        else
                        {
                            //If re try is 0
                            if (receiveAdapter.ReceiveAdapterDetails.TimesToRetry == 0)
                            {
                                //TODO : Send message back to inbound service as failed message
                                //TODO : remove from dispatcher topic

                                //Remove from waiting list
                                _waitingList.Remove(waitingMessage);
                            }
                            //Add to waiting list
                            else
                            {
                                _waitingList.Add(
                                    new Tuple <MessageEnriched, DateTime, int>(
                                        messageEnriched,
                                        DateTime.Now.AddMilliseconds(receiveAdapter.ReceiveAdapterDetails.RetryInterval ?? 0),
                                        1));
                            }
                        }
                    }
                }

                //Close channel factory
                channelFactory.Close();
            }
        }
        //TODO : Cache or make static the channelFactory
        /// <summary>
        /// This method will call a WCF Service that implements the IInboundService Contract
        /// </summary>
        /// <param name="activeEndPointName">End point name</param>
        /// <param name="transferMessage">The message that needs to be submitted</param>
        /// <param name="adapterName"> the name of the adapter that is sending the message back into connect</param>
        public static TransferMessage CallInboundWcfService(string activeEndPointName, TransferMessage transferMessage, string adapterName)
        {
            var recvAdapterChannelFactory = new ChannelFactory <IInboundService>(activeEndPointName);

            // Create a channel.
            var wcfClient = recvAdapterChannelFactory.CreateChannel();

            // send the message to the adapter
            var response = wcfClient.ProcessTransferMessage(transferMessage, adapterName);

            ((IClientChannel)wcfClient).Close();

            return(response);
        }