//POST来的数据,用来提交计算 public static String RenJuPostString(String postedString) { ReturnMessage returnMsg = new ReturnMessage(); //检查签名是否正确 if (BoardCheck.CheckMd5Sign(postedString) == false) { returnMsg.Status = MsgStatus.FAILD; returnMsg.Msg = "签名错误!"; returnMsg.Uid = ""; return(returnMsg.ToString()); } try { //重新排列棋子 JObject jObject = JObject.Parse(postedString); int boardsize = int.Parse(jObject.Property("boardsize").Value.ToString()); String pointsnumber = jObject.Property("pointsnumbers").Value.ToString(); String points = jObject.Property("points").Value.ToString(); String chessrule = jObject.Property("chessrule").Value.ToString(); JArray jArray = JArray.Parse(points); //判断棋盘大小 if (boardsize <= 5) { //为客户端返回出错信息 returnMsg.Status = MsgStatus.FAILD; returnMsg.Msg = "棋盘太小,标准棋盘大小为:15*15"; returnMsg.Uid = ""; return(returnMsg.ToString()); } //判断棋子数量是否正确 int white = 0; int black = 0; foreach (JObject item in jArray) { String Str2 = item.Property("player").Value.ToString(); if (item.Property("player").Value.ToString() == "1") { black++; } else { white++; } } //棋子数量不对,直接返回 if (((white + black) != int.Parse(pointsnumber)) || (!((black == white) || (black == white + 1)))) { //为客户端返回出错信息 returnMsg.Status = MsgStatus.FAILD; returnMsg.Msg = "黑白棋子数量有误,无法继续"; returnMsg.Uid = ""; return(returnMsg.ToString()); } //棋子数量没问题,棋盘上面摆上棋子 BoardMatrix boardMatrix = new BoardMatrix(boardsize); foreach (JObject item in jArray) { String xy = item.Property("location").Value.ToString(); String player = item.Property("player").Value.ToString(); String[] myXy = xy.Split(','); int x = int.Parse(myXy[0]); int y = int.Parse(myXy[1]); int p = int.Parse(player); if (x > boardsize || x < 1 || y > boardsize || y < 1 || p > 2 || p < 1) { returnMsg.Status = MsgStatus.FAILD; returnMsg.Msg = "棋子越界,(棋子范围1-" + boardsize + ")"; returnMsg.Uid = ""; return(returnMsg.ToString()); } if (p > 2 || p < 1) { returnMsg.Status = MsgStatus.FAILD; returnMsg.Msg = "棋子颜色错误!(棋子颜色,1:黑旗,2:白棋)"; returnMsg.Uid = ""; return(returnMsg.ToString()); } boardMatrix.SetMatrixPices(x, y, p); } //检查是否结束(五子连起) if (boardMatrix.IsChessExited() == true) { returnMsg.Status = MsgStatus.INVALID; returnMsg.Msg = "无效棋盘,棋已结束!"; returnMsg.Uid = ""; return(returnMsg.ToString()); } //同一盘棋,八个变种(棋盘旋转,反转) List <KeyValuePair <BOARD_TYPE, BoardMatrix> > wzqStringArryList = new List <KeyValuePair <BOARD_TYPE, BoardMatrix> >(); BoardMatrix ANGLE_0 = boardMatrix; BoardMatrix ANGLE_90 = boardMatrix.MatrixTranspose(MatrixTransposeAngle.ANGLE_90); BoardMatrix ANGLE_180 = boardMatrix.MatrixTranspose(MatrixTransposeAngle.ANGLE_180); BoardMatrix ANGLE_270 = boardMatrix.MatrixTranspose(MatrixTransposeAngle.ANGLE_270); BoardMatrix ANGLE_0_REVERSE_UP_DOWN_ANGLE_0 = ANGLE_0.MatrixReverseUpDown(); BoardMatrix ANGLE_0_REVERSE_UP_DOWN_ANGLE_90 = ANGLE_0_REVERSE_UP_DOWN_ANGLE_0.MatrixTranspose(MatrixTransposeAngle.ANGLE_90); BoardMatrix ANGLE_0_REVERSE_UP_DOWN_ANGLE_180 = ANGLE_0_REVERSE_UP_DOWN_ANGLE_0.MatrixTranspose(MatrixTransposeAngle.ANGLE_180); BoardMatrix ANGLE_0_REVERSE_UP_DOWN_ANGLE_270 = ANGLE_0_REVERSE_UP_DOWN_ANGLE_0.MatrixTranspose(MatrixTransposeAngle.ANGLE_270); wzqStringArryList.Add(new KeyValuePair <BOARD_TYPE, BoardMatrix>(BOARD_TYPE.ANGLE_0, ANGLE_0)); wzqStringArryList.Add(new KeyValuePair <BOARD_TYPE, BoardMatrix>(BOARD_TYPE.ANGLE_90, ANGLE_90)); wzqStringArryList.Add(new KeyValuePair <BOARD_TYPE, BoardMatrix>(BOARD_TYPE.ANGLE_180, ANGLE_180)); wzqStringArryList.Add(new KeyValuePair <BOARD_TYPE, BoardMatrix>(BOARD_TYPE.ANGLE_270, ANGLE_270)); wzqStringArryList.Add(new KeyValuePair <BOARD_TYPE, BoardMatrix>(BOARD_TYPE.ANGLE_0_REVERSE_UP_DOWN_ANGLE_0, ANGLE_0_REVERSE_UP_DOWN_ANGLE_0)); wzqStringArryList.Add(new KeyValuePair <BOARD_TYPE, BoardMatrix>(BOARD_TYPE.ANGLE_0_REVERSE_UP_DOWN_ANGLE_90, ANGLE_0_REVERSE_UP_DOWN_ANGLE_90)); wzqStringArryList.Add(new KeyValuePair <BOARD_TYPE, BoardMatrix>(BOARD_TYPE.ANGLE_0_REVERSE_UP_DOWN_ANGLE_180, ANGLE_0_REVERSE_UP_DOWN_ANGLE_180)); wzqStringArryList.Add(new KeyValuePair <BOARD_TYPE, BoardMatrix>(BOARD_TYPE.ANGLE_0_REVERSE_UP_DOWN_ANGLE_270, ANGLE_0_REVERSE_UP_DOWN_ANGLE_270)); String CheckSQLString = ""; List <String> pointLists = new List <string>(); foreach (KeyValuePair <BOARD_TYPE, BoardMatrix> item in wzqStringArryList) { String pointString = item.Value.ToString(); Boolean pointExist = false; foreach (String myPoint in pointLists) { if (myPoint == pointString) { pointExist = true; break; } } if (pointExist == false) { pointLists.Add(pointString); CheckSQLString += " points LIKE '" + pointString + "' OR"; } } CheckSQLString = CheckSQLString.Substring(0, CheckSQLString.Length - 2); //创建唯一ID String Uid = System.Guid.NewGuid().ToString("N"); Boolean boardExist = false; String pointsFromDataBase = ""; //在数据库中检索,检查是否已经存在 SqlConnection sqlConnection = new SqlConnection(ConfigurationManager.AppSettings["SqlConnectionRenjun"]); try { sqlConnection.Open(); SqlCommand sqlCommand = new SqlCommand("", sqlConnection); sqlCommand.CommandText = "SELECT * FROM ChessBoard WHERE boardsize=@boardsize and chessrule=@chessrule and (" + CheckSQLString + " )"; SqlParameter sqlParameterBoardsize = new SqlParameter("@boardsize", boardsize); SqlParameter sqlParameterChessrule = new SqlParameter("@chessrule", chessrule); sqlCommand.Parameters.Add(sqlParameterBoardsize); sqlCommand.Parameters.Add(sqlParameterChessrule); SqlDataReader sqlDataReader = sqlCommand.ExecuteReader(); if (sqlDataReader.Read()) { Uid = sqlDataReader["UID"].ToString().Trim(); pointsFromDataBase = sqlDataReader["points"].ToString().Trim(); boardExist = true; } } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { sqlConnection.Close(); } //判断是那个变种,默认:ANGLE_0 BOARD_TYPE BoardType = BOARD_TYPE.ANGLE_0; if (boardExist == true) { foreach (KeyValuePair <BOARD_TYPE, BoardMatrix> item in wzqStringArryList) { String pointString = item.Value.ToString(); if (pointsFromDataBase == pointString) { BoardType = item.Key; break; } } } else { //没查到,写入数据库 SqlHelper.WriteQueryToDB(boardsize.ToString(), pointsnumber, boardMatrix.ToString(), chessrule, Uid); //向消息队列中提交信息 MessageQueue myMessageQueue = null; string queuepath = @".\private$\" + ConfigurationManager.AppSettings["MessageQueueName"]; if (!MessageQueue.Exists(queuepath)) { myMessageQueue = MessageQueue.Create(queuepath); } myMessageQueue = new MessageQueue(queuepath); //把Uid发送给消息队列等待服务器计算 Message msg = new Message(); msg.Body = Uid; msg.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) }); myMessageQueue.Send(msg); } //为客户端返回信息 returnMsg.Status = MsgStatus.SUBMIT_OK; returnMsg.Msg = "提交成功,请继续查询计算结果!"; returnMsg.Uid = Uid; returnMsg.BoardType = BoardType; return(returnMsg.ToString()); } catch (Exception ex) { //为客户端返回出错信息 returnMsg.Status = MsgStatus.FAILD; returnMsg.Msg = ex.Message; returnMsg.Uid = ""; return(returnMsg.ToString()); } }
public static String RenJuGetString(String uid, String boardtype) { ReturnMessage returnMsg = new ReturnMessage(); if (uid == null || uid.Trim() == "") { returnMsg.Msg = "参数有误!"; returnMsg.Status = MsgStatus.FAILD; return(returnMsg.ToString()); } if (boardtype == null || boardtype.Trim() == "") { returnMsg.Msg = "参数有误!"; returnMsg.Uid = uid; returnMsg.Status = MsgStatus.FAILD; return(returnMsg.ToString()); } returnMsg.Uid = uid; returnMsg.BoardType = (BOARD_TYPE)(int.Parse(boardtype)); //根据UID查询数据库中的计算结果 SqlConnection sqlConnection = new SqlConnection(ConfigurationManager.AppSettings["SqlConnectionRenjun"]); try { sqlConnection.Open(); SqlCommand sqlCommand = new SqlCommand("", sqlConnection); sqlCommand.CommandText = "SELECT * FROM ChessBoard WHERE uid LIKE '" + uid + "'"; SqlDataReader sqlDataReader = sqlCommand.ExecuteReader(); if (sqlDataReader.Read()) { //String status= sqlDataReader["status"].ToString().Trim(); String nextstep = sqlDataReader["nextstep"].ToString().Trim(); if (nextstep == "") { //如果没有结果,则返回正在运行... returnMsg.Status = MsgStatus.RUNNING; returnMsg.Msg = "正在计算中..."; return(returnMsg.ToString()); } else { int boardsize = int.Parse(sqlDataReader["boardsize"].ToString().Trim()); int pointsnumber = int.Parse(sqlDataReader["pointsnumber"].ToString().Trim()); //有结果,则返回结果 if (boardtype == null || boardtype.Trim() == "" || boardtype == "1") { //原始数据,不需要转换 if ((pointsnumber + 1) % 2 == 0) { //偶数,白子 returnMsg.Msg = nextstep + ",2"; } else { returnMsg.Msg = nextstep + ",1"; } returnMsg.BoardType = BOARD_TYPE.ANGLE_0; } else { //需要转换 BoardMatrix boardMatrix = new BoardMatrix(boardsize); //把这一颗棋子放在棋盘上 String[] myXy = nextstep.Split(','); if ((pointsnumber + 1) % 2 == 0) { //偶数,白子 boardMatrix.SetMatrixPices(int.Parse(myXy[0]), int.Parse(myXy[1]), 2); } else { //奇数,黑子 boardMatrix.SetMatrixPices(int.Parse(myXy[0]), int.Parse(myXy[1]), 1); } //根据BOARD_TYPE进行逆向转换 switch (int.Parse(boardtype)) { case (int)BOARD_TYPE.ANGLE_0: returnMsg.Msg = boardMatrix.ToString(); returnMsg.BoardType = BOARD_TYPE.ANGLE_0; break; case (int)BOARD_TYPE.ANGLE_90: returnMsg.Msg = boardMatrix.MatrixTranspose(MatrixTransposeAngle.ANGLE_R90).ToString(); returnMsg.BoardType = BOARD_TYPE.ANGLE_90; break; case (int)BOARD_TYPE.ANGLE_180: returnMsg.Msg = boardMatrix.MatrixTranspose(MatrixTransposeAngle.ANGLE_R180).ToString(); returnMsg.BoardType = BOARD_TYPE.ANGLE_180; break; case (int)BOARD_TYPE.ANGLE_270: returnMsg.Msg = boardMatrix.MatrixTranspose(MatrixTransposeAngle.ANGLE_R270).ToString(); returnMsg.BoardType = BOARD_TYPE.ANGLE_270; break; case (int)BOARD_TYPE.ANGLE_0_REVERSE_UP_DOWN_ANGLE_0: returnMsg.Msg = boardMatrix.MatrixReverseUpDown().ToString(); returnMsg.BoardType = BOARD_TYPE.ANGLE_0_REVERSE_UP_DOWN_ANGLE_0; break; case (int)BOARD_TYPE.ANGLE_0_REVERSE_UP_DOWN_ANGLE_90: returnMsg.Msg = boardMatrix.MatrixTranspose(MatrixTransposeAngle.ANGLE_R90).MatrixReverseUpDown().ToString(); returnMsg.BoardType = BOARD_TYPE.ANGLE_0_REVERSE_UP_DOWN_ANGLE_90; break; case (int)BOARD_TYPE.ANGLE_0_REVERSE_UP_DOWN_ANGLE_180: returnMsg.Msg = boardMatrix.MatrixTranspose(MatrixTransposeAngle.ANGLE_R180).MatrixReverseUpDown().ToString(); returnMsg.BoardType = BOARD_TYPE.ANGLE_0_REVERSE_UP_DOWN_ANGLE_180; break; case (int)BOARD_TYPE.ANGLE_0_REVERSE_UP_DOWN_ANGLE_270: returnMsg.Msg = boardMatrix.MatrixTranspose(MatrixTransposeAngle.ANGLE_R270).MatrixReverseUpDown().ToString(); returnMsg.BoardType = BOARD_TYPE.ANGLE_0_REVERSE_UP_DOWN_ANGLE_270; break; default: break; } } returnMsg.Status = MsgStatus.FINISHED; } return(returnMsg.ToString()); } else { returnMsg.Status = MsgStatus.FAILD; returnMsg.Msg = "无效UID..."; return(returnMsg.ToString()); } } catch (Exception ex) { returnMsg.Msg = ex.Message; returnMsg.Status = MsgStatus.FAILD; return(returnMsg.ToString()); } finally { sqlConnection.Close(); } }