示例#1
0
 /// <summary>
 /// 统计的分页方法
 /// </summary>
 /// <param name="DT"></param>
 /// <returns></returns>
 public static PagingData QueryStaticsForPaging(DataTransmission DT)
 {
     try
     {
         //DataQuery _DQ = new DataQuery();
         PagingData _DS = IDataQuery.QueryStaticsForPaging(DT);
         return(_DS);
     }
     catch (Exception ex)
     {
         String errMsg = String.Empty;
         errMsg += "dataSource:" + DT.DataSource.ToString();
         errMsg += ",fileds:";
         for (int i = 0; i < DT.Fields.Length; i++)
         {
             errMsg += DT.Fields[i].ToString() + "||";
         }
         for (int i = 0; i < DT.Filters.Count; i++)
         {
             errMsg += DT.Filters[i].GetString + "||";
         }
         errMsg += ",orders:";
         for (int i = 0; i < DT.Orders.Count; i++)
         {
             errMsg += DT.Orders[i].ToQueryString() + "||";
         }
         errMsg += ",FirstResult:" + DT.FirstResult;
         errMsg += ",MaxResult:" + DT.MaxResult;
         LogHelper.WriteLog(errMsg + ",QueryStaticsForPaging方法异常:", ex);
         //LogHelper.WriteLog("源名:" + DT.DataSource.ToString() + ",QueryStaticsForPaging方法异常:", ex);
         throw new Exception(DT.DataSource.ToString() + ex.ToString());
         //throw ex;
     }
 }
示例#2
0
        /// <summary>
        /// 通道的分页方法
        /// </summary>
        /// <param name="dataSource">数据源id</param>
        /// <param name="fileds">选择列</param>
        /// <param name="filters">过滤条件</param>
        /// <param name="orders">排序条件</param>
        /// <param name="selectors">选择条件</param>
        /// <param name="page">页数</param>
        /// <param name="pageSize">每页显示多少条</param>
        /// <returns></returns>
        public static PagingData PQuery(WebDataSource dataSource, String[] fileds, List <Expression> filters, List <Order> orders, List <Expression> selectors, int page, int pageSize)
        {
            try
            {
                DataTransmission _data = GetData(dataSource, fileds, filters, orders, selectors, page, pageSize, false, "");
                //DataQuery _DQ = new DataQuery();
                return(IDataQuery.QueryForPagging(_data));
            }
            catch (Exception ex)
            {
                String errMsg = String.Empty;
                errMsg += "dataSource:" + dataSource.ToString();
                errMsg += ",fileds:";
                for (int i = 0; i < fileds.Length; i++)
                {
                    errMsg += fileds[i].ToString() + "||";
                }
                for (int i = 0; i < filters.Count; i++)
                {
                    errMsg += filters[i].GetString + "||";
                }
                errMsg += ",orders:";
                for (int i = 0; i < orders.Count; i++)
                {
                    errMsg += orders[i].ToQueryString() + "||";
                }
                errMsg += ",page:" + page;
                errMsg += ",pageSize:" + pageSize;
                LogHelper.WriteLog(errMsg + ",PQuery方法异常:", ex);

                //LogHelper.WriteLog("参数:" + dataSource.ToString() + "PQuery方法异常:", ex);
                throw new Exception(dataSource.ToString() + ex.ToString());
                //throw ex;
            }
        }
        /// <summary>
        /// Refuse a connection and close the socket
        /// </summary>
        /// <param name="newModel"></param>
        public ReversiClientModel RefuseConnection(ReversiClientModel newModel)
        {
            // And immediately return it without updating the ID
            newModel.CurrentStatus = ConnectionStatusTypes.StatusConnectionRefused;

            try
            {
                DataTransmission.SerializeData <ReversiClientModel>(newModel, newModel.ConnectionSocket);
            }
            catch
            {
                throw new SocketException();
            }

            newModel.ConnectionSocket.Close();

            ClientDisconnectedEventArgs args = new ClientDisconnectedEventArgs
            {
                client = newModel, TimeOfDisconnect = DateTime.Now
            };

            OnClientDisconnected(args);

            return(newModel);
        }
        /// <summary>
        /// The event to fire when the square is clicked.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void GameSquare_OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            var obj      = sender as FrameworkElement;
            var myObject = obj.DataContext as ReversiSquareVM;

            var Parent = VisualTreeHelper.GetParent(obj);

            var windowobj = TreeHelper.TryFindParent <MainWindow>(obj);
            var rcvm_obj  = windowobj.DataContext as ReversiClientViewModel;
            //var movemodel = rcvm_obj.Model.LastMove;
            var player = rcvm_obj.ThisPlayerViewModel.IdType;

            // MessageBox.Show("Index " + movemodel.MoveIndex.ToString());



            if (myObject.Model.HasPiece)
            {
                return;
            }

            //MessageBox.Show("Index: " + myObject.Model.Index + " was clicked");
            var movemodel = new GameMoveModel(player, myObject.Model.Index);

            // Send move to server
            rcvm_obj.Model.LastMove = movemodel;
            DataTransmission.SerializeData <GameMoveModel>(rcvm_obj.Model.LastMove, rcvm_obj.Model.ConnectionSocket);
        }
示例#5
0
 /// <summary>
 /// 统计的分页方法
 /// </summary>
 /// <param name="dataSource">统计的名称</param>
 /// <param name="fileds">选择列</param>
 /// <param name="filters">过滤条件</param>
 /// <param name="orders">排序条件</param>
 /// <param name="selectors">选择条件</param>
 /// <param name="page">页数</param>
 /// <param name="pageSize">每页显示多少条</param>
 /// <param name="statisticsEngName">统计的名称</param>
 /// <returns></returns>
 public static PagingData QueryByStatisticForPaging(WebDataSource dataSource, String[] fileds, List <Expression> filters, List <Order> orders, List <Expression> selectors, int page, int pageSize, String statisticsEngName)
 {
     try
     {
         DataTransmission _data = GetData(dataSource, fileds, filters, orders, selectors, page, pageSize, true, statisticsEngName);
         PagingData       _DS   = QueryStaticsForPaging(_data);
         return(_DS);
     }
     catch (Exception ex)
     {
         String errMsg = String.Empty;
         errMsg += "dataSource:" + dataSource.ToString();
         errMsg += ",fileds:";
         for (int i = 0; i < fileds.Length; i++)
         {
             errMsg += fileds[i].ToString() + "||";
         }
         for (int i = 0; i < filters.Count; i++)
         {
             errMsg += filters[i].GetString + "||";
         }
         errMsg += ",orders:";
         for (int i = 0; i < orders.Count; i++)
         {
             errMsg += orders[i].ToQueryString() + "||";
         }
         errMsg += ",page:" + page;
         errMsg += ",pageSize:" + pageSize;
         LogHelper.WriteLog(errMsg + ",QueryByStatisticForPaging方法异常:", ex);
         throw new Exception(dataSource.ToString() + ex.ToString());
         //throw ex;
     }
 }
示例#6
0
        public ClientConnecting(Socket clientSk)
        {
            this.clientDataTrans = new DataTransmission(clientSk);
            Thread threadListen = new Thread(new ThreadStart(Listen));

            threadListen.Start();
        }
示例#7
0
        public static DataSet QuerySpecialIndicator(String specialCode)
        {
            String             treeDate    = QuerySpecialTreeData(specialCode);
            List <BindingType> bindingType = Deserialize(treeDate);
            int           bindingTypeSize  = bindingType.Count;
            StringBuilder sb  = new StringBuilder();
            DataSet       ds2 = new DataSet();

            for (int i = 0; i < bindingTypeSize; i++)
            {
                String xmlData = QuerySpecialXmlData(bindingType[i].ID, "");
                try
                {
                    XmlDocument xmlDoc = new XmlDocument();
                    xmlDoc.LoadXml(xmlData);
                    XmlNode     elementNode         = xmlDoc.DocumentElement;
                    XmlNodeList DataSourceNameNodes = elementNode.SelectNodes("//Table//Table//Component//SCGridGontrol//GridColumnsAttribute");
                    foreach (XmlNode DataSourceNameNode in DataSourceNameNodes)
                    {
                        String dataSourceName = "", statisticsEngName = "", dataSourceCode = "";
                        foreach (XmlNode subNode in DataSourceNameNode.ChildNodes)
                        {
                            String name  = subNode.Name;
                            String value = subNode.InnerText;
                            if (name == "DataSourceName")
                            {
                                dataSourceName = value;
                            }
                            else if (name == "StatisticsEngName")
                            {
                                statisticsEngName = value;
                            }
                            else if (name == "DataSourceCode")
                            {
                                dataSourceCode = value;
                            }
                        }
                        if (dataSourceName != null && dataSourceName.Length > 0)
                        {
                            List <DataTransmission> dataTrans = new List <DataTransmission>();
                            DataTransmission        dt        = new DataTransmission();
                            dt.DataTableName = dataSourceName;
                            dt.DataSource    = dataSourceName;
                            dataTrans.Add(dt);
                            DataSet   ds  = DataAccess.IDataQuery.Query(dataTrans);
                            DataTable dt2 = ds.Tables[0];
                            ds.Tables.Remove(dt2);
                            ds2.Tables.Add(dt2);
                        }
                    }
                }
                catch (Exception ex)
                {
                }
            }
            return(ds2);
        }
示例#8
0
        private ClientSite()
        {
            clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            dataTrans    = new DataTransmission(clientSocket);
            User         = new UserAccount();
            listUser     = new List <UserAccount>();
            threadListen = new Thread(StartReceiveData);

            ListFormShow = new List <Form>();
        }
示例#9
0
        public void CheckDataTransmission()
        {
            var data = new DataTransmission <MoveValidation> {
                Message = new MoveValidation {
                    GameState = Game.StateOfGame.GameOver, UpdateMove = true
                }
            };

            Console.WriteLine(data.Message);
        }
        /// <summary>
        /// Sends the current game state to all current players...
        /// </summary>
        /// <param name="game"></param>
        private static void SendGameToAll(ReversiGameModel game)
        {
            Console.WriteLine("Sending game matchup to players");
            // Send the game object to each of the clients.
            foreach (KeyValuePair <int, ClientModel> item in game.CurrentPlayersList)
            {
                // Send the game data to each of the players

                DataTransmission.SerializeData <ReversiGameModel>(game, item.Value.ConnectionSocket);
            }
        }
示例#11
0
        /// <summary>
        /// 获取所有的数据源
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public static DataSet GetDataSource(String name)
        {
            List <DataTransmission> requests = new List <DataTransmission>();
            DataTransmission        dt1      = new DataTransmission();

            dt1.DataSource    = name;
            dt1.DataTableName = name;
            dt1.Orders        = new List <Order>();
            dt1.MaxResult     = Int32.MaxValue;
            requests.Add(dt1);
            return(DataAccess.IDataQuery.Query(requests));
        }
示例#12
0
 /// <summary>
 /// 调用统计
 /// </summary>
 /// <param name="dataSource">数据源id</param>
 /// <param name="fileds">选择列</param>
 /// <param name="filters">过滤条件</param>
 /// <param name="orders">排序条件</param>
 /// <param name="selectors">选择条件</param>
 /// <param name="page">页数</param>
 /// <param name="pageSize">每页显示多少条</param>
 /// <returns></returns>
 public static ResultData QueryByStatistic(String dataSource, String[] fileds, List <Expression> filters, List <Order> orders, List <Expression> selectors, int page, int pageSize)
 {
     try
     {
         DataTransmission _data = GetData(dataSource, fileds, filters, orders, selectors, page, pageSize, false, dataSource);
         ResultData       _DS   = QueryStatics(_data);
         return(_DS);
     }
     catch (Exception ex)
     {
         throw new Exception(dataSource + ex.ToString());
     }
 }
    private void Awake()
    {
        if (instance == null)
        {
            instance = this;
        }
        else if (instance != this)
        {
            Destroy(gameObject);
        }

        DontDestroyOnLoad(gameObject);
    }
示例#14
0
 /// <summary>
 /// 通过通道 查询MongoDB里面写数据
 /// </summary>
 /// <param name="dt">DataTransmission</param>
 /// <returns></returns>
 public static List <T> MongoQuery <T>(DataTransmission dt)
 {
     try
     {
         //DataQuery _DQ = new DataQuery();
         //return IDataQuery.MongoQuery<T>(dt);
         return(new List <T>());
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
示例#15
0
 /// <summary>
 /// 通过通道 查询MongoDB里面写数据
 /// </summary>
 /// <param name="dataSource"></param>
 /// <param name="fileds"></param>
 /// <param name="filters"></param>
 /// <param name="orders"></param>
 /// <param name="selectors"></param>
 /// <param name="page"></param>
 /// <param name="pageSize"></param>
 /// <param name="isPaging"></param>
 /// <returns></returns>
 public static List <T> MongoQuery <T>(WebDataSource dataSource, String[] fileds, List <Expression> filters, List <Order> orders, List <Expression> selectors, int page, int pageSize, bool isPaging)
 {
     try
     {
         DataTransmission _dt = GetData(dataSource, fileds, filters, orders, selectors, page, pageSize, isPaging, "");
         //DataQuery _DQ = new DataQuery();
         //return IDataQuery.MongoQuery<T>(_dt);
         return(new List <T>());
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
示例#16
0
        public static DataTransmission GetData(String dataSourceStr, String dataTableName, String[] fileds, List <Expression> filters, List <Order> orders, List <Expression> selectors, int page, int pageSize, bool IsPaging, String statisticsEngName)
        {
            DataTransmission data = new DataTransmission();

            data.DataSource        = dataSourceStr;
            data.DataTableName     = dataTableName;
            data.Fields            = fileds;
            data.Filters           = filters;
            data.FirstResult       = (page - 1) * pageSize;
            data.IsPaging          = IsPaging;
            data.MaxResult         = pageSize;
            data.Orders            = orders;
            data.Selector          = selectors;
            data.StatisticsEngName = statisticsEngName;
            return(data);
        }
示例#17
0
 /// <summary>
 /// 通道的获取数据的方法
 /// </summary>
 /// <param name="dataSource">数据源id</param>
 /// <param name="fileds">选择列</param>
 /// <param name="filters">过滤条件</param>
 /// <param name="orders">排序条件</param>
 /// <param name="selectors">选择条件</param>
 /// <param name="page">页数</param>
 /// <param name="pageSize">每页显示多少条</param>
 /// <returns></returns>
 public static DataSet Query(WebDataSource dataSource, String[] fileds, List <Expression> filters, List <Order> orders, List <Expression> selectors, int page, int pageSize)
 {
     try
     {
         DataTransmission        _data     = GetData(dataSource, fileds, filters, orders, selectors, page, pageSize, false, "");
         List <DataTransmission> _dataList = new List <DataTransmission>();
         _dataList.Add(_data);
         DataSet _DS = Query(_dataList);
         return(_DS);
     }
     catch (Exception ex)
     {
         //LogHelper.WriteLog("源名:" + dataSource.ToString() + ",Query方法异常:", ex);
         throw new Exception(dataSource.ToString() + ex.ToString());
         //throw ex;
     }
 }
        static void Main()
        {
            Console.WriteLine("Launching Application");

            Manager = new ReversiServerManagerModel();
            Manager.ConfigureManager();
            Manager.ListenerSocket = Manager.StartManager();  // Returns the TcoListener for this server
            Manager.StartServer();

            // Now listen for incoming connections and add them to the connections list as they come in.
            // The server managers HandleServerThread will assign them to appropriate game and/or chat servers.
            while (!Manager.ShouldShutdown)
            {
                // Listen for connections
                TcpClient newTcpClientSocket = Manager.ListenForConnections();

                // Receive the response from the client, and readd the connection socket to the object since it's not serialized.
                ReversiClientModel newTcpClientModel = DataTransmission.DeserializeData <ReversiClientModel>(newTcpClientSocket);
                newTcpClientModel.ConnectionSocket = newTcpClientSocket;

                // Determine what we should do with the connection and send the appropriate response
                newTcpClientModel = Manager.AcceptOrRefuseConnection(newTcpClientModel, out var status);

                // If the connection was accepted then add the model to the connected models list
                if (status == ConnectionStatusTypes.StatusConnectionAccepted)
                {
                    Manager.AddClientModelToConnectionList(newTcpClientModel);
                    Console.WriteLine("Server manager #" + Manager.Id + " has accepted client " + newTcpClientModel.Id + ".");
                }
                else if (status == ConnectionStatusTypes.StatusConnectionRefused)
                {
                    Console.WriteLine("Server manager #" + Manager.Id + " has refused client" + newTcpClientModel.Id + ".");
                }

                // List our connected clients for testing.
                Console.WriteLine(Manager.ListConnectedClients());

                // Dispose of the temporary client
                newTcpClientModel = null;
            }


            // Shutdown the server manager
            Manager.Shutdown();
        }
示例#19
0
        public static DataTable GetListData(String[] macroIDs, MacroDataType type)
        {
            DataTable               table  = new DataTable();
            DataTransmission        item   = null;
            List <DataTransmission> dtList = null;

            try
            {
                item         = new DataTransmission();
                item.Filters = new List <Expression>(2);
                item.Filters.Add(Expression.In("STR_MACROID", macroIDs));
                item.Filters.Add(Expression.Eq("STR_FLAG", "0"));
                item.DataSource = MongoDBConstant.DicTreeSource[type];
                item.MaxResult  = 0x7fffffff;
                item.Fields     = new String[] { "STR_MACROID", "STR_STARTDATE", "STR_ENDDATE", "STR_GXDATE" };
                dtList          = new List <DataTransmission>(1);
                dtList.Add(item);
                table = _uniqueQuery.Query(dtList).Tables[0];
            }
            catch (Exception exception)
            {
                //EMLoggerHelper.Write(exception);
            }
            finally
            {
                if (item != null)
                {
                    if ((item.Fields != null) && (item.Fields.Length > 0))
                    {
                        Array.Clear(item.Fields, 0, item.Fields.Length);
                        item.Fields = null;
                    }
                    item.Clear();
                    item = null;
                }
                if (dtList != null)
                {
                    dtList.Clear();
                    dtList = null;
                }
            }
            return(table);
        }
        /// <summary>
        /// Accepts a connection request
        /// </summary>
        /// <param name="newModel"></param>
        public ReversiClientModel AcceptConnection(ReversiClientModel newModel)
        {
            // And updating the ID and status
            newModel.CurrentStatus         = ConnectionStatusTypes.StatusConnectionAccepted;
            newModel.ClientPlayer.PlayerId = newModel.NextId();   // updates the players ID here.
            try
            {
                DataTransmission.SerializeData <ReversiClientModel>(newModel, newModel.ConnectionSocket);
            }
            catch
            {
                newModel.CurrentStatus = ConnectionStatusTypes.StatusConnectionError;
            }

            ClientConnectedEventArgs args = new ClientConnectedEventArgs
            {
                client           = newModel,
                TimeOfConnection = DateTime.Now
            };

            OnClientConnected(args);

            return(newModel);
        }
示例#21
0
 private void dataTransmissionToolStripMenuItem_Click(object sender, EventArgs e)
 {
   DataTransmission dtForm = new DataTransmission(TrackingTimer);
   dtForm.Show();
 }
示例#22
0
        /// <summary>
        /// 生成 DataTransmission
        /// </summary>
        /// <param name="dataSource">源或统计的名称</param>
        /// <param name="fileds">查询的字段</param>
        /// <param name="filters">过滤条件</param>
        /// <param name="orders">排序</param>
        /// <param name="selectors"></param>
        /// <param name="page">当前页码</param>
        /// <param name="pageSize">每页记录数</param>
        /// <param name="IsPaging">是否分页(只在统计分页方法的时候有效)</param>
        /// <param name="statisticsEngName">统计的名称</param>
        /// <returns></returns>
        public static DataTransmission GetData(WebDataSource dataSource, String[] fileds, List <Expression> filters, List <Order> orders, List <Expression> selectors, int page, int pageSize, bool IsPaging, String statisticsEngName)
        {
            DataTransmission data = GetData(dataSource.ToString(), fileds, filters, orders, selectors, page, pageSize, IsPaging, statisticsEngName);

            return(data);
        }
        ///// <summary>
        ///// Removes a player from the staging area to the gameroom.
        ///// </summary>
        //private static void RemovePlayersFromStaging()
        //{
        //    for (int i = ReversiSettings.ReversiPlayersPerGame - 1; i >= 0; i--)
        //    {
        //        StagingArea.RemoveAt(i);
        //    }
        //}



        /// <summary>
        /// The main thread routine for each game
        /// </summary>
        /// <param name="data">The game staging area list of client models</param>
        private void InitializeMatchup(object data)
        {
            List <ReversiClientModel> clientModels = (List <ReversiClientModel>)data;

            //// Create the game instance which moves the players to the game room
            ReversiGameModel game = new ReversiGameModel(clientModels);

            RunningGames.Add(game.GameId, game);  // add the game to the dictionary of running games

            Console.WriteLine("... GameServer: Matchup pairing complete. Game " + game.GameId.ToString() + " is ready to start.");
            Console.WriteLine(game.DisplayGameInfoComplete());

            // Send the game object to each of the clients.
            foreach (KeyValuePair <int, ClientModel> item in game.CurrentPlayersList)
            {
                ReversiClientModel client = (ReversiClientModel)item.Value;

                // Send the game data to each of the players
                Console.WriteLine("Sending initial game matchup to players");
                DataTransmission.SerializeData <ReversiGameModel>(game, client.ConnectionSocket);

                // And remove the players from the Staging area.
                StagingArea.Remove(client);
            }

            //// The main game loop. Process individual moves here
            List <TcpClient> sockets = game.GetPlayersSocketList();

            while (!game.GameIsOver)
            {
                // If the game is paused ignore the user input
                if (game.GameIsPaused == true)
                {
                    continue;
                }

                if (game.GameOverCheckRequired)
                {
                    if (game.CheckGameOver(game.CurrentPlayer) == true)
                    {
                        Console.WriteLine("No available moves for " + game.CurrentPlayer);
                        game.GameIsOver = true;
                        break;
                    }

                    Console.WriteLine("Valid moves available for " + game.CurrentPlayer);
                    game.AvailableMovesList.ForEach(Console.WriteLine);
                    game.GameOverCheckRequired = false;
                }

                // If the current turn is valid and complete, switch to the next player
                if (game.TurnComplete)
                {
                    Console.WriteLine(game.Gameboard.DrawGameboardString());
                    game.NextPlayer();
                    game.TurnComplete          = false;
                    game.GameOverCheckRequired = true;

                    // Update the game model for all players...
                    SendGameToAll(game);
                }

                List <ClientModel> disconnectList = new List <ClientModel>();
                foreach (KeyValuePair <int, ClientModel> item in game.CurrentPlayersList)
                {
                    ClientModel client = item.Value;
                    Socket      s      = client.ConnectionSocket.Client;

                    // Check for disconnected sockets
                    if (!SocketConnected(s))
                    {
                        Console.WriteLine("GameServer: (GameID #" + game.GameId + ")");

                        disconnectList.Add(client);
                    }
                }

                // Remove any disconnected players from the game...
                foreach (ClientModel disconnectClient in disconnectList)
                {
                    ClientDisconnectedEventArgs args = new ClientDisconnectedEventArgs
                    {
                        client           = disconnectClient,
                        TimeOfDisconnect = DateTime.Now
                    };
                    game.GameIsPaused = true;
                    OnClientDisconnected(args);

                    game.RemovePlayerFromGame(((ClientModel)disconnectClient));
                    try
                    {
                        disconnectClient.ConnectionSocket.Close();
                    }
                    catch
                    {
                        // Do nothing
                    }
                }

                // Now proceed through the current player list, looking for moves sent by the clients
                foreach (KeyValuePair <int, ClientModel> item in game.CurrentPlayersList)
                {
                    NetworkStream stream;
                    try
                    {
                        stream = item.Value.ConnectionSocket.GetStream();
                    }
                    catch (ObjectDisposedException e)
                    {
                        // Catches a disposed socket possibility here in case it hasn't been fully disposed yet.
                        continue;
                    }

                    if (stream.DataAvailable)
                    {
                        GameMoveModel move = DataTransmission.DeserializeData <GameMoveModel>(item.Value.ConnectionSocket);
                        Console.WriteLine("GameServer: (GameID #" + game.GameId + ")" + move.ByPlayer + " move request received");

                        if (move.ByPlayer == game.CurrentPlayer)
                        {
                            game.CurrentMoveIndex = move.MoveIndex;

                            // Check that the move was valid.
                            if (game.PlayTurn())
                            {
                                Console.WriteLine("GameServer: (GameID #" + game.GameId + ")" + move.ByPlayer + " submitted a valid move");
                                game.TurnComplete     = true;
                                game.CurrentMoveIndex = move.MoveIndex;
                            }
                        }
                        else
                        {
                            Console.WriteLine("GameServer: (GameID #" + game.GameId + ") Move received by opponent.  Ignoring...");
                        }
                    }
                }
            }

            // At this point the game is over.
            Console.WriteLine("The game is over...");
        }
示例#24
0
        private void DTbutton1_Click(object sender, EventArgs e)
        {
            DataTransmission dtForm = new DataTransmission(CoordinateTimer);

            dtForm.Show();
        }
示例#25
0
        /// <summary>
        /// 分页数据查询
        /// </summary>
        /// <param name="sourcename">数据源名</param>
        /// <param name="modes">过滤条件集合</param>
        /// <param name="fields">数据列名</param>
        /// <param name="map">键值对</param>
        /// <param name="_orders">排序键值对</param>
        /// <param name="_needToGroup">是否要组合列</param>
        /// <param name="statisticsEngName">统计英文名</param>
        /// <param name="handler">数据处理委托</param>
        /// <param name="form">父容器控件</param>
        /// <param name="startindex">数据开始行数</param>
        /// <param name="pageCount">页数</param>
        /// <param name="queryHandle">分页数据查询委托</param>
        /// <returns>查询到的数据集</returns>
        public static DataSet QueryPageData(String sourcename, List <FilterMode> modes, String[] fields,
                                            Dictionary <GROUPTYPE, String> map, Dictionary <String, bool> _orders, bool _needToGroup,
                                            String statisticsEngName, DelegateMgr.SendBackHandle handler, int startindex, int pageCount, DelegateMgr.QueryHandle queryHandle
                                            //,Dictionary<String,String[]> blockfilters
                                            )
        {
            String log = null;

            if (String.IsNullOrEmpty(sourcename))
            {
                //res = 0;
                return(null);
            }

            //记录数据源名
            log = "数据源: " + sourcename;
            if (_needToGroup)
            {
                log = ",统计名: " + statisticsEngName;
            }

            log = log + "\r\n";

            if (_orders != null)
            {
                log = log + "排序信息:";
                foreach (KeyValuePair <String, bool> keyValuePair in _orders)
                {
                    log = log + "\r\n    " + keyValuePair.Key;
                    if (keyValuePair.Value)
                    {
                        log = log + ": 升序";
                    }
                    else
                    {
                        log = log + ": 升序";
                    }
                }
                log = log + "\r\n";
            }
            log = log + PrintFilterLog(modes);

            CommonService.Log(log);
            //业务平台调用;提取参数过滤排序信息
            if (CommonService.ISCLIENT == ClientType.Config)
            {
                SetFilterLog(sourcename, modes, fields, map, _orders, _needToGroup, statisticsEngName);
            }

            List <DataTransmission> requests = new List <DataTransmission>();
            DataTransmission        dt       = new DataTransmission();
            List <Expression>       filters  = new List <Expression>();

            //Expression bolckexp = null;
            //if (blockfilters != null)
            //  bolckexp = GetBlockExpression(blockfilters);
            dt.DataSource = sourcename;

            if (modes != null && modes.Count > 0)
            {
                Expression e = null;
                foreach (FilterMode mode in modes)
                {
                    if (!mode.IsSendFilter)
                    {
                        continue;
                    }
                    String[] values = mode.Value as String[];
                    if (values != null)
                    {
                        Expression eps = null;
                        eps = Expression.In(mode.BindParam, values);
                        if (eps != null)
                        {
                            filters.Add(eps);
                        }
                        continue;
                    }
                    else
                    {
                        Expression exp = GetExpression(mode.BindParam, mode.Filter, mode.Value);
                        if (exp != null)
                        {
                            filters.Add(exp);
                        }
                    }
                }
            }

            //if (bolckexp != null)
            //  filters.Add(bolckexp);
            dt.Selector = filters;
            if (map != null && map.Count > 0)
            {
                Expression ep = Expression.Computing();
                foreach (GROUPTYPE g in map.Keys)
                {
                    switch (g)
                    {
                    case GROUPTYPE.GROUP:
                        ep = ep.GroupBy(map[g]);
                        break;

                    case GROUPTYPE.MAX:
                        ep = ep.Max(map[g]);
                        break;

                    case GROUPTYPE.MIN:
                        ep = ep.Min(map[g]);
                        break;

                    default:
                        break;
                    }
                }
                dt.Computing = ep;
            }

            if (_orders != null && _orders.Count > 0)
            {
                dt.Orders = GetOrders(_orders);
            }
            dt.FirstResult = startindex;
            //if (!(CommonService.ISCLIENT == ClientType.Client || CommonService.ISCLIENT == ClientType.Config))
            //{
            //  dt.MaxResult = 500;
            //  dt.IsPaging = true;
            //}
            dt.Fields = fields;
            //dt.MaxResult = pageCount;
            dt.MaxResult = int.MaxValue;
            dt.IsPaging  = true;
            //if (CommonService.ISCLIENT != "1"||CommonService.ISCLIENT!="2")
            //{
            //  dt.MaxResult = 500;
            //  dt.IsPaging = true;
            //}
            requests.Add(dt);
            DataQuery dq = null;

            //try
            //{
            dq = new DataQuery();
            //}
            //catch
            //{

            //    dq = new DataQuery();
            //}

            //System.Diagnostics.Stopwatch ss = new System.Diagnostics.Stopwatch();
            //ss.Start();
            DataSet result = null;

            //lock (lockObj)
            //{

            if (_needToGroup)
            {
                try
                {
                    dt.DataSource = sourcename;
                    if (String.IsNullOrEmpty(statisticsEngName))
                    {
                        dt.StatisticsEngName = sourcename;
                    }
                    else
                    {
                        dt.StatisticsEngName = statisticsEngName;
                    }
                    dt.Filters = filters;
                    if (handler != null)
                    {
                        dq.QueryStaticsForPaging(dt, handler);
                    }
                    else if (queryHandle != null)
                    {
                        String threadid = "";
                        dq.QueryStatics(dt, out threadid, queryHandle);
                        CommonService.Log("开始执行QueryHandler ID:" + threadid);
                        CommonContant.QueryThreadIds.Add(threadid);
                    }
                    else
                    {
                        // form.CurRequestCount++;
                        result = dq.QueryStatics(dt).Data;

                        //return null;
                    }
                    CommonService.Log("请求数据DataQuery数据:\n 调用方法【ResultData QueryStatics(DataTransmission dt)】成功");
                }
                catch
                {
                    CommonService.ClearMemory();

                    return(null);
                }
                finally
                {
                }
            }
            else
            {
                try
                {
                    if (handler == null)
                    {
                        //result = dq.Query(requests);
                        //  String threadid;
                        result = dq.Query(requests);
                    }
                    else
                    {
                        if (startindex == 0)
                        //dq.Query(requests, handler);
                        {
                            String threadid = "";
                            dq.QueryForPagging(dt, out threadid, handler);
                            CommonContant.QueryThreadIds.Add(threadid);
                            CommonService.Log(String.Format("发起数据请求: {0}", threadid));
                        }

                        //lock (CommonContant.LockRequestid)
                        //{
                        //  TaskHelper.CloseProgress(CommonContant.Requestid);
                        //  TaskHelper.StartProgress(ref CommonContant.Requestid);
                        //}

                        //res = 1;
                        CommonService.ClearMemory();
                        return(null);
                    }
                }
                catch (Exception e)
                {
                    //	res = 0;
                    CommonService.Log(e);
                    CommonService.ClearMemory();
                    return(null);
                }
                finally
                {
                    CommonService.Log(String.Format("执行到位置{0}", 17));
                }
                //}
            }
            //dq.Dispose();
            //ss.Stop();
            //	res = 0;
            CommonService.ClearMemory();
            return(result);
        }
示例#26
0
        //where connection stays alive
        private async Task EchoLoopAsync()
        {
            var buffer        = new byte[1024 * 4];
            var existingLogin = false;

            while (Socket.State == WS.WebSocketState.Open)
            {
                //save incoming data
                var incoming = await Socket.ReceiveAsync(new ArraySegment <byte>(buffer), CancellationToken.None);

                if (incoming.MessageType == WS.WebSocketMessageType.Text)
                {
                    string[] dataString = Encoding.UTF8.GetString(new ArraySegment <byte>(buffer, 0, incoming.Count).ToArray()).Split('=');
                    //parse incoming data
                    var data = new DataTransmission <string> {
                        Message = dataString[1], MessageType = dataString[0]
                    };
                    //holding variable for out method
                    Games currentGame = default(Games);
                    //switch messageTypes
                    switch (data.MessageType)
                    {
                    case "login":
                        //Create User with this username
                        User = new User(data.Message);
                        //If not included in hashset,
                        if (!Users.Contains(User))
                        {
                            //send everybody to this user
                            await SendCompleteMessageAsync(Socket, new DataTransmission <IEnumerable <string> > {
                                MessageType = "login", Message = Users.Where(c => c.isInGame == false).Select(c => c.Name)
                            });

                            //add user to hashset
                            Users.Add(User);
                        }
                        //if in hashset
                        else
                        {
                            //close connection
                            await Socket.CloseAsync(WS.WebSocketCloseStatus.NormalClosure, null, CancellationToken.None);

                            //let server know that this handler is an existinglogin
                            existingLogin = true;
                            break;
                        }
                        //send user to everybody
                        _handler.ForEach(async handler => await SendCompleteMessageAsync(handler.Socket, new DataTransmission <string> {
                            MessageType = "login", Message = data.Message
                        }));
                        break;

                    case "newGame":
                        //Create opponent with recieved username
                        User Opponent = new User(data.Message);
                        //validation checking,
                        if (Users.Contains(Opponent))
                        {
                            //find handlers where username is equal to requested opponent and sender's username -- update IsInGame status to true, convert is true
                            var game = _handler.Where(c => c.User.Name == User.Name || c.User.Name == Opponent.Name).Select(c => { c.User.isInGame = true; return(c); }).ToList();
                            //More validation checking, we should only recieve 2 entries
                            if (game.Count == 2)
                            {
                                //tell everyone in lobby to remove people who just made game
                                _handler.Where(c => c.User.isInGame == false).ToList().ForEach(
                                    async handler => await SendCompleteMessageAsync(handler.Socket, new DataTransmission <string[]> {
                                    MessageType = "removelogin", Message = new string[2] {
                                        User.Name, Opponent.Name
                                    }
                                }));
                                //add to dictionary
                                DictGames.Add(Count, new Games());
                                //try get game value
                                DictGames.TryGetValue(Count, out currentGame);
                                if (currentGame != null)
                                {
                                    game.ForEach(handler =>
                                    {
                                        //set gameID for handler
                                        handler.GameId = Count;
                                        //add users to game's dictionary of users
                                        DictGames[Count].Users.Add(handler.User.Name, handler);
                                    });

                                    foreach (var user in currentGame.Users)
                                    {
                                        //give them acknowledgement that game is good to go
                                        await SendCompleteMessageAsync(user.Value.Socket, new DataTransmission <Dictionary <string, Handler> .KeyCollection> {
                                            MessageType = "createGame", Message = DictGames[Count].Users.Keys
                                        });

                                        //give them gameId to send back with each message
                                        await SendCompleteMessageAsync(user.Value.Socket, new DataTransmission <int> {
                                            MessageType = "gameId", Message = Count
                                        });
                                    }
                                    ;
                                }
                                //assign person who requested a game white / opponent black
                                await game.Find(c => c.User.Name == User.Name).Socket.SendAsync(new ArraySegment <byte>(Encoding.UTF8.GetBytes($"isTurn={JsonConvert.SerializeObject(new { isTurn = true, Color = "White" })} ")), WS.WebSocketMessageType.Text, true, CancellationToken.None);

                                await game.Find(c => c.User.Name == Opponent.Name).Socket.SendAsync(new ArraySegment <byte>(Encoding.UTF8.GetBytes($"isTurn={JsonConvert.SerializeObject(new { isTurn = false, Color = "Black" })} ")), WS.WebSocketMessageType.Text, true, CancellationToken.None);

                                Count++;
                            }
                        }
                        break;

                    case "makeMove":
                        //parse data into move object
                        var moveData = JsonConvert.DeserializeObject <Move>(data.Message);
                        //get game instance from gameId
                        DictGames.TryGetValue(GameId ?? -1, out currentGame);
                        //request game to make move
                        var moveInfo = currentGame.GameInstance.MakeMove(moveData.OldPoint, moveData.NewPoint);
                        foreach (var user in currentGame.Users)
                        {
                            //send move info to game users
                            await SendCompleteMessageAsync(user.Value.Socket, new DataTransmission <MoveValidation> {
                                MessageType = "move", Message = moveInfo
                            });
                        }
                        //if no pieces left on board / aka game over
                        if (moveInfo.GameState == Game.StateOfGame.GameOver)
                        {
                            //get usernames from that game
                            Dictionary <string, Handler> .KeyCollection currentGameUsers = currentGame.Users.Keys;
                            //find handlers that were part of game, and reset their ingame status
                            _handler.Where(c => currentGameUsers.Contains(c.User.Name)).Select(c => { c.User.isInGame = false; return(c); });
                            //send to game users that their game is over and they should reset to lobby
                            foreach (var user in currentGame.Users)
                            {
                                await SendCompleteMessageAsync(user.Value.Socket, new DataTransmission <bool> {
                                    MessageType = "reset", Message = true
                                });
                            }
                            //send to everybody a (fake) login of everybody
                            _handler.ForEach(async handler
                                             => await SendCompleteMessageAsync(handler.Socket, new DataTransmission <IEnumerable <string> > {
                                MessageType = "login", Message = Users.Where(c => !c.isInGame).Select(c => c.Name)
                            }));
                        }
                        break;
                    }
                }
            }
            if (Socket.State != WS.WebSocketState.Open)
            {
                //remove from handler
                _handler.Remove(this);
                //if it wasnt an existinglogin attempt
                if (!existingLogin)
                {
                    //remove from users list
                    Users.Remove(User);
                    //if they were in game when d/c'd
                    if (GameId.HasValue)
                    {
                        //get game instance
                        var game = default(Games);
                        DictGames.TryGetValue((int)GameId, out game);
                        //if game isn't null / we found something
                        if (game != null)
                        {
                            //get those users
                            Dictionary <string, Handler> .KeyCollection currentGameUsers = game.Users.Keys;
                            //get the user that doesnt contain the d/c'd username, and set their ingame status to false; (should only be one)
                            var gameUser = _handler.Where(c => !currentGameUsers.Contains(c.User.Name)).Select(c => { c.User.isInGame = false; return(c); }).FirstOrDefault();
                            //send that user a reset msg
                            await SendCompleteMessageAsync(gameUser.Socket, new DataTransmission <bool> {
                                MessageType = "reset", Message = true
                            });

                            //remove game from dictionary
                            DictGames.Remove((int)GameId);
                        }
                    }
                    //remove the login name from everybodys list
                    _handler.ForEach(async handler => await SendCompleteMessageAsync(handler.Socket, new DataTransmission <string> {
                        MessageType = "removelogin", Message = User.Name
                    }));
                }
            }
        }
示例#27
0
 //wrapper method for obnoxious data send
 private static async Task SendCompleteMessageAsync <T>(WS.WebSocket Socket, DataTransmission <T> data)
 {
     await Socket.SendAsync(new ArraySegment <byte>(Encoding.UTF8.GetBytes($"{data.MessageType}={JsonConvert.SerializeObject(data.Message)}")), WS.WebSocketMessageType.Text, true, CancellationToken.None);
 }
示例#28
0
        public static DataSet GetGivenFieldMacroData(FindIndicator queryContditon, String[] fields)
        {
            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();
            DataSet set = new DataSet();
            List <DataTransmission> dtList = null;
            DataTransmission        item   = null;

            try
            {
                item           = new DataTransmission();
                item.MaxResult = 0x7fffffff;
                if ((fields != null) && (fields.Length > 0))
                {
                    item.Fields = fields;
                }
                item.Filters = GetFilterExpress(queryContditon);
                dtList       = new List <DataTransmission>();
                if (queryContditon.findRange == MacroDataType.All)
                {
                    item.DataSource = "EDB_MACRO_INDICATOR_TEST";
                    dtList.Add(item);
                    DataTransmission transmission2 = new DataTransmission();
                    transmission2.MaxResult  = 0x7fffffff;
                    transmission2.Fields     = fields;
                    transmission2.DataSource = "EDB_GLOBAL_INDICATOR_TEST";
                    transmission2.Filters    = item.Filters;
                    dtList.Add(transmission2);
                    DataTransmission transmission3 = new DataTransmission();
                    transmission3.MaxResult  = 0x7fffffff;
                    transmission3.Fields     = fields;
                    transmission3.DataSource = "EDB_INDUSTRY_INDICATOR_TEST";
                    transmission3.Filters    = item.Filters;
                    dtList.Add(transmission3);
                }
                else
                {
                    item.DataSource = MongoDBConstant.DicTreeSource[queryContditon.findRange];
                    dtList.Add(item);
                }
                set = _uniqueQuery.Query(dtList);
            }
            catch (Exception exception)
            {
                //EMLoggerHelper.Write(exception);
            }
            finally
            {
                stopwatch.Stop();
                //EMLoggerHelper.Write("搜索耗时{0}", new object[] { stopwatch.ElapsedMilliseconds });
                if (item != null)
                {
                    item.Clear();
                }
                if (dtList != null)
                {
                    dtList.Clear();
                }
            }
            return(set);
        }
示例#29
0
        /// <summary>
        /// 数据查询
        /// </summary>
        /// <param name="sourcename">数据源名</param>
        /// <param name="modes">过滤条件集合</param>
        /// <param name="fields">数据列名</param>
        /// <param name="map">键值对</param>
        /// <param name="_orders">排序键值对</param>
        /// <param name="_needToGroup">是否要组合列</param>
        /// <param name="statisticsEngName">统计英文名</param>
        /// <param name="handler">数据处理委托</param>
        /// <param name="form">父容器控件</param>
        /// <returns>查询到的数据集</returns>
        public static DataSet QueryData(String sourcename, List <FilterMode> modes, String[] fields,
                                        Dictionary <GROUPTYPE, String> map, Dictionary <String, bool> _orders, bool _needToGroup,
                                        String statisticsEngName, DelegateMgr.QueryHandle handler
                                        //,Dictionary<String,String[]> blockfilters
                                        )
        {
            String log = null;

            if (String.IsNullOrEmpty(sourcename))
            {
                //	res = 0;
                return(null);
            }

            if (!_needToGroup)
            {
                log = "\n\n\nQueryData请求数据描述开始-------------->\n专题:数据源名 " + sourcename + " ";
            }
            else
            {
                log = "\n\n\nQueryData请求数据描述开始-------------->\n专题:统计名名 " + statisticsEngName + " " + _needToGroup + " SourceName: " +
                      sourcename;
            }
            log = "\n" + log + "\n请求参数描述:\n" + PrintFilterLog(modes) + "\nQueryData请求数据描述结束-------------->\n\n\n";
            if (_orders != null)
            {
                foreach (KeyValuePair <String, bool> keyValuePair in _orders)
                {
                    log = log + "r\n" + "排序字段: " + keyValuePair.Key + keyValuePair.Value;
                }
            }
            CommonService.Log(log);
            try
            {
                //业务平台调用;提取参数过滤排序信息
                if (CommonService.ISCLIENT == ClientType.Config)
                {
                    SetFilterLog(sourcename, modes, fields, map, _orders, _needToGroup, statisticsEngName);
                }
            }
            catch { }
            List <DataTransmission> requests = new List <DataTransmission>();
            DataTransmission        dt       = new DataTransmission();
            List <Expression>       filters  = new List <Expression>();

            //Expression bolckexp = null;
            //if (blockfilters != null)
            //  bolckexp = GetBlockExpression(blockfilters);
            dt.DataSource = sourcename;
            if (modes != null && modes.Count > 0)
            {
                Expression e = null;
                foreach (FilterMode mode in modes)
                {
                    if (!mode.IsSendFilter)
                    {
                        continue;
                    }
                    String[] values = mode.Value as String[];
                    if (values != null && values.Length >= 2)
                    {
                        Expression eps = null;
                        eps = Expression.In(mode.BindParam, values);
                        if (eps != null)
                        {
                            filters.Add(eps);
                        }
                        continue;
                    }
                    else
                    {
                        Expression exp = GetExpression(mode.BindParam, mode.Filter, mode.Value);
                        if (exp != null)
                        {
                            filters.Add(exp);
                        }
                    }
                }
            }
            //if (bolckexp != null)
            //  filters.Add(bolckexp);
            dt.Selector = filters;
            if (map != null && map.Count > 0)
            {
                Expression ep = Expression.Computing();
                foreach (GROUPTYPE g in map.Keys)
                {
                    switch (g)
                    {
                    case GROUPTYPE.GROUP:
                        ep = ep.GroupBy(map[g]);
                        break;

                    case GROUPTYPE.MAX:
                        ep = ep.Max(map[g]);
                        break;

                    case GROUPTYPE.MIN:
                        ep = ep.Min(map[g]);
                        break;

                    default:
                        break;
                    }
                }
                dt.Computing = ep;
            }
            if (_orders != null && _orders.Count > 0)
            {
                dt.Orders = GetOrders(_orders);
            }
            dt.FirstResult = 0;
            if (!(CommonService.ISCLIENT == ClientType.Client || CommonService.ISCLIENT == ClientType.Config))
            {
                dt.MaxResult = 500;
                dt.IsPaging  = true;
            }
            //if (CommonService.ISCLIENT != "1"||CommonService.ISCLIENT!="2")
            //{
            //  dt.MaxResult = 500;
            //  dt.IsPaging = true;
            //}
            requests.Add(dt);
            DataQuery dq = new DataQuery();
            //System.Diagnostics.Stopwatch ss = new System.Diagnostics.Stopwatch();
            //ss.Start();
            DataSet result = null;

            lock (lockObj)
            {
                if (_needToGroup)
                {
                    try
                    {
                        dt.DataSource = sourcename;
                        if (String.IsNullOrEmpty(statisticsEngName))
                        {
                            dt.StatisticsEngName = sourcename;
                        }
                        else
                        {
                            dt.StatisticsEngName = statisticsEngName;
                        }
                        dt.Filters = filters;
                        CommonService.Log("开始请求数据DataQuery数据:\n 调用方法【ResultData QueryStatics(DataTransmission dt)】");
                        if (handler == null)
                        {
                            result = dq.QueryStatics(dt).Data;
                        }
                        else
                        {
                            dq.QueryStatics(dt, handler);
                            //res = 1;
                            CommonService.ClearMemory();
                            return(null);
                        }
                        CommonService.Log("请求数据DataQuery数据:\n 调用方法【ResultData QueryStatics(DataTransmission dt)】成功");
                    }
                    catch
                    {
                        //	res = 0;
                        CommonService.Log("请求数据DataQuery数据:\n 调用方法【ResultData QueryStatics(DataTransmission dt)】失败"); CommonService.ClearMemory();
                        return(null);
                    }
                    finally
                    {
                    }
                }
                else
                {
                    try
                    {
                        if (handler == null)
                        {
                            result = dq.Query(requests);
                        }
                        else
                        {
                            dq.Query(requests, handler);
                            CommonService.ClearMemory();
                            return(null);
                        }
                    }
                    catch
                    {
                        CommonService.ClearMemory();
                        return(null);
                    }
                    finally
                    {
                    }
                }
            }
            //dq.Dispose();
            //ss.Stop();
            //res = 0;
            CommonService.ClearMemory();
            return(result);
        }