Exemple #1
0
        public async Task <HttpResponseMessage> CreateAsync(MT_Block BMD)
        {
            Db = con.SurgeryCenterDb(BMD.Slug);
            BlockResponse Response = new BlockResponse();

            try
            {
                UniqueID              = con.GetUniqueKey();
                BMD.Block_Unique_ID   = UniqueID;
                BMD.Block_Create_Date = con.ConvertTimeZone(BMD.Block_TimeZone, Convert.ToDateTime(BMD.Block_Create_Date));
                BMD.Block_Modify_Date = con.ConvertTimeZone(BMD.Block_TimeZone, Convert.ToDateTime(BMD.Block_Modify_Date));
                DocumentReference docRef = Db.Collection("MT_Block").Document(UniqueID);
                WriteResult       Result = await docRef.SetAsync(BMD);

                if (Result != null)
                {
                    Response.Status  = con.StatusSuccess;
                    Response.Message = con.MessageSuccess;
                    Response.Data    = BMD;
                }
                else
                {
                    Response.Status  = con.StatusNotInsert;
                    Response.Message = con.MessageNotInsert;
                    Response.Data    = null;
                }
            }
            catch (Exception ex)
            {
                Response.Status  = con.StatusFailed;
                Response.Message = con.MessageFailed + ", Exception : " + ex.Message;
            }
            return(ConvertToJSON(Response));
        }
Exemple #2
0
        public async Task <HttpResponseMessage> Remove(MT_Block BMD)
        {
            Db = con.SurgeryCenterDb(BMD.Slug);
            BlockResponse Response = new BlockResponse();

            try
            {
                DocumentReference docRef = Db.Collection("MT_Block").Document(BMD.Block_Unique_ID);
                WriteResult       Result = await docRef.DeleteAsync();

                if (Result != null)
                {
                    Response.Status  = con.StatusSuccess;
                    Response.Message = con.MessageSuccess;
                    Response.Data    = null;
                }
                else
                {
                    Response.Status  = con.StatusNotDeleted;
                    Response.Message = con.MessageNotDeleted;
                    Response.Data    = null;
                }
            }
            catch (Exception ex)
            {
                Response.Status  = con.StatusFailed;
                Response.Message = con.MessageFailed + ", Exception : " + ex.Message;
            }
            return(ConvertToJSON(Response));
        }
Exemple #3
0
        //[Authorize(Roles ="SAdmin")]
        public async Task <HttpResponseMessage> GetDeletedList(MT_Block BMD)
        {
            Db = con.SurgeryCenterDb(BMD.Slug);
            BlockResponse Response = new BlockResponse();

            try
            {
                List <MT_Block> AnesList     = new List <MT_Block>();
                Query           docRef       = Db.Collection("MT_Block").WhereEqualTo("Block_Is_Deleted", true).OrderBy("Block_Name");
                QuerySnapshot   ObjQuerySnap = await docRef.GetSnapshotAsync();

                if (ObjQuerySnap != null)
                {
                    foreach (DocumentSnapshot Docsnapshot in ObjQuerySnap.Documents)
                    {
                        AnesList.Add(Docsnapshot.ConvertTo <MT_Block>());
                    }
                    Response.DataList = AnesList;
                }
                Response.Status  = con.StatusSuccess;
                Response.Message = con.MessageSuccess;
            }
            catch (Exception ex)
            {
                Response.Status  = con.StatusFailed;
                Response.Message = con.MessageFailed + ", Exception : " + ex.Message;
            }
            return(ConvertToJSON(Response));
        }
Exemple #4
0
        // Get Block data
        public static InterlockData GetInterlockData(int resourceId, ActionType action = ActionType.Interlock, string username = "", string password = "")
        {
            var inst = ActionInstances.Find(action, resourceId);

            BlockState blockState = null;

            if (inst == null)
            {
                return(new InterlockData(0, null, "No Interlock is associated with this resource."));
            }

            IPoint point = ServiceProvider.Current.Control.GetPoint(inst.Point);

            string message = string.Empty;

            int blockId = 0;

            try
            {
                blockId = point.BlockID;
                BlockResponse resp = ServiceProvider.Current.Control.GetBlockState(blockId);
                blockState = resp.BlockState;

                if (blockState == null)
                {
                    message = "Failed to connect with WAGO block.<br />Please try to reload the page and repeat your action again (click the Maintenance tab above).<br />If the problem persists, please contact administrator.";
                }
            }
            catch (Exception ex)
            {
                message = string.Format("Wago block {0} fault detected. Please contact system administrator. [{0}]", blockId, ex.Message);
            }

            return(new InterlockData(blockId, blockState, message));
        }
        public virtual BlockResponse SendGetBlockStateCommand(int blockId)
        {
            Block block = DA.Current.Single <Block>(blockId);

            if (block == null)
            {
                throw new InvalidOperationException($"Block not found with BlockID = {blockId}");
            }

            using (var sender = Connect(block))
            {
                byte[] buffer = CreateGetBlockStateBuffer();

                Log.Write(block.BlockID, $"WagoConnection: Sending GetBlockState message to block: BlockID = {block.BlockID}, Data = {WagoUtility.GetDataString(buffer)}");

                byte[] recvBuffer = new byte[65];

                int bytesRecv = SendMessageToBlock(sender, buffer, recvBuffer, true);

                if (bytesRecv > 0)
                {
                    Log.Write(block.BlockID, $"WagoConnection: Received {bytesRecv} bytes [{WagoUtility.BytesToString(recvBuffer, bytesRecv)}] from block {block.BlockID}");
                }
                else
                {
                    Log.Write(block.BlockID, $"WagoConnection: Block {block.BlockID} did not return any data");
                }

                BlockResponse result = block.CreateBlockResponse();
                result.BlockState.Points = block.Points.Select(x => WagoUtility.GetPointState(x, recvBuffer)).ToArray();

                return(result);
            }
        }
Exemple #6
0
        protected virtual void HandleResponses(MessageHeader rp, MemoryStream ms)
        {
            switch (rp.Operation)
            {
            case NetOperationType.Hello:
                try
                {
                    HelloResponse response = new HelloResponse(ms, rp);
                    Node.Instance.NodeServers.UpdateNodeServers(response.NodeServers);
                    OnHelloResponse(response);
                }
                catch (Exception e)
                {
                    Log.Error(e.Message, e);
                }

                break;

            case NetOperationType.Transactions:
                BlockResponse transactionBlockResponse = new BlockResponse(ms, rp);
                OnGetBlockResponse(transactionBlockResponse);
                break;

            case NetOperationType.Blocks:
                BlockResponse blockResponse = new BlockResponse(ms, rp);
                OnGetBlockResponse(blockResponse);
                break;

            case NetOperationType.CheckPoint:
                break;
            }
        }
Exemple #7
0
        public void testGetResultForBlockByNumber()
        {
            XooaClient xooaClient = new XooaClient();

            xooaClient.setApiToken(XooaConstants.API_TOKEN);

            string resultId = "07ce7042-67d8-431f-84a8-fdb3f4145225";

            try {
                BlockResponse blockResponse = xooaClient.getResultForBlockByNumber(resultId);

                Assert.IsNotEmpty(blockResponse.getBlockNumber().ToString());

                Assert.IsNotEmpty(blockResponse.getDataHash());

                Assert.IsNotEmpty(blockResponse.getNumberOfTransactions().ToString());

                Assert.IsNotEmpty(blockResponse.getPreviousHash());
            } catch (XooaRequestTimeoutException xrte) {
                Assert.IsNotEmpty(xrte.getResultUrl());

                Assert.IsNotEmpty(xrte.getResultId());

                Assert.AreEqual(resultId, xrte.getResultId());
            }
        }
Exemple #8
0
        public async Task <BlockDto> MapResponseToDtoAsync(BlockResponse blockResponse, bool includeTransactions)
        {
            var blockDto = _mapper.Map <BlockDto>(blockResponse);

            if (!includeTransactions)
            {
                return(blockDto);
            }

            var txResponses = await GetTransactionsAsync(blockResponse.TransactionHash, blockResponse.Height);

            var txs = txResponses
                      .Select(x => _mapper.Map <TransactionDto>(x))
                      .ToList();

            for (var i = 0; i < txs.Count; i++)
            {
                var tx = txs[i];

                foreach (var txI in tx.Inputs)
                {
                    txI.TransactionInputOutputType = TransactionInputOutputType.Input;
                }

                foreach (var txI in tx.Outputs)
                {
                    txI.TransactionInputOutputType = TransactionInputOutputType.Output;
                }

                switch (i)
                {
                case 0 when blockDto.Channel == (int)BlockChannels.PoS:
                    if (tx.Inputs.Any() && tx.Outputs.Any() && tx.Outputs.Count == 1)
                    {
                        tx.TransactionType = tx.Inputs.Any(x => tx.Outputs.First().AddressHash == x.AddressHash)
                                ? TransactionType.Coinstake
                                : TransactionType.CoinstakeGenesis;
                    }
                    break;

                case 0:
                    tx.TransactionType = (BlockChannels)blockDto.Channel == BlockChannels.Hash
                            ? TransactionType.CoinbaseHash
                            : TransactionType.CoinbasePrime;
                    break;

                default:
                    tx.TransactionType = TransactionType.User;
                    break;
                }
            }

            blockDto.Transactions = txs;

            return(blockDto);
        }
Exemple #9
0
        /// <summary>
        /// Get BlockResponse data for the Result Id.
        /// </summary>
        /// <exception cref="Xooa.Client.Exception.XooaApiException">Thrown when fails to make API call</exception>
        /// <param name="resultId">Result Id of the transaction to fetch data.</param>
        /// <param name="timeout">Timeout interval for transaction.</param>
        /// <returns>BlockResponse giving the data about the BlockByNumber request.</returns>
        public BlockResponse getResultForBlockByNumber(string resultId, string timeout)
        {
            Log.Info("Invoking URL - " + XooaConstants.RESULT_URL);

            var localVarPath = XooaConstants.RESULT_URL;
            var contentType  = XooaConstants.CONTENT_TYPE;

            var localVarQueryParameters = new List <KeyValuePair <string, string> >();

            localVarQueryParameters.Add(new KeyValuePair <string, string>(XooaConstants.ASYNC, XooaConstants.FALSE));
            localVarQueryParameters.Add(new KeyValuePair <string, string>(XooaConstants.TIMEOUT, timeout));

            var localVarHeaderParams = new Dictionary <string, string>();

            localVarHeaderParams.Add(XooaConstants.ACCEPT, XooaConstants.CONTENT_TYPE);
            localVarHeaderParams.Add(XooaConstants.AUTHORIZATION, XooaConstants.TOKEN + ApiToken);

            var localVarPathParams = new Dictionary <string, string>();

            localVarPathParams.Add("ResultId", resultId);

            int statusCode = 0;

            try {
                RestRequest request = XooaSDK.Client.Util.Request.PrepareRequest(localVarPath,
                                                                                 RestSharp.Method.GET, localVarQueryParameters, null, localVarHeaderParams,
                                                                                 null, localVarPathParams, contentType);

                IRestResponse response = RestClient.Execute(request);

                JObject details = XooaSDK.Client.Util.Request.GetData(response);

                var payload = details["result"];

                BlockResponse blockResponse = new BlockResponse(
                    payload["previous_hash"].ToString(),
                    payload["data_hash"].ToString(),
                    (int)payload["blockNumber"],
                    (int)payload["numberOfTransactions"]);

                return(blockResponse);
            } catch (XooaRequestTimeoutException xrte) {
                Log.Error(xrte);
                throw xrte;
            } catch (XooaApiException xae) {
                Log.Error(xae);
                throw xae;
            } catch (System.Exception e) {
                Log.Error(e);
                throw new XooaApiException(statusCode, e.Message);
            }
        }
        public BlockResponse SendGetBlockStateCommand(int blockId)
        {
            Block block = DA.Current.Single <Block>(blockId);

            try
            {
                BlockResponse result = block.CreateBlockResponse();
                result.BlockState.Points = _points.Where(x => x.BlockID == block.BlockID).ToArray();
                return(result);
            }
            catch (Exception ex)
            {
                return(block.CreateBlockResponse(ex));
            }
        }
        /// <summary>
        /// Get block information for a given hash or height
        /// </summary>
        /// <param name="id">blockhash or height</param>
        /// <returns></returns>
        public ActionResult Block(string id)
        {
            BlockResponse b = _blocks.Get(id);

            if (b == null)
            {
                ExplorerError error = new ExplorerError();
                error.Errors.Add("Block not found. Try again or contact us for assistance");

                TempData["Errors"] = error;
                return(RedirectToAction("Index"));
            }

            return(View(b));
        }
Exemple #12
0
        public ActionResult <BlockResponse> Get(string id)
        {
            if (string.IsNullOrEmpty(id))
            {
                return(null);
            }

            var data = (id.Length > 30 && id.Substring(0, 2).Equals("0x")) ?
                       _dataAdapter.GetBlockByHash(_metadataSchema.DatabaseSchema.TableList.ToArray(), id, "-1") :
                       _dataAdapter.GetBlockByNumber(_metadataSchema.DatabaseSchema.TableList.ToArray(), id);

            if (data == null)
            {
                return(null);
            }

            var result = BlockResponse.Default();

            result.Data               = ResponseWrapper.BlockData(data);
            result.Data.Id            = id;
            result.Data.Attributes.Id = id;
            result.Includes           = ResponseWrapper.Block(data);

            var inh = new Inherents();
            var lst = new List <InherentsItem>();

            foreach (var item in result.Includes)
            {
                lst.Add(new InherentsItem {
                    Id         = item.Id,
                    Type       = "extrinsic",
                    Attributes = item.Attributes
                });
            }

            inh.Data = lst;

            result.Data.Relationships = new Relationship
            {
                Event        = new string[] { },
                Logs         = new string[] { },
                Inherents    = inh,
                Transactions = new string[] { }
            };

            return(result);
        }
        public override BlockResponse SendGetBlockStateCommand(int blockId)
        {
            var block = DA.Current.Single <Block>(blockId);

            try
            {
                using (var sender = Connect(block))
                {
                    byte[] buffer = CreateGetBlockStateBuffer();

                    Log.Write(block.BlockID, $"WagoConnection: Sending GetBlockState message to block: BlockID = {block.BlockID}, Data = {WagoUtility.GetDataString(buffer)}");

                    byte[] recvBuffer = new byte[65];

                    int bytesRecv = SendMessageToBlock(sender, buffer, recvBuffer, true);

                    if (bytesRecv > 0)
                    {
                        Log.Write(block.BlockID, $"WagoConnection: Received {bytesRecv} bytes [{WagoUtility.BytesToString(recvBuffer, bytesRecv)}] from block {block.BlockID}");
                    }
                    else
                    {
                        Log.Write(block.BlockID, $"WagoConnection: Block {block.BlockID} did not return any data");
                    }

                    BlockResponse result = block.CreateBlockResponse();

                    var testBlock = DA.Current.Query <Block>().First(x => x.BlockName == "wago_test");

                    result.BlockState.Points = block.Points.Select(x =>
                    {
                        var p = new Point()
                        {
                            Block = testBlock, ModPosition = 0, Name = x.Name, Offset = x.Offset, PointID = x.PointID
                        };
                        return(WagoUtility.GetPointState(p, recvBuffer));
                    }).ToArray();

                    return(result);
                }
            }
            catch (Exception ex)
            {
                return(block.CreateBlockResponse(ex));
            }
        }
        public BlockResponse GetBlockState(int blockId)
        {
            // Compose Action object
            BlockAction action = new BlockAction(blockId);

            // Get RequestQueue, and push data into queue
            IRequestQueue queue = QueueCollection.Current.Item(blockId);

            if (queue == null)
            {
                throw new InvalidOperationException($"Could not find queue with BlockID {blockId}");
            }

            // Send request for block state
            queue.Push(action);

            // Wait a bit for the the response to appear
            BlockResponse result = (BlockResponse)queue.GetResponse(action.MessageID);

            return(result);
        }
Exemple #15
0
        public async Task <HttpResponseMessage> UpdateAsync(MT_Block BMD)
        {
            Db = con.SurgeryCenterDb(BMD.Slug);
            BlockResponse Response = new BlockResponse();

            try
            {
                Dictionary <string, object> initialData = new Dictionary <string, object>
                {
                    { "Block_Type", BMD.Block_Type },
                    { "Block_Name", BMD.Block_Name },
                    { "Block_Modify_Date", con.ConvertTimeZone(BMD.Block_TimeZone, Convert.ToDateTime(BMD.Block_Modify_Date)) },
                    { "Block_Is_Active", BMD.Block_Is_Active },
                    { "Block_Is_Deleted", BMD.Block_Is_Deleted }
                };

                DocumentReference docRef = Db.Collection("MT_Block").Document(BMD.Block_Unique_ID);
                WriteResult       Result = await docRef.UpdateAsync(initialData);

                if (Result != null)
                {
                    Response.Status  = con.StatusSuccess;
                    Response.Message = con.MessageSuccess;
                    Response.Data    = BMD;
                }
                else
                {
                    Response.Status  = con.StatusNotUpdate;
                    Response.Message = con.MessageNotUpdate;
                    Response.Data    = null;
                }
            }
            catch (Exception ex)
            {
                Response.Status  = con.StatusFailed;
                Response.Message = con.MessageFailed + ", Exception : " + ex.Message;
            }
            return(ConvertToJSON(Response));
        }
        public async Task <BlockResponse> GetListBlock(string strToken)
        {
            BlockResponse respData = null;

            try
            {
                string              Url             = GetUrlListBlock(strToken);
                HttpClient          client          = new HttpClient();
                HttpResponseMessage responseMessage = await client.GetAsync(Url);

                if (responseMessage.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    string result = await responseMessage.Content.ReadAsStringAsync();

                    respData = JsonConvert.DeserializeObject <BlockResponse>(result);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return(respData);
        }
Exemple #17
0
        public void testGetBlockByNumber()
        {
            XooaClient xooaClient = new XooaClient();

            xooaClient.setApiToken(XooaConstants.API_TOKEN);

            try {
                BlockResponse br = xooaClient.getBlockByNumber("10");

                Assert.IsNotNull(br.getBlockNumber());

                Assert.IsNotEmpty(br.getDataHash());

                Assert.IsNotEmpty(br.getPreviousHash());

                Assert.IsNotNull(br.getNumberOfTransactions());

                Assert.AreEqual(10, br.getBlockNumber(), "Block Numbers do not match");
            } catch (XooaRequestTimeoutException xrte) {
                Assert.IsNotEmpty(xrte.getResultId());

                Assert.IsNotEmpty(xrte.getResultUrl());
            }
        }
Exemple #18
0
 public BlockResponseEventArgs(BlockResponse blockResponse)
 {
     BlockResponse = blockResponse;
 }
Exemple #19
0
        protected virtual void HandleRequests(MessageHeader rp, MemoryStream ms)
        {
            switch (rp.Operation)
            {
            case NetOperationType.Blocks:
                BlockRequest blockRequest  = new BlockRequest(ms, rp);
                var          blockResponse = new BlockResponse
                {
                    RequestId = blockRequest.RequestId,
                    Blocks    = BlockChain.Instance.GetBlocks(blockRequest.StartBlock, blockRequest.EndBlock)
                };
                using (MemoryStream memoryStream = new MemoryStream())
                {
                    blockResponse.SaveToStream(memoryStream);
                    memoryStream.Position = 0;
                    SendRaw(memoryStream);
                }

                break;

            case NetOperationType.Transactions:
            {
                BlockRequest  transactionBlockRequest  = new BlockRequest(ms, rp);
                BlockResponse transactionBlockResponse = new BlockResponse
                {
                    RequestId = transactionBlockRequest.RequestId,
                    Blocks    = BlockChain.Instance.GetBlocks(transactionBlockRequest.StartBlock,
                                                              transactionBlockRequest.EndBlock).ToList()
                };
                using (MemoryStream memoryStream = new MemoryStream())
                {
                    transactionBlockResponse.SaveToStream(memoryStream);
                    memoryStream.Position = 0;
                    SendRaw(memoryStream);
                }
                break;
            }

            case NetOperationType.CheckPoint:
                break;

            case NetOperationType.Hello:
                HelloRequest request = new HelloRequest(ms, rp);
                Node.Instance.NodeServers.UpdateNodeServers(request.NodeServers);
                HelloResponse response = new HelloResponse(request)
                {
                    Timestamp   = DateTime.UtcNow,
                    Error       = 0,
                    ServerPort  = Node.NetParams.Port,
                    Block       = BlockChain.Instance.GetLastBlock(),
                    WorkSum     = CheckPoints.WorkSum,
                    AccountKey  = Node.Instance.NodeKey,
                    RequestType = RequestType.Response,
                    Operation   = NetOperationType.Hello
                };
                using (MemoryStream vm = new MemoryStream())
                {
                    response.SaveToStream(vm);
                    vm.Position = 0;
                    SendRaw(vm);
                }
                break;
            }
        }
Exemple #20
0
 protected virtual void OnGetBlockResponse(BlockResponse blockResponse)
 {
     BlockResponse?.Invoke(this, new BlockResponseEventArgs(blockResponse));
 }
Exemple #21
0
        private void FillToolStatusTable(DataTable dtToolStatus)
        {
            DataRow row = null;

            if (!dtToolStatus.Columns.Contains("PointID"))
            {
                dtToolStatus.Columns.Add("PointID", typeof(int));
            }
            if (!dtToolStatus.Columns.Contains("InterlockStatus"))
            {
                dtToolStatus.Columns.Add("InterlockStatus", typeof(string));
            }
            if (!dtToolStatus.Columns.Contains("InterlockState"))
            {
                dtToolStatus.Columns.Add("InterlockState", typeof(bool));
            }
            if (!dtToolStatus.Columns.Contains("InterlockError"))
            {
                dtToolStatus.Columns.Add("InterlockError", typeof(bool));
            }
            if (!dtToolStatus.Columns.Contains("IsInterlocked"))
            {
                dtToolStatus.Columns.Add("IsInterlocked", typeof(bool));
            }

            int        blockId = 0;
            BlockState blockState;

            var blocks = Session.Query <Block>().ToList();
            Dictionary <int, BlockState> dict = new Dictionary <int, BlockState>();

            var points     = Session.Query <Point>().ToList();
            var interlocks = Session.Query <ActionInstance>().Where(x => x.ActionName == "Interlock").ToList();

            foreach (DataRow dr in dtToolStatus.Rows)
            {
                row        = dr;
                blockState = null;

                if (dr["ResourceID"] != DBNull.Value)
                {
                    dr.SetField("InterlockStatus", "Blank");
                    dr.SetField("InterlockState", false);
                    dr.SetField("InterlockError", false);
                    dr.SetField("IsInterlocked", true);

                    if (dr["PointID"] == DBNull.Value)
                    {
                        var inst = interlocks.FirstOrDefault(x => x.ActionID == row.Field <int>("ResourceID"));

                        if (inst != null)
                        {
                            dr.SetField("PointID", inst.Point);
                        }
                        else
                        {
                            dr.SetField("PointID", 0);
                        }
                    }

                    int pointId = dr.Field <int>("PointID");

                    if (pointId > 0)
                    {
                        Point point = points.First(x => x.PointID == pointId);

                        blockId = point.Block.BlockID;

                        if (dict.ContainsKey(blockId))
                        {
                            blockState = dict[blockId];

                            if (blockState == null)
                            {
                                row.SetField("InterlockStatus", "Wago block fault detected.");
                                row.SetField("InterlockError", true);
                            }
                        }
                        else
                        {
                            //We try to get returned data
                            try
                            {
                                BlockResponse resp = GetBlockState(blockId);
                                blockState = resp.EnsureSuccess().BlockState;
                            }
                            catch (Exception ex)
                            {
                                string errmsg = ex.ToString();
                                row.SetField("InterlockStatus", "Wago block fault detected.");
                                row.SetField("InterlockError", true);
                            }

                            //blockState might be null here if there was a fault but that's ok
                            dict.Add(blockId, blockState);
                        }

                        if (blockState != null)
                        {
                            bool pointState = blockState.GetPointState(point.PointID);
                            row.SetField("InterlockState", pointState);

                            if (pointState)
                            {
                                row.SetField("InterlockStatus", "Tool Enabled");
                            }
                            else
                            {
                                row.SetField("InterlockStatus", "Tool Disabled");
                            }
                        }
                    }
                    else
                    {
                        //this is not an error
                        row.SetField("InterlockStatus", "No interlock for resource.");
                        row.SetField("IsInterlocked", false);
                    }
                }
            }
        }
Exemple #22
0
        public static BlockState GetBlockState(int blockId)
        {
            BlockResponse resp = ServiceProvider.Current.Control.GetBlockState(blockId);

            return(resp.EnsureSuccess().BlockState);
        }