/// <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; } }
/// <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); }
/// <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; } }
public ClientConnecting(Socket clientSk) { this.clientDataTrans = new DataTransmission(clientSk); Thread threadListen = new Thread(new ThreadStart(Listen)); threadListen.Start(); }
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); }
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>(); }
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); } }
/// <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)); }
/// <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); }
/// <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; } }
/// <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; } }
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); }
/// <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(); }
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); }
private void dataTransmissionToolStripMenuItem_Click(object sender, EventArgs e) { DataTransmission dtForm = new DataTransmission(TrackingTimer); dtForm.Show(); }
/// <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..."); }
private void DTbutton1_Click(object sender, EventArgs e) { DataTransmission dtForm = new DataTransmission(CoordinateTimer); dtForm.Show(); }
/// <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); }
//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 })); } } }
//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); }
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); }
/// <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); }