⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serverthread.java

📁 QQ游戏大厅
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
					}
					//把退出游戏的用户信息发给所有在线的玩家
					for (Socket client : Server.clients.valueSet())
					{
						ps = new PrintStream(client.getOutputStream());
						ps.println(MyProtocol.GAME_EXIT + tableNumber + ":" + location + MyProtocol.GAME_EXIT);
					}
					//----------把玩家退出的信息发给对手----------//
					if (size.equals("2"))
					{
						ps = new PrintStream(Server.clients.get(getOtherName(location , tableNumber)).getOutputStream());
						ps.println(MyProtocol.GAMEUSER_EXIT);
					}
				}
				//----------玩家游戏途中强行退出----------//
				else if (buffer.startsWith(MyProtocol.PLAYING_EXIT) && buffer.endsWith(MyProtocol.PLAYING_EXIT))
				{
					String tableNumber = buffer.substring(2 , buffer.length()-2);
					Server.playerReady.remove(tableNumber);
					//清除大厅游戏中状态的台图片
					for (Socket client : Server.clients.valueSet())
					{
						ps = new PrintStream(client.getOutputStream());
						ps.println(MyProtocol.PLAYING_EXIT + tableNumber + MyProtocol.PLAYING_EXIT);
					}
				}
				//----------收到游戏下棋的坐标信息----------//
				else if (buffer.startsWith(MyProtocol.X_Y) && buffer.endsWith(MyProtocol.X_Y))
				{
					String game = buffer.substring(2 , buffer.length()-2);
					String tableNumber = game.substring(0 , game.indexOf(":"));
					String way = game.substring(game.indexOf(":") + 1 , game.indexOf(";"));
					String X = game.substring(game.indexOf(";") + 1 , game.indexOf(","));
					String Y = game.substring(game.indexOf(",") + 1);
					//把信息发去对方玩家
					ps = new PrintStream(Server.clients.get(getOtherName(way , tableNumber)).getOutputStream());
					ps.println(MyProtocol.X_Y + way + ":" + X + "," + Y + MyProtocol.X_Y);

				}
				//----------收到玩家准备好游戏的信息----------//
				else if (buffer.startsWith(MyProtocol.GAME_READY) && buffer.endsWith(MyProtocol.GAME_READY))
				{
					String game = buffer.substring(2 , buffer.length()-2);
					String tableNumber = game.substring(0 , game.indexOf(":"));
					String way = game.substring(game.indexOf(":") + 1 , game.indexOf(";"));
					String name = game.substring(game.indexOf(";") + 1);
					String otherWay = String.valueOf(Integer.parseInt(way) * (-1));
					
					if (Server.table.get(tableNumber).get(otherWay) != null)
					{
						//把此消息发给对方
						ps = new PrintStream(Server.clients.get(getOtherName(way , tableNumber)).getOutputStream());
						ps.println(MyProtocol.OTHER_READY);
					}
					
					if (Server.playerReady.get(tableNumber) == null)
					{
						players = new Hashtable();
						Server.playerReady.put(tableNumber , players);
					}
					Server.playerReady.get(tableNumber).put(way , name);			
					
					if (Server.playerReady.get(tableNumber).size() == 2)
					{
						//把两边都准备好的信息发给左手边(黑棋)的玩家让他可以开始下棋
						for (Object w : Server.playerReady.get(tableNumber).keySet())
						{
							Object userName = Server.playerReady.get(tableNumber).get(w);
							ps = new PrintStream(Server.clients.get(userName).getOutputStream());
							ps.println(MyProtocol.ALL_READY);
						}
						
						//把该台开始游戏的信息发给所有人更新他们在大厅显示的该桌面的图象
						for (Socket client : Server.clients.valueSet())
						{
							ps = new PrintStream(client.getOutputStream());
							ps.println(MyProtocol.PLAYING + tableNumber + MyProtocol.PLAYING);
						}
					}
				}
				//----------收到玩家求和请求----------//
				else if (buffer.startsWith(MyProtocol.PEACE) && buffer.endsWith(MyProtocol.PEACE))
				{
					String state = buffer.substring(2 , buffer.length()-2);
					String tableNumber = state.substring(0 , state.indexOf(":"));
					String way = state.substring(state.indexOf(":") + 1);
					ps = new PrintStream(Server.clients.get(getOtherName(way , tableNumber)).getOutputStream());
					ps.println(MyProtocol.PEACE);
				}
				//----------收到对手同意求和的信息----------//
				else if (buffer.startsWith(MyProtocol.PEACE_AGREE) && buffer.endsWith(MyProtocol.PEACE_AGREE))
				{
					String state = buffer.substring(2 , buffer.length()-2);
					String tableNumber = state.substring(0 , state.indexOf(":"));
					String way = state.substring(state.indexOf(":") + 1);
					Server.playerReady.remove(tableNumber);
					ps = new PrintStream(Server.clients.get(getOtherName(way , tableNumber)).getOutputStream());
					ps.println(MyProtocol.PEACE_AGREE);
					//清除大厅游戏中状态的台图片
					for (Socket client : Server.clients.valueSet())
					{
						ps = new PrintStream(client.getOutputStream());
						ps.println(MyProtocol.PLAYING_EXIT + tableNumber + MyProtocol.PLAYING_EXIT);
					}
				}
				//----------收到对手拒绝求和的信息----------//
				else if (buffer.startsWith(MyProtocol.PEACE_REJECT) && buffer.endsWith(MyProtocol.PEACE_REJECT))
				{
					String state = buffer.substring(2 , buffer.length()-2);
					String tableNumber = state.substring(0 , state.indexOf(":"));
					String way = state.substring(state.indexOf(":") + 1);
					ps = new PrintStream(Server.clients.get(getOtherName(way , tableNumber)).getOutputStream());
					ps.println(MyProtocol.PEACE_REJECT);
				}
				//----------收到对手认输的信息----------//
				else if (buffer.startsWith(MyProtocol.LOST) && buffer.endsWith(MyProtocol.LOST))
				{
					String state = buffer.substring(2 , buffer.length()-2);
					String tableNumber = state.substring(0 , state.indexOf(":"));
					String way = state.substring(state.indexOf(":") + 1);
					Server.playerReady.remove(tableNumber);
					ps = new PrintStream(Server.clients.get(getOtherName(way , tableNumber)).getOutputStream());
					ps.println(MyProtocol.LOST + way + MyProtocol.LOST);
					//清除大厅游戏中状态的台图片
					for (Socket client : Server.clients.valueSet())
					{
						ps = new PrintStream(client.getOutputStream());
						ps.println(MyProtocol.PLAYING_EXIT + tableNumber + MyProtocol.PLAYING_EXIT);
					}
				}
				//----------收到该桌子的游戏已经有人胜利结束了,清除该桌子游戏中状态的图象----------//
				else if (buffer.startsWith(MyProtocol.WIN) && buffer.endsWith(MyProtocol.WIN))
				{
					String tableNumber = buffer.substring(2 , buffer.length()-2);
					Server.playerReady.remove(tableNumber);
					for (Socket client : Server.clients.valueSet())
					{
						ps = new PrintStream(client.getOutputStream());
						ps.println(MyProtocol.PLAYING_EXIT + tableNumber + MyProtocol.PLAYING_EXIT);
					}
				}
				else
				{
					for (Socket client : Server.clients.valueSet())
					{
						ps = new PrintStream(client.getOutputStream());
						msg = buffer.substring(2 , buffer.length()-2);
						ps.println(msg);
					}
				}
			}
			
		}
		catch (Exception e)
		{
			try
			{
				//----------通过退出用户的socket找出退出用户的name----------//
				String name = "";
				for (Object key : Server.clients.keySet())
				{
					if (Server.clients.get(key) == socket)
					{
						name = (String)key;
						break;
					}
				}
				Server.clients.removeByValue(socket);
				//----------把退出用户的用户名发给全部在线的用户----------//
				for (Socket client : Server.clients.valueSet())
				{
					ps = new PrintStream(client.getOutputStream());
					ps.println(MyProtocol.USER_EXIT + name + MyProtocol.USER_EXIT);
				}
				System.out.println(Server.clients.size());
			}
			catch (Exception ev)
			{
			}
		}
		finally
		{
			try
			{
				br.close();
				socket.close();
			}
			catch (Exception e)
			{
			}
		}
	}

	public String getOtherName(String way , String tableNumber)
	{
		String otherWay = String.valueOf(Integer.parseInt(way) * (-1));
		Hashtable a = (Hashtable)(Server.table.get(tableNumber).get(otherWay));
		Object otherName = a.get("name");
		return (String)otherName;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -