コード例 #1
0
ファイル: Transport.cs プロジェクト: brookpatten/dbus-sharp
        int Read(byte[] buffer, int offset, int count)
        {
            //We have to use ReceiveMessage rather than read for fds
            if (Connection.SupportsUnixFileDescriptors && stream is DBus.Unix.UnixStream)
            {
                int read = 0;
                if (message == null)
                {
                    message = ((Unix.UnixStream)stream).ReceiveMessage();
                    pos     = 0;
                }

                //TODO: clean this up into do-while
                if (message != null)
                {
                    while (pos < message.Read && read < count)
                    {
                        buffer [offset + read] = message.Message [pos];
                        read++;
                        pos++;
                    }

                    while (read < count)
                    {
                        message = ((Unix.UnixStream)stream).ReceiveMessage();
                        pos     = 0;

                        if (message != null && message.Read >= 0)
                        {
                            while (pos < message.Read && read < count)
                            {
                                buffer [offset + read] = message.Message [pos];
                                read++;
                                pos++;
                            }
                        }
                        else
                        {
                            break;
                        }
                    }
                }

                return(read);
            }
            else
            {
                System.Console.WriteLine("Read(" + offset + "," + count + ")");
                int read = 0;
                while (read < count)
                {
                    int nread = stream.Read(buffer, offset + read, count - read);
                    if (nread == 0)
                    {
                        break;
                    }
                    read += nread;
                }

                if (read > count)
                {
                    throw new Exception();
                }

                return(read);
            }
        }
コード例 #2
0
ファイル: Transport.cs プロジェクト: brookpatten/dbus-sharp
		int Read (byte[] buffer, int offset, int count)
		{
			//We have to use ReceiveMessage rather than read for fds
			if (Connection.SupportsUnixFileDescriptors && stream is DBus.Unix.UnixStream) {
				int read = 0;
				if (message == null) {
					message = ((Unix.UnixStream)stream).ReceiveMessage ();
					pos = 0;
				}

				//TODO: clean this up into do-while
				if (message != null) {
					while (pos < message.Read && read < count) {
						buffer [offset + read] = message.Message [pos];
						read++;
						pos++;
					}

					while (read < count) {
						message = ((Unix.UnixStream)stream).ReceiveMessage ();
						pos = 0;

						if (message != null && message.Read >= 0) {
							while (pos < message.Read && read < count) {
								buffer [offset + read] = message.Message [pos];
								read++;
								pos++;
							}
						} 
						else {
							break;
						}
					}
				}

				return read;
			} 
			else 
			{
				System.Console.WriteLine ("Read(" + offset + "," + count + ")");
				int read = 0;
				while (read < count) {
					int nread = stream.Read (buffer, offset + read, count - read);
					if (nread == 0)
						break;
					read += nread;
				}

				if (read > count)
					throw new Exception ();

				return read;
			}
		}