コード例 #1
0
        internal static SMB2Command GetReadResponse(ReadRequest request, ISMBShare share, SMB2ConnectionState state)
        {
            SMB2Session    session  = state.GetSession(request.Header.SessionID);
            OpenFileObject openFile = session.GetOpenFileObject(request.FileId);

            if (openFile == null)
            {
                state.LogToServer(Severity.Verbose, "Read failed. Invalid FileId. (SessionID: {0}, TreeID: {1}, FileId: {2})", request.Header.SessionID, request.Header.TreeID, request.FileId.Volatile);
                return(new ErrorResponse(request.CommandName, NTStatus.STATUS_FILE_CLOSED));
            }

            if (share is FileSystemShare)
            {
                if (!((FileSystemShare)share).HasReadAccess(session.SecurityContext, openFile.Path))
                {
                    state.LogToServer(Severity.Verbose, "Read from '{0}{1}' failed. User '{2}' was denied access.", share.Name, openFile.Path, session.UserName);
                    return(new ErrorResponse(request.CommandName, NTStatus.STATUS_ACCESS_DENIED));
                }
            }

            byte[]   data;
            NTStatus readStatus = share.FileStore.ReadFile(out data, openFile.Handle, (long)request.Offset, (int)request.ReadLength);

            if (readStatus != NTStatus.STATUS_SUCCESS)
            {
                state.LogToServer(Severity.Verbose, "Read from '{0}{1}' failed. NTStatus: {2}. (FileId: {3})", share.Name, openFile.Path, readStatus, request.FileId.Volatile);
                return(new ErrorResponse(request.CommandName, readStatus));
            }
            ReadResponse response = new ReadResponse();

            response.Data = data;
            return(response);
        }
コード例 #2
0
        public ReadReply ReadHandler(ReadRequest request)
        {
            Partition partition      = server.getPartition(request.ObjectKey.PartitionId);
            int       partitionClock = partition.getClock();

            Console.WriteLine(">>> PartitionName=" + request.ObjectKey.PartitionId + ", PartitionClock=" + partitionClock);
            ReadReply reply;

            try
            {
                DataStoreValue value = partition.getData(new DataStoreKey(request.ObjectKey.PartitionId, request.ObjectKey.ObjectId));
                reply = new ReadReply
                {
                    Object = new DataStoreValueDto {
                        Val = value.val
                    },
                    ObjectExists   = true,
                    PartitionClock = partitionClock
                };
            }
            catch (Exception)
            {
                reply = new ReadReply
                {
                    Object = new DataStoreValueDto {
                        Val = "NA"
                    },
                    ObjectExists   = false,
                    PartitionClock = partitionClock
                };
            }

            return(reply);
        }
コード例 #3
0
ファイル: OPC.cs プロジェクト: krzyfre/HMI
        public static async Task <DataValue[]> ReadVar(int node, string[] VarNames)
        {
            try
            {
                ReadValueId[] valuesToRead = new ReadValueId[VarNames.Length];
                for (int i = 0; i < VarNames.Length; i++)
                {
                    valuesToRead[i] = new ReadValueId
                    {
                        // you can parse the nodeId from a string.
                        NodeId = NodeId.Parse("ns=" + node.ToString() + ";s=" + VarNames[i]),
                        // variable class nodes have a Value attribute.
                        AttributeId = AttributeIds.Value
                    };
                }

                var readRequest = new ReadRequest
                {
                    NodesToRead = valuesToRead
                };
                // send the ReadRequest to the server.
                var readResult = await channel.ReadAsync(readRequest);

                return(readResult.Results);
            }
            catch (Exception ex)
            {
                //await channel.AbortAsync();
                return(null);
            }
        }
コード例 #4
0
        public IPluginTestScenario Read(Action <ReadRequest> configureRead)
        {
            var readRequest = new ReadRequest();

            configureRead(readRequest);
            return(new RunReadJobScenario(_publisher, _configureRequest, readRequest));
        }
コード例 #5
0
        public async Task StreamingRead()
        {
            // Snippet: StreamingRead(ReadRequest,CallSettings)
            // Create client
            SpannerClient spannerClient = SpannerClient.Create();
            // Initialize request argument
            ReadRequest request = new ReadRequest
            {
                SessionAsSessionName = new SessionName("[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]"),
                Table   = "",
                Columns = { },
                KeySet  = new KeySet(),
            };

            // Make the request, returning a streaming response
            SpannerClient.StreamingReadStream streamingResponse = spannerClient.StreamingRead(request);

            // Read streaming responses from server until complete
            IAsyncEnumerator <PartialResultSet> responseStream = streamingResponse.ResponseStream;

            while (await responseStream.MoveNext())
            {
                PartialResultSet response = responseStream.Current;
                // Do something with streamed response
            }
            // The response stream has completed
            // End snippet
        }
コード例 #6
0
        public ReadReply ReadHandler(ReadRequest request)
        {
            Partition partition = server.getPartition(request.ObjectKey.PartitionId);
            ReadReply reply     = null;

            try
            {
                DataStoreValue value = partition.getData(new DataStoreKey(request.ObjectKey.PartitionId, request.ObjectKey.ObjectId));
                reply = new ReadReply
                {
                    Object = new DataStoreValueDto {
                        Val = value.val
                    },
                    ObjectExists = true
                };
            }
            catch (Exception)
            {
                reply = new ReadReply
                {
                    Object = new DataStoreValueDto {
                        Val = "NA"
                    },
                    ObjectExists = false
                };
            }

            return(reply);
        }
コード例 #7
0
        public override Task <ReadCrcResponse> ReadPpuCrc(ReadRequest request, ServerCallContext context)
        {
            var result = new ReadCrcResponse();

            try
            {
                if (request.Length > 1)
                {
                    Console.Write($"Reading CRC of 0x{request.Address:X4}-0x{request.Address + request.Length - 1:X4} @ PPU... ");
                }
                else
                {
                    Console.Write($"Reading CRC of 0x{request.Address:X4} @ PPU... ");
                }
                result.Crc = dumper.ReadPpuCrc((ushort)request.Address, (ushort)request.Length);
                Console.WriteLine($"{result.Crc:X4}");
            }
            catch (Exception ex)
            {
                PrintError(ex);
                result.ErrorInfo = new ErrorInfo()
                {
                    ExceptionName    = ex.GetType().ToString(),
                    ExceptionMessage = ex.Message
                };
            }
            return(Task.FromResult(result));
        }
コード例 #8
0
        // Server side handler of the SayHello RPC
        public override Task <ReadResponse> ReadOpcNodes(ReadRequest request, ServerCallContext context)
        {
            List <string> names = new List <string> {
            };

            foreach (var name in request.Names)
            {
                names.Add(name);
            }
            ReadStatusCode status;
            var            values = _services.readValueFromCache(names.ToArray(), out status);

            ReadResponse r = new ReadResponse();

            foreach (var variable in values)
            {
                NodeValue val = new NodeValue();
                val.Name      = variable.name;
                val.Type      = variable.systemType;
                val.Value     = variable.value.ToString();
                val.Timestamp = variable.timestamp.ToUniversalTime().ToString("o");
                r.Nodes.Add(val);
            }
            r.ErrorMessage = (status == ReadStatusCode.Ok) ? "none" : "Error";
            r.IsError      = (status != ReadStatusCode.Ok);

            return(Task.FromResult(r));
        }
コード例 #9
0
        public override Tuple Read(Tuple tuple)
        {
            var request = new ReadRequest(ClientRequestSeqNumber, EndpointURL, tuple);

            Log("[SEQ:" + ClientRequestSeqNumber + "] Read: " + tuple);
            return(SendBlockingRequest(request));
        }
コード例 #10
0
        public void VisitRead(Read read)
        {
            ClientResponse clientResponse;

            do
            {
                clientResponse = null;
                ReadRequest readRequest = new ReadRequest(this.client.Id, this.client.GetRequestNumber(), read.Tuple);
                while (clientResponse == null)
                {
                    clientResponse = (ClientResponse)this.messageServiceClient.Request(
                        readRequest,
                        this.client.Leader,
                        Timeout.TIMEOUT_SMR_CLIENT);
                    if (clientResponse != null)
                    {
                        break;
                    }

                    this.client.DoHandShake();
                }

                if (clientResponse.Result == null)
                {
                    Thread.Sleep(Timeout.TIMEOUT_SMR_CLIENT_WAIT);
                }
            } while (clientResponse.Result == null);

            Console.WriteLine($"Read tuple = {clientResponse.Result}");
        }
コード例 #11
0
        public NTStatus ReadFile(out byte[] data, object handle, long offset, int maxCount)
        {
            data = null;
            ReadRequest request = new ReadRequest();

            request.Header.CreditCharge = (ushort)Math.Ceiling((double)maxCount / BytesPerCredit);
            request.FileId     = (FileID)handle;
            request.Offset     = (ulong)offset;
            request.ReadLength = (uint)maxCount;

            TrySendCommand(request);
            do
            {
                SMB2Command response = m_client.WaitForCommand(SMB2CommandName.Read);
                if (response != null)
                {
                    if (response.Header.Status == NTStatus.STATUS_SUCCESS && response is ReadResponse)
                    {
                        data = ((ReadResponse)response).Data;
                    }
                    else if (response.Header.Status == NTStatus.STATUS_PENDING)
                    {
                        continue;
                    }

                    return(response.Header.Status);
                }
                else
                {
                    return(NTStatus.STATUS_INVALID_SMB);
                }
            } while (true);
        }
コード例 #12
0
        public async Task Polling()
        {
            var channel = new UaTcpSessionChannel(
                this.localDescription,
                this.certificateStore,
                new AnonymousIdentity(),
                EndpointUrl,
                loggerFactory: this.loggerFactory);

            await channel.OpenAsync();
            logger.LogInformation($"Opened session with endpoint '{channel.RemoteEndpoint.EndpointUrl}'.");
            logger.LogInformation($"SecurityPolicy: '{channel.RemoteEndpoint.SecurityPolicyUri}'.");
            logger.LogInformation($"SecurityMode: '{channel.RemoteEndpoint.SecurityMode}'.");
            logger.LogInformation($"Activated session '{channel.SessionId}'.");


            var readRequest = new ReadRequest { NodesToRead = new[] { new ReadValueId { NodeId = NodeId.Parse(VariableIds.Server_ServerStatus_CurrentTime), AttributeId = AttributeIds.Value } } };
            for (int i = 0; i < 10; i++)
            {
                var readResult = await channel.ReadAsync(readRequest);
                logger.LogInformation("Read {0}", readResult.Results[0].GetValueOrDefault<DateTime>());
                await Task.Delay(1000);
            }
            logger.LogInformation($"Closing session '{channel.SessionId}'.");
            await channel.CloseAsync();
        }
コード例 #13
0
        public async Task Read()
        {
            var channel = new UaTcpSessionChannel(
                this.localDescription,
                this.certificateStore,
                new AnonymousIdentity(),
                EndpointUrl,
                loggerFactory: this.loggerFactory);

            await channel.OpenAsync();
            logger.LogInformation($"Opened session with endpoint '{channel.RemoteEndpoint.EndpointUrl}'.");
            logger.LogInformation($"SecurityPolicy: '{channel.RemoteEndpoint.SecurityPolicyUri}'.");
            logger.LogInformation($"SecurityMode: '{channel.RemoteEndpoint.SecurityMode}'.");
            logger.LogInformation($"Activated session '{channel.SessionId}'.");

            var readRequest = new ReadRequest { NodesToRead = new[] { new ReadValueId { NodeId = NodeId.Parse(VariableIds.Server_ServerStatus), AttributeId = AttributeIds.Value } } };
            var readResult = await channel.ReadAsync(readRequest);
            var serverStatus = readResult.Results[0].GetValueOrDefault<ServerStatusDataType>();

            logger.LogInformation("Server status:");
            logger.LogInformation("  ProductName: {0}", serverStatus.BuildInfo.ProductName);
            logger.LogInformation("  SoftwareVersion: {0}", serverStatus.BuildInfo.SoftwareVersion);
            logger.LogInformation("  ManufacturerName: {0}", serverStatus.BuildInfo.ManufacturerName);
            logger.LogInformation("  State: {0}", serverStatus.State);
            logger.LogInformation("  CurrentTime: {0}", serverStatus.CurrentTime);

            logger.LogInformation($"Closing session '{channel.SessionId}'.");
            await channel.CloseAsync();
        }
コード例 #14
0
        internal static async Task <Type> GetDataTypeFromNodeId(this UaSession session, NodeId nodeId)
        {
            var readRequest = new ReadRequest {
                NodesToRead = { new ReadValueId {
                                    NodeId = nodeId, AttributeId = Attributes.DataType
                                }, new ReadValueId{
                                    NodeId = nodeId, AttributeId = Attributes.ValueRank
                                } }
            };
            var readResponse = await session.ReadAsync(readRequest);

            var dataType  = readResponse.Results[0].GetValue(NodeId.Null);
            var valueRank = readResponse.Results[1].GetValue(-2);
            var type      = TypeInfo.GetSystemType(dataType, session.Factory);

            if (type != null)
            {
                if (valueRank > 0)
                {
                    return(type.MakeArrayType(valueRank));
                }
                return(type);
            }
            return(typeof(object));
        }
コード例 #15
0
        public async Task SessionTimeoutCausesFault()
        {
            // discover available endpoints of server.
            var getEndpointsRequest = new GetEndpointsRequest
            {
                EndpointUrl = EndpointUrl,
                ProfileUris = new[] { TransportProfileUris.UaTcpTransport }
            };

            Console.WriteLine($"Discovering endpoints of '{getEndpointsRequest.EndpointUrl}'.");
            var getEndpointsResponse = await UaTcpDiscoveryService.GetEndpointsAsync(getEndpointsRequest);

            var selectedEndpoint = getEndpointsResponse.Endpoints.OrderBy(e => e.SecurityLevel).Last();

            var           selectedTokenType = selectedEndpoint.UserIdentityTokens[0].TokenType;
            IUserIdentity selectedUserIdentity;

            switch (selectedTokenType)
            {
            case UserTokenType.UserName:
                selectedUserIdentity = new UserNameIdentity("root", "secret");
                break;

            default:
                selectedUserIdentity = new AnonymousIdentity();
                break;
            }

            var channel = new UaTcpSessionChannel(
                this.localDescription,
                this.certificateStore,
                selectedUserIdentity,
                selectedEndpoint,
                loggerFactory: this.loggerFactory,
                options: new UaTcpSessionChannelOptions {
                SessionTimeout = 10000
            });

            await channel.OpenAsync();

            Console.WriteLine($"Opened session with endpoint '{channel.RemoteEndpoint.EndpointUrl}'.");
            Console.WriteLine($"SecurityPolicy: '{channel.RemoteEndpoint.SecurityPolicyUri}'.");
            Console.WriteLine($"SecurityMode: '{channel.RemoteEndpoint.SecurityMode}'.");
            Console.WriteLine($"Activated session '{channel.SessionId}'.");

            // server should close session due to inactivity
            await Task.Delay(20000);

            // should throw exception
            var readRequest = new ReadRequest {
                NodesToRead = new[] { new ReadValueId {
                                          NodeId = NodeId.Parse(VariableIds.Server_ServerStatus_CurrentTime), AttributeId = AttributeIds.Value
                                      } }
            };
            await channel.ReadAsync(readRequest);

            Console.WriteLine($"Closing session '{channel.SessionId}'.");
            await channel.CloseAsync();
        }
コード例 #16
0
        public async Task ReadStreamLimitTest()
        {
            // setup
            Server server = new Server
            {
                Services = { Publisher.BindService(new PluginCampaigner.Plugin.Plugin()) },
                Ports    = { new ServerPort("localhost", 0, ServerCredentials.Insecure) }
            };

            server.Start();

            var port = server.Ports.First().BoundPort;

            var channel = new Channel($"localhost:{port}", ChannelCredentials.Insecure);
            var client  = new Publisher.PublisherClient(channel);

            var schema = GetTestSchema();

            var connectRequest = GetConnectSettings();

            var schemaRequest = new DiscoverSchemasRequest
            {
                Mode      = DiscoverSchemasRequest.Types.Mode.Refresh,
                ToRefresh = { schema }
            };

            var request = new ReadRequest()
            {
                DataVersions = new DataVersions
                {
                    JobId = "test"
                },
                JobId = "test",
                Limit = 1
            };

            // act
            client.Connect(connectRequest);
            var schemasResponse = client.DiscoverSchemas(schemaRequest);

            request.Schema = schemasResponse.Schemas[0];

            var response       = client.ReadStream(request);
            var responseStream = response.ResponseStream;
            var records        = new List <Record>();

            while (await responseStream.MoveNext())
            {
                records.Add(responseStream.Current);
            }

            // assert
            Assert.Equal(1, records.Count);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #17
0
 private ReadArguments ParseReadRequest(ReadRequest request)
 {
     return(new ReadArguments {
         PartitionId = request.PartitionId,
         ObjectId = request.ObjectId,
         Timestamp = BuildVectorClock(request.Timestamp)
     });
 }
コード例 #18
0
 private AsyncUnaryCall <ReadReply> ClientReadAsync(ReadRequest request)
 {
     if (_isAdvanced)
     {
         return(_client.ReadAdvancedAsync(request));
     }
     return(_client.ReadAsync(request));
 }
コード例 #19
0
ファイル: Form1.cs プロジェクト: Thrill12/EconomyThingie
        private void button2_Click(object sender, EventArgs e)
        {
            ReadRequest req = new ReadRequest("got back from server woo");

            string temp = client.SendRequest <string>(req);

            UsernameBox.AppendText(Environment.NewLine + temp);
        }
コード例 #20
0
 public override Task <Data> Read(ReadRequest request, ServerCallContext context)
 {
     return(Task.FromResult(new Data
     {
         Offset = request.Offset,
         Message = Google.Protobuf.ByteString.CopyFrom(_storage.Get(request.Offset))
     }));
 }
コード例 #21
0
        public static LogEntry For(ReadRequest request)
        {
            LogEntry entry = new LogEntry("ReadRequest");

            entry.Add("RequestHeader", For(request.RequestHeader));
            entry.Add("NodesToRead", For(request.NodesToRead));
            return(entry);
        }
コード例 #22
0
        public async Task ReadStreamTest()
        {
            // setup

            Server server = new Server
            {
                Services = { Publisher.BindService(new Plugin.Plugin(GetMockHttpMessageHandler().ToHttpClient())) },
                Ports    = { new ServerPort("localhost", 0, ServerCredentials.Insecure) }
            };

            server.Start();

            var port = server.Ports.First().BoundPort;

            var channel = new Channel($"localhost:{port}", ChannelCredentials.Insecure);
            var client  = new Publisher.PublisherClient(channel);

            var connectRequest = GetConnectSettings();

            var request = new ReadRequest()
            {
                Schema = new Schema
                {
                    Id         = "[Customers.address]",
                    Properties =
                    {
                        new Property {
                            Id = "_id", Name = "_id", Type = PropertyType.Integer
                        },
                        new Property {
                            Id = "title", Name = "title", Type = PropertyType.String
                        }
                    },
                    Query = "query"
                },
                Limit = 2
            };

            // act
            client.Connect(connectRequest);
            var response       = client.ReadStream(request);
            var responseStream = response.ResponseStream;
            var records        = new List <Record>();

            while (await responseStream.MoveNext())
            {
                records.Add(responseStream.Current);
            }

            // assert
            Assert.Equal(5, records.Count);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #23
0
        public async Task ReadStreamTableSchemaTest()
        {
            // setup
            Server server = new Server
            {
                Services = { Publisher.BindService(new PluginDb2.Plugin.Plugin()) },
                Ports    = { new ServerPort("localhost", 0, ServerCredentials.Insecure) }
            };

            server.Start();

            var port = server.Ports.First().BoundPort;

            var channel = new Channel($"localhost:{port}", ChannelCredentials.Insecure);
            var client  = new Publisher.PublisherClient(channel);

            var connectRequest = GetConnectSettings();


            var request = new ReadRequest()
            {
                DataVersions = new DataVersions
                {
                    JobId = "test"
                },
                JobId = "test",
            };

            // act
            client.Connect(connectRequest);
            var schemas = client.DiscoverSchemas(new DiscoverSchemasRequest());

            request.Schema = schemas.Schemas.First();

            var response       = client.ReadStream(request);
            var responseStream = response.ResponseStream;
            var records        = new List <Record>();

            while (await responseStream.MoveNext())
            {
                records.Add(responseStream.Current);
            }

            // assert
            Assert.Equal(1000, records.Count);

            var record = JsonConvert.DeserializeObject <Dictionary <string, object> >(records[0].DataJson);

            Assert.Equal((long)1, record["\"ID\""]);
            Assert.Equal("Madison", record["\"FIRST_NAME\""]);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #24
0
        public static async Task <bool> JobCompletedSuccessfullyAsync(HttpClient httpClient, int workspaceId, int imagingSetId)
        {
            bool      jobComplete                   = false;
            const int maxTimeInMilliseconds         = (Constants.Waiting.MAX_WAIT_TIME_IN_MINUTES * 60 * 1000);
            const int sleepTimeInMilliSeconds       = Constants.Waiting.SLEEP_TIME_IN_SECONDS * 1000;
            int       currentWaitTimeInMilliseconds = 0;

            Guid fieldGuid = Constants.Guids.Fields.ImagingSet.Status;

            string      url         = $"Relativity.REST/api/Relativity.Objects/workspace/{workspaceId}/object/read";
            ReadRequest readRequest = new ReadRequest
            {
                Request = new request
                {
                    Object = new Models.RDO.Object
                    {
                        ArtifactID = imagingSetId
                    },
                    Fields = new[]
                    {
                        new field
                        {
                            Guid = fieldGuid.ToString()
                        }
                    }
                }
            };
            string request = JsonConvert.SerializeObject(readRequest);

            try
            {
                while (currentWaitTimeInMilliseconds < maxTimeInMilliseconds && jobComplete == false)
                {
                    Thread.Sleep(sleepTimeInMilliSeconds);

                    HttpResponseMessage response = RESTConnectionManager.MakePost(httpClient, url, request);
                    string result = await response.Content.ReadAsStringAsync();

                    bool success = HttpStatusCode.OK == response.StatusCode;
                    if (!success)
                    {
                        throw new Exception("Failed to Check if the Job is Complete.");
                    }
                    JObject resultObject = JObject.Parse(result);
                    jobComplete = resultObject["Object"]["FieldValues"][0]["Value"].Value <string>().Contains("Complete");

                    currentWaitTimeInMilliseconds += sleepTimeInMilliSeconds;
                }

                return(jobComplete);
            }
            catch (Exception ex)
            {
                throw new Exception($@"Error Checking for Imaging Job Completion: {ex.ToString()}");
            }
        }
コード例 #25
0
        public void ReadRequests_are_forwarded_to_worker()
        {
            var o = new TestContainer(this);

            var req = new ReadRequest(1, 1);

            o.Reader.Tell(req);

            o.ReadProbe.ExpectMsg <ReadRequest>(m => m == req);
        }
コード例 #26
0
ファイル: GStoreServicesImpl.cs プロジェクト: Opty-MSc/DIDA
        public override Task <ReadReply> Read(ReadRequest req, ServerCallContext _)
        {
            man.CheckFreeze();
            ReadReply reply = new ReadReply {
                Val = store.Read(req.IdPart, req.IdObj)
            };

            Lib.Sleep(new Random().Next(minDelay, maxDelay));
            return(Task.FromResult(reply));
        }
コード例 #27
0
        void StartReadRequest()
        {
            var request = new ReadRequest(_globalSequence + 1, _options.EventsPerReadRequest);

            _reader.Tell(request);

            _requestedEvents = request.Count;
            _lastRequestId   = request.RequestID;
            _readEvents      = 0;
        }
コード例 #28
0
        public void Reads_with_sequence_above_highest_sends_ReadFinished()
        {
            var reader = CreateReader();

            var req = new ReadRequest(1000, EventCount.Unlimited);

            reader.Tell(req);

            ExpectMsg <ReadFinished>(m => m.RequestID == req.RequestID);
        }
コード例 #29
0
        public void Reads_with_count_zero_sends_ReadFinished()
        {
            var reader = CreateReader();

            var req = new ReadRequest(1, 0);

            reader.Tell(req);

            ExpectMsg <ReadFinished>(m => m.RequestID == req.RequestID);
        }
コード例 #30
0
        public void ParsesReadRequest()
        {
            ReadRequest   original = new ReadRequest("Hallo Welt.txt", TftpTransferMode.netascii, null);
            CommandParser parser   = new CommandParser();

            ReadRequest parsed = (ReadRequest)parser.Parse(Serialize(original));

            Assert.AreEqual(original.Filename, parsed.Filename);
            Assert.AreEqual(original.Mode, parsed.Mode);
        }
コード例 #31
0
        private async Task FetchNamespaceTablesAsync()
        {
            var readValueIds = new ReadValueId[]
            {
                new ReadValueId
                {
                    NodeId = NodeId.Parse(VariableIds.Server_NamespaceArray),
                    AttributeId = AttributeIds.Value
                },
                new ReadValueId
                {
                    NodeId = NodeId.Parse(VariableIds.Server_ServerArray),
                    AttributeId = AttributeIds.Value
                }
            };
            var readRequest = new ReadRequest
            {
                NodesToRead = readValueIds
            };
            var readResponse = (ReadResponse)await this.RequestAsync(readRequest).ConfigureAwait(false);
            if (readResponse.Results.Length == 2)
            {
                if (StatusCode.IsGood(readResponse.Results[0].StatusCode))
                {
                    this.NamespaceUris.Clear();
                    this.NamespaceUris.AddRange(readResponse.Results[0].GetValueOrDefault<string[]>());
                }

                if (StatusCode.IsGood(readResponse.Results[1].StatusCode))
                {
                    this.ServerUris.Clear();
                    this.ServerUris.AddRange(readResponse.Results[1].GetValueOrDefault<string[]>());
                }
            }
        }
コード例 #32
0
ファイル: ComDaClient.cs プロジェクト: yuriik83/UA-.NET
        /// <summary>
        /// Reads the item values and stores the results in the request object.
        /// </summary>
        /// <param name="requests">The requests.</param>
        public void ReadItemValues(List<ReadRequest> requests)
        {
            ComDaGroup group = new ComDaGroup(this, false);

            try
            {
                int count1 = 0;
                GroupItem[] items = new GroupItem[requests.Count];
                ReadRequest[] addItemRequests = new ReadRequest[requests.Count];

                // create the items in the temporary group.
                for (int ii = 0; ii < requests.Count; ii++)
                {
                    ReadRequest request = requests[ii];

                    if (request == null)
                    {
                        continue;
                    }

                    if (!request.ValueRequired)
                    {
                        continue;
                    }

                    // add the item.
                    items[count1] = group.CreateItem(request.ItemId, 0, 0, true);
                    addItemRequests[count1] = request;
                    count1++;
                }

                // create the items on the server.
                group.ApplyChanges();

                // build the list of values to write.
                int count2 = 0;
                int[] serverHandles = new int[count1];
                ReadRequest[] readRequests = new ReadRequest[count1];

                for (int ii = 0; ii < count1; ii++)
                {
                    // check for error on create.
                    GroupItem item = items[ii];
                    ReadRequest request = addItemRequests[ii];

                    if (item.ErrorId < 0)
                    {
                        request.Value.Error = item.ErrorId;
                        continue;
                    }

                    serverHandles[count2] = item.ServerHandle;
                    readRequests[count2] = request;
                    count2++;
                }

                // write values to the server.
                DaValue[] values = group.SyncRead(serverHandles, count2);

                // read the values.
                for (int ii = 0; ii < count2; ii++)
                {
                    readRequests[ii].Value = values[ii];
                }
            }
            finally
            {
                // delete the group and items.
                group.Delete();
            }
        }
コード例 #33
0
ファイル: Opc.Ua.Client.cs プロジェクト: zryska/UA-.NET
        /// <summary>
        /// Begins an asynchronous invocation of the Read service.
        /// </summary>
        public IAsyncResult BeginRead(
            RequestHeader         requestHeader,
            double                maxAge,
            TimestampsToReturn    timestampsToReturn,
            ReadValueIdCollection nodesToRead,
            AsyncCallback         callback,
            object                asyncState)
        {
            ReadRequest request = new ReadRequest();

            request.RequestHeader      = requestHeader;
            request.MaxAge             = maxAge;
            request.TimestampsToReturn = timestampsToReturn;
            request.NodesToRead        = nodesToRead;

            UpdateRequestHeader(request, requestHeader == null, "Read");

            if (UseTransportChannel)
            {
                return TransportChannel.BeginSendRequest(request, callback, asyncState);
            }

            return InnerChannel.BeginRead(new ReadMessage(request), callback, asyncState);
        }
コード例 #34
0
ファイル: Queues.cs プロジェクト: nieve/ravenmq
        public ReadResults Read(ReadRequest readRequest)
        {
            bool hasMoreItems = false;
            var msgs = new List<OutgoingMessage>();
            var realPageSize = Math.Min(configuration.MaxPageSize, readRequest.PageSize);

            // have to be a separate tranasction, so the next read will get it
            // we expect that most of the time this is a no op, because there won't be any expired messages
            // this also follows the rule of only making the change when it is actually happening, so
            // until you read, there isn't any activity in the system
            transactionalStorage.Batch(actions => actions.Messages.ResetExpiredMessages());

            transactionalStorage.Batch(actions =>
            {
                var outgoingMessage = actions.Messages.Dequeue(readRequest.Queue, readRequest.LastMessageId);
                while (outgoingMessage != null && msgs.Count < realPageSize)
                {
                    if(ShouldConsumeMessage(outgoingMessage.Expiry,outgoingMessage.Queue))
                    {
                        actions.Messages.HideMessageFor(outgoingMessage.Id, readRequest.HideTimeout);
                    }
                    if (ShouldIncludeMessage(outgoingMessage))
                    {
                        var buffer = outgoingMessage.Data;
                        var memoryStream = new MemoryStream(buffer);
                        outgoingMessage.Metadata = memoryStream.ToJObject();
                        outgoingMessage.Data = new byte[outgoingMessage.Data.Length - memoryStream.Position];
                        Array.Copy(buffer, memoryStream.Position, outgoingMessage.Data, 0, outgoingMessage.Data.Length);
                        msgs.Add(outgoingMessage);
                    }
                    outgoingMessage = actions.Messages.Dequeue(readRequest.Queue, outgoingMessage.Id);
                }

                hasMoreItems = outgoingMessage != null;
            });
            return new ReadResults
            {
                HasMoreResults = hasMoreItems,
                Results = msgs,
                Queue = readRequest.Queue
            };
        }
コード例 #35
0
ファイル: ReadCommand.cs プロジェクト: nieve/ravenmq
 public ReadCommand()
 {
     ReadRequest = new ReadRequest();
 }
コード例 #36
0
ファイル: SubscribeRequest.cs プロジェクト: yuriik83/UA-.NET
        /// <summary>
        /// Queues the value to the monitored item.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <param name="request">The request.</param>
        /// <param name="monitoredItem">The monitored item.</param>
        public void QueueValue(ServerSystemContext context, ReadRequest request, MonitoredItem monitoredItem)
        {
            NodeHandle handle = monitoredItem.ManagerHandle as NodeHandle;

            if (handle == null)
            {
                return;
            }

            ReadValueId nodeToRead = monitoredItem.GetReadValueId();
            DataValue value = new DataValue();
            ServiceResult error = null;
            
            // read item value.
            DaItemState item = handle.Node as DaItemState;
            DaPropertyState daProperty = handle.Node as DaPropertyState;
            PropertyState uaProperty = handle.Node as PropertyState;

            if (item != null)
            {
                error = request.GetResult(context, item, nodeToRead, value, monitoredItem.DiagnosticsMasks);
            }

            // read vendor defined property value.
            else if (daProperty != null)
            {
                error = request.GetResult(context, daProperty, nodeToRead, value, monitoredItem.DiagnosticsMasks);
            }

            // read UA defined property value.
            else if (uaProperty != null)
            {
                error = request.GetResult(context, uaProperty, nodeToRead, value, monitoredItem.DiagnosticsMasks);
            }

            value.ServerTimestamp = DateTime.UtcNow;

            if (value.StatusCode != StatusCodes.BadNotFound)
            {
                monitoredItem.QueueValue(value, error);
            }
            else
            {
                monitoredItem.QueueValue(value, StatusCodes.BadNodeIdUnknown);
            }
        }
コード例 #37
0
ファイル: SubscribeRequest.cs プロジェクト: yuriik83/UA-.NET
        /// <summary>
        /// Queues the value to the monitored item.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <param name="request">The request.</param>
        public void QueueValues(ServerSystemContext context, ReadRequest request)
        {
            for (int ii = 0; ii < m_monitoredItems.Count; ii++)
            {
                QueueValue(context, request, m_monitoredItems[ii]);
            }

            m_lastRequest = request;
            IncrementSampleTime();
        }
コード例 #38
0
ファイル: SubscribeRequest.cs プロジェクト: yuriik83/UA-.NET
        /// <summary>
        /// Called when the scan properties timer expires.
        /// </summary>
        private void OnScanProperties(object state)
        {
            try
            {
                ComDaClientManager system = (ComDaClientManager)m_context.SystemHandle;
                ComDaClient client = (ComDaClient)system.GetLocalizedClient(this.UserIdentity, this.LocaleId);

                // collect the list of properties that need reading.
                List<SubscribePropertyRequest> requests1 = new List<SubscribePropertyRequest>();
                List<ReadRequest> requests2 = new List<ReadRequest>();

                lock (m_lock)
                {
                    DateTime now = DateTime.UtcNow;

                    foreach (SubscribePropertyRequest request1 in m_subscribedProperties.Values)
                    {
                        if (request1.NextUpdateTime <= now)
                        {
                            requests1.Add(request1);
                            ReadRequest request2 = new ReadRequest(request1.ItemId);
                            request2.AddProperty(request1.PropertyIds);
                            requests2.Add(request2);
                        }
                    }
                }

                // read the properties from teh server.
                client.ReadPropertyValues(requests2);

                // update the monitored items.
                lock (m_lock)
                {
                    for (int ii = 0; ii < requests1.Count; ii++)
                    {
                        requests1[ii].QueueValues(m_context, requests2[ii]);
                    }
                }
            }
            catch (Exception e)
            {
                Utils.Trace(e, "Unexpected error scanning properties in DA COM server.");
            }
        }
コード例 #39
0
ファイル: Opc.Ua.Client.cs プロジェクト: zryska/UA-.NET
        /// <summary>
        /// Invokes the Read service.
        /// </summary>
        public virtual ResponseHeader Read(
            RequestHeader                requestHeader,
            double                       maxAge,
            TimestampsToReturn           timestampsToReturn,
            ReadValueIdCollection        nodesToRead,
            out DataValueCollection      results,
            out DiagnosticInfoCollection diagnosticInfos)
        {
            ReadRequest request = new ReadRequest();
            ReadResponse response = null;

            request.RequestHeader      = requestHeader;
            request.MaxAge             = maxAge;
            request.TimestampsToReturn = timestampsToReturn;
            request.NodesToRead        = nodesToRead;

            UpdateRequestHeader(request, requestHeader == null, "Read");

            try
            {
                if (UseTransportChannel)
                {
                    IServiceResponse genericResponse = TransportChannel.SendRequest(request);

                    if (genericResponse == null)
                    {
                        throw new ServiceResultException(StatusCodes.BadUnknownResponse);
                    }

                    ValidateResponse(genericResponse.ResponseHeader);
                    response = (ReadResponse)genericResponse;
                }
                else
                {
                    ReadResponseMessage responseMessage = InnerChannel.Read(new ReadMessage(request));

                    if (responseMessage == null || responseMessage.ReadResponse == null)
                    {
                        throw new ServiceResultException(StatusCodes.BadUnknownResponse);
                    }

                    response = responseMessage.ReadResponse;
                    ValidateResponse(response.ResponseHeader);
                }

                results         = response.Results;
                diagnosticInfos = response.DiagnosticInfos;
            }
            finally
            {
                RequestCompleted(request, response, "Read");
            }

            return response.ResponseHeader;
        }
コード例 #40
0
ファイル: ComDaClient.cs プロジェクト: yuriik83/UA-.NET
        /// <summary>
        /// Reads the item values and stores the results in the request object.
        /// </summary>
        /// <param name="requests">The requests.</param>
        private void Da20ReadItemValues(List<ReadRequest> requests)
        {
            // lock (m_groupLock)
            {
                // if (m_group == null)
                //{                
                    ComDaGroup m_group = new ComDaGroup(this, false);
                //}

                try
                {
                    int count1 = 0;
                    GroupItem[] items = new GroupItem[requests.Count];
                    ReadRequest[] addItemRequests = new ReadRequest[requests.Count];

                    // create the items in the temporary group.
                    for (int ii = 0; ii < requests.Count; ii++)
                    {
                        ReadRequest request = requests[ii];

                        if (request == null)
                        {
                            continue;
                        }

                        if (!request.ValueRequired)
                        {
                            continue;
                        }

                        // add the item.
                        items[count1] = m_group.CreateItem(request.ItemId, 0, 0, true);
                        addItemRequests[count1] = request;
                        count1++;
                    }

                    // create the items on the server.
                    m_group.ApplyChanges();

                    // build the list of values to write.
                    int count2 = 0;
                    int[] serverHandles = new int[count1];
                    ReadRequest[] readRequests = new ReadRequest[count1];

                    for (int ii = 0; ii < count1; ii++)
                    {
                        // check for error on create.
                        GroupItem item = items[ii];
                        ReadRequest request = addItemRequests[ii];

                        if (item.ErrorId < 0)
                        {
                            request.Value = new DaValue();
                            request.Value.Error = item.ErrorId;
                            continue;
                        }

                        serverHandles[count2] = item.ServerHandle;
                        readRequests[count2] = request;
                        count2++;
                    }

                    if (count2 > 0)
                    {
                        // write values to the server.
                        DaValue[] values = m_group.SyncRead(serverHandles, count2);

                        // read the values.
                        for (int ii = 0; ii < count2; ii++)
                        {
                            if (values != null && values.Length > ii)
                            {
                                readRequests[ii].Value = values[ii];
                            }
                            else
                            {
                                readRequests[ii].Value = new DaValue() { Error = ResultIds.E_FAIL, Timestamp = DateTime.UtcNow };
                            }
                        }

                        // delete the items.
                        for (int ii = 0; ii < count1; ii++)
                        {
                            GroupItem item = items[ii];

                            if (item.ErrorId >= 0)
                            {
                                m_group.RemoveItem(item);
                            }
                        }

                        m_group.ApplyChanges();
                    }
                }
                finally
                {
                    // delete the group and items.
                   m_group.Delete();
                }
            }
        }
コード例 #41
0
ファイル: Opc.Ua.Messages.cs プロジェクト: yuriik83/UA-.NET
 /// <summary>
 /// Initializes the message with the body.
 /// </summary>
 public ReadMessage(ReadRequest ReadRequest)
 {
     this.ReadRequest = ReadRequest;
 }