示例#1
0
        public async Task <(bool, int)> TryAddTreadToBoardAsync(Tread tread, string boardName)
        {
            var board = await _context.Boards.FirstOrDefaultAsync(b => b.Name == boardName);

            if (board == null)
            {
                return(false, 0);
            }

            TreadEntity treadEntity = tread.ToEntity();

            treadEntity.Board          = board;
            treadEntity.TimeOfLastPost = treadEntity.Posts.First().Time;

            _context.Treads.Add(treadEntity);

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "An error occurred while saving changes in the TryAddTreadToBoardAsync method.");
                return(false, 0);
            }

            return(true, treadEntity.Id);
        }
示例#2
0
        public async Task <IActionResult> Edit(int id, [Bind("ID,Title,Author,Text")] Tread tread)
        {
            if (id != tread.ID)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(tread);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!TreadExists(tread.ID))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(tread));
        }
示例#3
0
 // Update is called once per frame
 void Update()
 {
     // Вот код для обычного движения
     //float moveX = Input.GetAxis("Horizontal");
     //rb.MovePosition(rb.position + Vector2.right * moveX * speed * Time.deltaTime);
     float moveX = Input.GetAxis("Horizontal");
     // Коэффициент
     float i = 50
     while (moveX != 0f, speed > 0f );
     {if (moveX == 0f, speed > 4) ;
         {
             // Экстренное торможение при высокой скорости    
             while (speed != 0f) ;
             {
                 // Время скольжения
                 time_sleep = i * speed
                 Tread.Sleep(time_sleep)
                 speed = speed - 1f
             }
         }
     if (moveX != 0, speed != 0)    
         { 
             // Обычное движение
             rb.MovePosition(rb.position + Vector2.right * moveX * speed * Time.deltaTime);
         }
     }
 }
示例#4
0
文件: Client.cs 项目: forki/Sharp9P
        public Tuple <uint, byte[]> Read(uint fid, ulong offset, uint count)
        {
            var request = new Tread(fid, offset, count)
            {
                Tag = (ushort)_tagQueue.Dequeue()
            };

            _protocol.Write(request);
            var r = _protocol.Read();

            if (r.Tag != request.Tag)
            {
                throw new TagMismatchException(r.Tag, request.Tag);
            }
            Rread response;

            try
            {
                response = (Rread)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);
            }
            _tagQueue.Enqueue(request.Tag);
            return(new Tuple <uint, byte[]>(response.Count, response.Data));
        }
示例#5
0
 public static TreadEntity ToEntity(this Tread tread)
 {
     return(new()
     {
         Id = tread.Id,
         Posts = tread.Posts?.Select(p => p.ToEntity())?.ToList()
     });
 }
示例#6
0
        public static CreatePostViewModel ToCreatePostViewModel(this Tread tread, string boardName, string boardDescription, Post post = null)
        {
            var treadViewModel = new TreadViewModel(tread.Posts.Select((p, i) =>
                                                                       new PostViewModel(p, ++i, false)).ToList(), tread.Id);

            return(new CreatePostViewModel(new List <TreadViewModel> {
                treadViewModel
            }, boardName, post, boardDescription, tread.Id));
        }
示例#7
0
        public async Task <IActionResult> Create([Bind("ID,Title,Author,Text")] Tread tread)
        {
            if (ModelState.IsValid)
            {
                _context.Add(tread);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(tread));
        }
示例#8
0
        private async Task <IActionResult> StartNewTread(Post post, string boardName, Destination dest)
        {
            if (!ModelState.IsValid)
            {
                if (boardName == null)
                {
                    return(BadRequest());
                }

                var board = await _repository.FindAndLoadBoardAsync(boardName, 1, PageSize);

                if (board == null)
                {
                    return(NotFound());
                }

                var count = await _repository.CountTreadsAsync(boardName);

                return(View(board.ToCreatePostViewModel(PostsFromTreadOnBoardView, count, PageSize, post: post)));
            }

            await post.ParseMessageAsync(_parser, boardName);

            var tread = new Tread(new List <Post> {
                post
            });

            var(isSuccess, treadId) = await _repository.TryAddTreadToBoardAsync(tread, boardName);

            if (!isSuccess)
            {
                ModelState.AddModelError("", "Unable to create tread.");

                var board = await _repository.FindAndLoadBoardAsync(boardName, 1, PageSize);

                if (board == null)
                {
                    return(NotFound());
                }

                var count = await _repository.CountTreadsAsync(boardName);

                return(View(board.ToCreatePostViewModel(PostsFromTreadOnBoardView, count, PageSize, post: post)));
            }

            if (dest == Destination.Board)
            {
                return(RedirectToRoute("Board", new { boardName }));
            }
            else
            {
                return(RedirectToRoute("Tread", new { boardName, treadId }));
            }
        }
示例#9
0
 static void Main(string[] args)
 {
     for (int i = 0; i < 10; i++)
     {
         for (int j = 0; j < 10; j++)
         {
             Console.Write(i * j + "\t");
         }
         Console.WriteLine();
     }
     //Console.ReadKey();
     Tread.Sleep(1000);
 }
示例#10
0
        public void TestReadWriteTread()
        {
            var stream  = new MemoryStream();
            var message = new Tread(1, 65535L, 1)
            {
                Tag = 1246
            };

            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 = (Tread)p.Read();

            Assert.That(message, Is.EqualTo(message2));
        }
示例#11
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);
        }