コード例 #1
0
ファイル: Client.cs プロジェクト: forki/Sharp9P
        public void Version(uint msize, string version)
        {
            var request = new Tversion(_msize, _version);

            _protocol.Write(request);

            var      r = _protocol.Read();
            Rversion response;

            try
            {
                response = (Rversion)r;
            }
            catch (InvalidCastException)
            {
                if (r.Type != (byte)MessageType.Rerror)
                {
                    throw new UnexpectedMessageException(request.Type, r.Type);
                }
                var err = (Rerror)r;
                throw new ServerErrorException(err.Ename);
            }

            /* The server responds with its own maxi-
             * mum, msize, which must be less than or equal to the client's
             * value */
            if (response.Msize > request.Msize)
            {
                throw new MsizeNegotiationException(request.Msize, response.Msize);
            }
            _msize          = response.Msize;
            _protocol.Msize = _msize;
            if (response.Version != request.Version)
            {
                throw new UnsupportedVersionException(response.Version);
            }
            _version = response.Version;
        }
コード例 #2
0
        public void TestReadWriteTversion()
        {
            var stream  = new MemoryStream();
            var message = new Tversion(16384, "9P2000")
            {
                Tag = 0
            };

            var p = new Protocol.Protocol(stream);

            p.Write(message);
            stream.Position = 0;

            var data   = new byte[message.Length];
            var length = stream.Read(data, 0, (int)message.Length);

            Assert.That(length, Is.EqualTo(message.Length));

            stream.Position = 0;
            var message2 = (Tversion)p.Read();

            Assert.That(message2, Is.EqualTo(message));
        }
コード例 #3
0
        public Message Read()
        {
            Message message;
            var     bytes  = ReadMessage();
            var     offset = Constants.Bit32Sz;
            var     type   = bytes[offset];

            switch (type)
            {
            case (byte)MessageType.Tversion:
                message = new Tversion(bytes);
                break;

            case (byte)MessageType.Rversion:
                message = new Rversion(bytes);
                break;

            case (byte)MessageType.Tauth:
                message = new Tauth(bytes);
                break;

            case (byte)MessageType.Rauth:
                message = new Rauth(bytes);
                break;

            case (byte)MessageType.Tattach:
                message = new Tattach(bytes);
                break;

            case (byte)MessageType.Rattach:
                message = new Rattach(bytes);
                break;

            case (byte)MessageType.Rerror:
                message = new Rerror(bytes);
                break;

            case (byte)MessageType.Tflush:
                message = new Tflush(bytes);
                break;

            case (byte)MessageType.Rflush:
                message = new Rflush(bytes);
                break;

            case (byte)MessageType.Twalk:
                message = new Twalk(bytes);
                break;

            case (byte)MessageType.Rwalk:
                message = new Rwalk(bytes);
                break;

            case (byte)MessageType.Topen:
                message = new Topen(bytes);
                break;

            case (byte)MessageType.Ropen:
                message = new Ropen(bytes);
                break;

            case (byte)MessageType.Tcreate:
                message = new Tcreate(bytes);
                break;

            case (byte)MessageType.Rcreate:
                message = new Rcreate(bytes);
                break;

            case (byte)MessageType.Tread:
                message = new Tread(bytes);
                break;

            case (byte)MessageType.Rread:
                message = new Rread(bytes);
                break;

            case (byte)MessageType.Twrite:
                message = new Twrite(bytes);
                break;

            case (byte)MessageType.Rwrite:
                message = new Rwrite(bytes);
                break;

            case (byte)MessageType.Tclunk:
                message = new Tclunk(bytes);
                break;

            case (byte)MessageType.Rclunk:
                message = new Rclunk(bytes);
                break;

            case (byte)MessageType.Tremove:
                message = new Tremove(bytes);
                break;

            case (byte)MessageType.Rremove:
                message = new Rremove(bytes);
                break;

            case (byte)MessageType.Tstat:
                message = new Tstat(bytes);
                break;

            case (byte)MessageType.Rstat:
                message = new Rstat(bytes);
                break;

            case (byte)MessageType.Twstat:
                message = new Twstat(bytes);
                break;

            case (byte)MessageType.Rwstat:
                message = new Rwstat(bytes);
                break;

            default:
                throw new Exception("Unsupported Message Type");
            }
            return(message);
        }