示例#1
0
        /// <summary> 写入错误日志
        /// </summary>
        /// <param name="protocol">上传文件协议</param>
        public static void WriteErrorLog(FileProtocol protocol)
        {
            string msg = string.Empty;

            if (htTable.ContainsKey(protocol.SubMessageId))
            {
                string tableName = string.Empty;
                //表名:
                foreach (DictionaryEntry de in htTable)
                {
                    if (de.Value.ToString() == protocol.SubMessageId)
                    {
                        tableName = de.Key.ToString();
                        break;
                    }
                }
                msg += "表名:" + tableName + "\r\n";
            }
            msg += "标识:" + protocol.StationId + protocol.SerialNumber + protocol.TimeSpan + "\r\n";
            msg += "时间:" + TimeHelper.MillisToTime(protocol.TimeSpan) + "\r\n";
            msg += "服务站ID:" + protocol.StationId + "\r\n";
            msg += "内容:" + ProtocolTranslator.SerilizeMessage(protocol);
            //写错误日志
            Log.writeCloudLog(msg);
        }
示例#2
0
        /// <summary> 操作数据
        /// </summary>
        /// <param name="dt">数据表</param>
        /// <param name="operation">操作类别</param>
        /// <param name="dbName">帐套</param>
        private static void Operation(DataTable dt, string operation, string dbName)
        {
            if (dt == null)
            {
                return;
            }
            string path = string.Empty;

            foreach (DataRow dr in dt.Rows)
            {
                FileProtocol protocol = GetProtocol(dr, dbName);
                if (protocol != null)
                {
                    protocol.Operation = operation;
                    if (operation == DataSources.EnumOperationType.Add.ToString("d") ||
                        operation == DataSources.EnumOperationType.Update.ToString("d"))
                    {
                        FileModel file = FileModel.CreateModel(dr);
                        protocol.FileId   = file.Id;
                        protocol.FileType = file.FileType;

                        path = GlobalStaticObj_Server.Instance.FilePath + "\\" + file.Path;
                        //上传文件信息
                        byte[] files = FileHelper.GetFileInByte(path);
                        if (files == null)
                        {
                            continue;
                        }
                        protocol.File = ProtocolTranslator.ByteToHex(files);
                    }
                    FileAgent.AddSendQueue(protocol);
                }
            }
        }
示例#3
0
        /// <summary> 写入错误日志
        /// </summary>
        /// <param name="protocol">上传数据协议</param>
        public static void WriteErrorLog(UploadDataProtocol protocol)
        {
            string msg = string.Empty;

            msg += "表名:" + TableName + "\r\n";
            msg += "标识:" + protocol.StationId + protocol.SerialNumber + protocol.TimeSpan + "\r\n";
            msg += "时间:" + TimeHelper.MillisToTime(protocol.TimeSpan) + "\r\n";
            msg += "服务站ID:" + protocol.StationId + "\r\n";
            msg += "内容:" + ProtocolTranslator.SerilizeMessage(protocol);
            //写错误日志
            Log.writeCloudLog(msg);
        }
        public async Task Shoot()
        {
            // This test verifies the entire shooting protocol from the
            // BattleHostConnection's view.

            var logger = Mock.Of <ILogger <BattleHostConnection> >();

            var         stream      = new Mock <IServerStreamWriter <GameRequest> >();
            GameRequest?gameRequest = null;

            stream.Setup(s => s.WriteAsync(It.IsAny <GameRequest>()))
            .Callback <GameRequest>(gr => gameRequest = gr)
            .Returns(Task.FromResult(0));

            var factory = new Mock <IGameFactory>();

            factory.Setup(f => f.Create(It.IsAny <int>(), It.IsAny <int>())).Returns(CreateGame());

            // Create connection and start game
            var bhc = new BattleHostConnection(factory.Object, logger);

            bhc.Connect(stream.Object);
            bhc.StartGame(47, 11);
            Assert.NotNull(bhc.Game);

            // Simulate shooting of player 1
            var shootTask = bhc.Shoot(1);

            Assert.False(shootTask.IsCompleted);
            Assert.NotNull(gameRequest);
            Assert.Equal(GameRequest.PayloadOneofCase.ShotRequest, gameRequest !.PayloadCase);
            Assert.NotNull(gameRequest.ShotRequest);
            Assert.Empty(gameRequest.ShotRequest.LastShot);
            Assert.Equal(SquareContent.Unknown, bhc.Game !.ShootingBoards[0][new BoardIndex(0, 0)]);

            // Simulate incoming shot result
            await bhc.Handle(ProtocolTranslator.EncodeShotResponse(new(Guid.Empty, new BoardIndex(0, 0))));

            Assert.False(shootTask.IsCompleted);
            Assert.Equal(SquareContent.Water, bhc.Game !.ShootingBoards[0][new BoardIndex(0, 0)]);

            // Simulate incoming shot ack
            await bhc.Handle(ProtocolTranslator.EncodeShotResultAck());

            Assert.True(shootTask.IsCompleted);
        }
示例#5
0
        public async Task StartConsoleGame(ConsoleGameOptions options)
        {
            var logger = Log.Logger.ForContext <ConsoleGameMain>();

            if (options.Player1Index < 0 || options.Player1Index >= PlayerList.Players.Length)
            {
                logger.Error("Player 1 index is invalid. Must be between 1 and {NumberOfPlayers}", PlayerList.Players.Length - 1);
            }

            if (options.Player2Index < 0 || options.Player2Index >= PlayerList.Players.Length)
            {
                logger.Error("Player 2 index is invalid. Must be between 1 and {NumberOfPlayers}", PlayerList.Players.Length - 1);
            }

            var gf   = new GameFactory(new RandomBoardFiller());
            var game = gf.Create(options.Player1Index, options.Player2Index);

            while (game.GetWinner(BattleshipBoard.Ships) == Winner.NoWinner)
            {
                var p1          = PlayerList.Players[options.Player1Index].Create();
                var shotRequest = ProtocolTranslator.DecodeShotRequest(ProtocolTranslator.EncodeShotRequest(
                                                                           new Logic.ShotRequest(game.GameId, options.Player1Index, options.Player2Index,
                                                                                                 game.ShootingBoards[0], game.GetLastShot(1))).ShotRequest);
                p1.LastShot = shotRequest.LastShot;
                await p1.GetShot(shotRequest.GameId, PlayerList.Players[shotRequest.Shooter].Name, shotRequest.BoardShooterView,
                                 location => Task.FromResult(game.Shoot(1, location)));

                var p2 = PlayerList.Players[options.Player2Index].Create();
                shotRequest = ProtocolTranslator.DecodeShotRequest(ProtocolTranslator.EncodeShotRequest(
                                                                       new Logic.ShotRequest(game.GameId, options.Player2Index, options.Player1Index,
                                                                                             game.ShootingBoards[1], game.GetLastShot(2))).ShotRequest);
                p2.LastShot = shotRequest.LastShot;
                await p2.GetShot(game.GameId, PlayerList.Players[shotRequest.Shooter].Name, shotRequest.BoardShooterView,
                                 location => Task.FromResult(game.Shoot(2, location)));
            }

            Console.WriteLine(game.GetWinner(BattleshipBoard.Ships) switch
            {
                Winner.Draw => "We have a draw!",
                Winner.Player1 => "Player 1 is the winner",
                Winner.Player2 => "Player 2 is the winner",
                _ => "No winner? this should never happen"
            });
示例#6
0
 public void Init()
 {
     _fixture = new Fixture();
     _sut     = new ProtocolTranslator();
 }