public override void DoCommand() { byte[] content = Decode.DecodeFirstContendBtyes(bytes); LoginInfo myInfo = DataDo.Json2Object <LoginInfo>(content); string strContent = "SELECT * FROM counter where id=" + myInfo.id + " ;"; PersonalInfo user = SqlConn.Select(strContent); if (user != null) { if (user.password == myInfo.passWord) { Console.WriteLine("用户登陆成功"); Server.AddUser(myInfo.id, conn); conn.ID = myInfo.id; //客户端的id作为属性存起来了便于访问 user.status = (int)PersonStatus.OnLine; //在线 PersonalInfo.ChangeStatusInfo(int.Parse(conn.ID), "", (int)PersonStatus.OnLine); conn.SendBts(Incode.IncodeFirstCommand(type, DataDo.Object2Json(user))); } else { Console.WriteLine("密码错误"); //回客户端消息 } } else { Console.WriteLine("账号不存在"); //回客户端消息 } }
/// <summary> /// 退出房间 /// </summary> void ExitRoom() { RoomMsg roomMsg = DataDo.Json2Object <RoomMsg>(Decode.DecodeSecondContendBtyes(bytes)); RoomInfo roomInfo = GameCommand.GetRoom(roomMsg.roomNum); if (roomInfo != null) { PersonalInfo.ChangeStatusInfo(roomMsg.otherId, "", (int)PersonStatus.OnLine); PersonalInfo people = roomInfo.member.Find(it => { if (it.id == roomMsg.otherId)//找到要删的人 { return(true); } else { return(false); } }); roomInfo.RemoveMember(people.id); //if (roomMsg.otherId == roomInfo.host_Id && roomInfo.member.Count>0)//退出者的ID为房主 //{ // roomInfo.host_Id = roomInfo.member[0].id;//房主转移 //} Console.WriteLine("剩余人数:" + roomInfo.member.Count); } }
/// <summary> /// 摸牌 /// </summary> void Draw() { SingleDraw singleDraw = DataDo.Json2Object <SingleDraw>(Decode.DecodeSecondContendBtyes(bytes)); RoomInfo roomInfo = GetRoom(singleDraw.roomNum); //找到自己在成员列表所对应的下标 if (roomInfo == null) { return; } int cardIndex = singleDraw.cardIndex; BaseCard card = roomInfo.cardsLibrary[cardIndex]; //////出错 “牌不一致” card.CardBelongTo = (CardBelongTo)singleDraw.myIndex; //为每个玩家发牌 //服务器房间牌库数据修改 roomInfo.playersCards.Add(card); roomInfo.cardsLibrary.Remove(card); Console.WriteLine("玩家牌数:" + roomInfo.playersCards.Count + " 牌库:" + roomInfo.cardsLibrary.Count); Console.WriteLine("singleDraw: cardIndex:" + singleDraw.cardIndex + " myId:" + singleDraw.myId + " 时间:" + DateTime.Now); //自动摸牌(托管) if (singleDraw.autoTrusteeship) { card.CardDisplay = CardDisplay.True; //每人的计时是_SingleDrawTime + _SelectMyselfCardTime+出牌按钮+再次摸牌时间 Next(roomInfo); Console.WriteLine("Next-------------Draw"); } ForeachSendDraw((int)SecondCommands.DRAW, roomInfo, cardIndex, card); }
void ReturnRoom() { Info info = DataDo.Json2Object <Info>(Decode.DecodeSecondContendBtyes(bytes)); RoomInfo roomInfo = GameCommand.GetRoom(info.roomId); if (roomInfo != null) { PersonalInfo personal = roomInfo.member.Find(it => { if (it.id == info.myId) { return(true); } else { return(false); } }); if (personal != null) { personal.IsInWaitRoom = true; } //在房间的都知道 conn.SendBts(Incode.IncodeSecondaryCommand(type, (int)SecondCommands.TurnBackROOM, DataDo.Object2Json(roomInfo))); Conn _conn; for (int i = 0; i < roomInfo.member.Count; i++) { if (roomInfo.member[i].id != info.myId) { Server.connMap.TryGetValue(roomInfo.member[i].id.ToString(), out _conn); _conn.SendBts(Incode.IncodeSecondaryCommand(type, (int)SecondCommands.JOINROOM, DataDo.Object2Json(roomInfo))); } } } }
/// <summary> /// 发牌 /// </summary> //void Deal(RoomInfo roomInfo) //{ // int cards = 0; // if (roomInfo.member.Count == 3 || roomInfo.member.Count == 2) // { // cards = 4; // } // else if (roomInfo.member.Count == 4) // { // cards = 3; // } // if (cards == 4 || cards == 3) // { // BaseCard card; // roomInfo.playersCards = new List<BaseCard>(); // for (int i = 1; i <= roomInfo.member.Count; i++)//人员 // { // for (int j = 1; j <= cards; j++)//牌数 // { // card = roomInfo.cardsLibrary[0]; // card.CardBelongTo = (CardBelongTo)i;//为每个玩家发牌 0是牌库 // Console.WriteLine("手牌:" + card.CardName); // roomInfo.playersCards.Add(card); // roomInfo.cardsLibrary.Remove(card); // } // } // Console.WriteLine("手牌数:" + roomInfo.playersCards.Count + " 牌库: " + roomInfo.cardsLibrary.Count); // } //} #endregion /// <summary> /// 公布自选牌 /// </summary> void OpenSelfSelectCard() { byte[] content = Decode.DecodeSecondContendBtyes(bytes); SingleDraw singleDraw = DataDo.Json2Object <SingleDraw>(content); RoomInfo roomInfo = GetRoom(singleDraw.roomNum); //找到自己在成员列表所对应的下标 if (roomInfo == null) { return; } Next(roomInfo); Console.WriteLine("Next-------------OpenSelfSelectCard"); //广播成员 Conn conn; for (int i = 0; i < roomInfo.member.Count; i++) { Server.connMap.TryGetValue(roomInfo.member[i].id.ToString(), out conn); byte[] data = Incode.IncodeSecondaryCommand(type, (int)SecondCommands.SelectMyCardToOpen, content); conn.SendBts(data); } }
/// <summary> /// 发送万能牌移动信息 /// </summary> void SendLineCardMoveInfo() { byte[] content = Decode.DecodeSecondContendBtyes(bytes); Info info = DataDo.Json2Object <Info>(content); Broadcast(GetRoom(info.roomId), SecondCommands.MoveLineCardInFirstDraw, content); }
public override void DoCommand() { int type = BitConverter.ToInt32(bytes, 8);//消息类型:私聊/群聊 MessageInfo info = DataDo.Json2Object <MessageInfo>(Decode.DecodeSecondContendBtyes(bytes)); Console.WriteLine("ChatCommad=>msg:" + " MYid:" + info.sendId + " Fridend:" + info.toIds + " Msg:" + info.content); if (Server.connMap != null) { //Console.WriteLine("当前连接数:" + Server.connMap.Count); if (type == PrivateChat) { Conn receiver_conn; Server.connMap.TryGetValue(info.toIds.ToString(), out receiver_conn); if (receiver_conn != null) //做一个判断receiver_conn是否为空,就不需要在做遍历了 { receiver_conn.SendBts(bytes); //转发给接收方 Console.WriteLine("已发送"); } else { Console.WriteLine("发送失败,好友不在线"); } } else { Console.WriteLine("群发"); } } }
/// <summary> /// 创建房间 /// </summary> public void CreatRoom() { RoomInfo roomInfo = DataDo.Json2Object <RoomInfo>(Decode.DecodeSecondContendBtyes(bytes)); roomInfo.CreateExitList(); allRooms.Add(roomInfo.roomID, roomInfo); //房主信息修改 PersonalInfo.ChangeStatusInfo(roomInfo.member[0].id, roomInfo.roomID, (int)PersonStatus.Combine); Console.WriteLine(" 房间ID: " + roomInfo.roomID); Console.WriteLine("allRooms:" + allRooms.Count + " noStartRooms:" + freeRooms.Count); }
/// <summary> /// 发牌 /// </summary> void DealCards() { FirstDrawInfo firstDrawInfo = DataDo.Json2Object <FirstDrawInfo>(Decode.DecodeSecondContendBtyes(bytes)); Console.WriteLine("白牌的数目:" + firstDrawInfo.blackCards + " 白牌的数目:" + firstDrawInfo.whiteCards); RoomInfo roomInfo = GetRoom(firstDrawInfo.roomNum); if (roomInfo != null) { roomInfo.sealers.Add(firstDrawInfo.myId); DoSeal(roomInfo, firstDrawInfo); } }
/// <summary> /// 加入房间(及时响应) /// </summary> void JoinRoom() { RoomMsg roomMsg = DataDo.Json2Object <RoomMsg>(Decode.DecodeSecondContendBtyes(bytes)); RoomInfo roomInfo = GameCommand.GetRoom(roomMsg.roomNum); if (roomInfo != null) { PersonalInfo.ChangeStatusInfo(roomMsg.my.id, roomInfo.roomID, (int)PersonStatus.Combine); roomMsg.my.IsInWaitRoom = true; roomInfo.AddMember(roomMsg.my); if (roomInfo.member.Count == RoomInfo.MaxSIZE)//房间人满 { freeRooms.Remove(roomInfo.roomID); } ForeachSendRoom((int)SecondCommands.JOINROOM, roomInfo); Console.WriteLine("加入成功"); } }
public override void DoCommand() { LoginInfo myInfo = DataDo.Json2Object <LoginInfo>(Decode.DecodeFirstContendBtyes(bytes)); string id = SqlConn.Insert(myInfo.userName, myInfo.passWord); // 添加到数据库 通过访问数据库获取自动分配的id Server.AddUser(id, conn); //添加到服务器连接字典里去 conn.ID = id; //客户端的id作为属性存起来了便于访问 //Console.WriteLine("获取id:" + id); string strContent = "SELECT * FROM counter where id=" + id + " ;"; PersonalInfo user = SqlConn.Select(strContent); if (user != null) { //Console.WriteLine("用户登陆成功"); user.status = (int)PersonStatus.OnLine;//在线(发送数据修改) PersonalInfo.ChangeStatusInfo(int.Parse(conn.ID), "", (int)PersonStatus.OnLine); conn.SendBts(Incode.IncodeFirstCommand(type, DataDo.Object2Json(user))); } }
/// <summary> /// 猜牌结果发给其他人 并且 执行下一位操作 /// </summary> void SendResult2Other() { byte[] content = Decode.DecodeSecondContendBtyes(bytes); GuessInfo guess = DataDo.Json2Object <GuessInfo>(content); RoomInfo room = GetRoom(guess.roomNum); if (room != null) { Console.WriteLine("--------SendResult2Other()"); if (guess.isGuessTrue) { ForeachSendGuess((int)SecondCommands.GUESS_T, room, content); //修改计时器【累加】 延长计时(计时器-时间) room.Time -= ((int)Time._ExtraTime + (int)Time._ClickThinkingTime);//如果玩家没选择按钮,托管发送会怎么样(延长时间还加上了_SelectMyselfCardTime,因为托管需要客户端驱动下一位,所以时长要放宽) } else { ForeachSendGuess((int)SecondCommands.GUESS_F, room, content); Next(room); } } }