static void Main(string[] args) { //create a new server var server = new UdpListener(); //create universe Random rnd = new Random(); Dictionary <string, IPEndPoint> connections = new Dictionary <string, IPEndPoint>(); Dictionary <string, Player> players = new Dictionary <string, Player>(); // List<Weapons> rounds = new List<Weapons>(); bool sectorChanged = false; Console.WriteLine("============================================= Server"); string[] parts; //start listening for messages and copy the messages back to the client Task.Factory.StartNew(async() => { while (true) { var received = await server.Receive(); string msg = received.Message.ToString(); parts = msg.Split(':'); fixParts(parts); Console.WriteLine(msg + " -- " + received.Sender.Address.MapToIPv4().ToString()); // Only add new connections to the list of clients if (!connections.ContainsKey(received.Sender.Address.MapToIPv4().ToString())) { connections.Add(received.Sender.Address.MapToIPv4().ToString(), received.Sender); p1 = new Player(""); //add parameters later p1.Sector = rnd.Next(0, 255); p1.Column = rnd.Next(0, 9); p1.Row = rnd.Next(0, 9); p1.Name = Environment.UserName; players.Add(received.Sender.Address.MapToIPv4().ToString(), p1); p1.SectorStr = numToSectorID(p1.Sector); p1.Connection = received.Sender; server.Reply(String.Format("connected:true:{0}:{1}:{2}", p1.SectorStr, p1.Column, p1.Row), received.Sender); Galaxy sector = universe.getGalaxy(p1.SectorStr); sector.updatePlayer(p1.Name, (p1.Row * 10 + p1.Column % 10)); server.Reply(String.Format("si:{0}:{1}:{2}:{3}", sector.StarLocations, sector.PlanetLocations, sector.BlackholeLocations, sector.getPlayersLocs()), received.Sender); universe.updateWeps(); } string ret = "[Connected Users]"; if (received.Message.Equals("list")) { foreach (string s in connections.Keys) { ret += "\n>> " + s; } server.Reply(ret + "\n*****************", received.Sender); } else { //Okay, send message to everyone // foreach (IPEndPoint ep in connections.Values) // server.Reply("[" + received.Sender.Address.ToString() + "] says: " + received.Message, ep); } if (received.Message == "quit") { connections.Remove(received.Sender.Address.ToString()); // Remove the IP Address from the list of connections } else { foreach (Player player in players.Values) { Galaxy playersSector = universe.getGalaxy(player.SectorStr); server.Reply(String.Format("ni:{0}:{1}:{2}", playersSector.PlanetLocations, playersSector.getPlayersLocs(), playersSector.getWeaponLocations()), player.Connection); } Player p; players.TryGetValue(received.Sender.Address.MapToIPv4().ToString(), out p); // set clients health fuel phasors torpedos and sheilds server.Reply(String.Format("setup:{0}:{1}:{2}:{3}:{4}", p.Health, p.FuelPods, p.Phasors, p.Torpedoes, p.shields), received.Sender); /* for (int i = 0; i < universe.getGalaxy(p.SectorStr).getWeaponCount(); i++) * { * //universe.updateWeps(); * universe.getGalaxy(p.SectorStr).moveBullet(); * }*/ if (p.IsAlive == true) { if (parts[0].Equals("mov")) { if (p.FuelPods != 0) { p.FuelPods--; server.Reply(String.Format("update:fuelpods:{0}", p.FuelPods), received.Sender); if (parts[1].Equals("n")) { p.Row--; } else if (parts[1].Equals("s")) { p.Row++; } else if (parts[1].Equals("e")) { p.Column++; } else if (parts[1].Equals("w")) { p.Column--; } Galaxy sector = universe.getGalaxy(p.SectorStr); //Checks for moving to different sector if (p.Row == -1) { p.Sector -= 16; p.SectorStr = numToSectorID(p.Sector); p.Row = 9; sectorChanged = true; Galaxy newSector = universe.getGalaxy(p.SectorStr); sector.removePlayer(p.Name); newSector.updatePlayer(p.Name, (p.Row * 10 + p.Column % 10)); } else if (p.Row == 10) { p.Sector += 16; p.SectorStr = numToSectorID(p.Sector); p.Row = 0; sectorChanged = true; Galaxy newSector = universe.getGalaxy(p.SectorStr); sector.removePlayer(p.Name); newSector.updatePlayer(p.Name, (p.Row * 10 + p.Column % 10)); } else if (p.Column == -1) { p.Sector--; p.SectorStr = numToSectorID(p.Sector); p.Column = 9; sectorChanged = true; Galaxy newSector = universe.getGalaxy(p.SectorStr); sector.removePlayer(p.Name); newSector.updatePlayer(p.Name, (p.Row * 10 + p.Column % 10)); } else if (p.Column == 10) { p.Sector++; p.SectorStr = numToSectorID(p.Sector); p.Column = 0; sectorChanged = true; Galaxy newSector = universe.getGalaxy(p.SectorStr); sector.removePlayer(p.Name); newSector.updatePlayer(p.Name, (p.Row * 10 + p.Column % 10)); } if (!sectorChanged) { // sector is of type Galaxy sector.updatePlayer(p.Name, (p.Row * 10 + p.Column % 10)); server.Reply(String.Format("ni:{0}:{1}:{2}", sector.PlanetLocations, sector.getPlayersLocs(), sector.getWeaponLocations()), received.Sender); } server.Reply(String.Format("loc:{0}:{1}:{2}:{3}:{4}", p.SectorStr, p.Column, p.Row, parts[1], p.FuelPods), received.Sender); Char cellAction = onSpecialCell(p); sector = universe.getGalaxy(p.SectorStr); switch (cellAction) { case 's': //Player is on a star p.Health = 0; p.IsAlive = false; server.Reply(String.Format("update:health:{0}", p.Health), received.Sender); server.Reply("dead:", received.Sender); break; case 'p': //Player is on a planet p.Health = 100; p.shields = 15; p.Phasors = 50; p.Torpedoes = 10; p.FuelPods = 50; server.Reply(String.Format("update:health:{0}", p.Health), received.Sender); server.Reply(String.Format("update:shields:{0}", p.shields), received.Sender); server.Reply(String.Format("update:phasors:{0}", p.Phasors), received.Sender); server.Reply(String.Format("update:torpedos:{0}", p.Torpedoes), received.Sender); server.Reply(String.Format("update:fuelpods:{0}", p.FuelPods), received.Sender); server.Reply("You landed on a Planet", received.Sender); sector.removePlanet(p.Row * 10 + p.Column % 10); break; case 't': //Player found treasure Random r = new Random(); int x = r.Next(0, 5); if (x == 0) // health regeneration { p.Health = 100; server.Reply("you Regenerated Health", received.Sender); server.Reply(String.Format("update:health:{0}", p.Health), received.Sender); } else if (x == 1) // shields regenerated { p.shields = 15; server.Reply("you Found Shields", received.Sender); server.Reply(String.Format("update:shields:{0}", p.shields), received.Sender); } else if (x == 2) // more phasor ammo { p.Phasors = 50; server.Reply("you found more Phasor Ammo", received.Sender); server.Reply(String.Format("update:phasors:{0}", p.Phasors), received.Sender); } else if (x == 3) // torpedos replenished { p.Health = 10; server.Reply("you Found torpedo ammo", received.Sender); server.Reply(String.Format("update:torpedo:{0}", p.Torpedoes), received.Sender); } else if (x == 4) // fuelpods refilled { p.FuelPods = 50; server.Reply("you Found Fuelpods", received.Sender); server.Reply(String.Format("update:fuel:{0}", p.FuelPods), received.Sender); } break; case 'b': sector = universe.getGalaxy(p.SectorStr); p.Sector = rnd.Next(0, 255); p.SectorStr = numToSectorID(p.Sector); p.Column = rnd.Next(0, 9); p.Row = rnd.Next(0, 9); Galaxy newSector = universe.getGalaxy(p.SectorStr); sector.removePlayer(p.Name); newSector.updatePlayer(p.Name, (p.Row * 10 + p.Column % 10)); server.Reply(String.Format("loc:{0}:{1}:{2}:{3}:{4}", p.SectorStr, p.Column, p.Row, p.Oriantation, p.FuelPods), received.Sender); server.Reply("you went through a blackhole", received.Sender); sectorChanged = true; break; } } else { server.Reply("Out of fuel!", received.Sender); server.Reply(String.Format("update:fuelpods:{0}", p.FuelPods), received.Sender); //server.Reply(String.Format("loc:{0}:{1}:{2}:{3}:{4}", p.SectorStr, p.Column, p.Row, parts[1], p.FuelPods), received.Sender); } } else if (parts[0].Equals("q")) { if (parts[1].Equals("p")) { server.Reply("Phasors equipped!", received.Sender); } else { server.Reply("Torpedos equipped!", received.Sender); } } else if (parts[0].Equals("damage")) { int damage = 0; Int32.TryParse(parts[1], out damage); p.Health -= damage; } else if (parts[0].Equals("r")) { if (parts[1].Equals("n")) { p.Oriantation = 'n'; server.Reply(String.Format("or:{0}", parts[1]), received.Sender); } else if (parts[1].Equals("s")) { p.Oriantation = 's'; server.Reply(String.Format("or:{0}", parts[1]), received.Sender); } else if (parts[1].Equals("e")) { p.Oriantation = 'e'; server.Reply(String.Format("or:{0}", parts[1]), received.Sender); } else if (parts[1].Equals("w")) { p.Oriantation = 'w'; server.Reply(String.Format("or:{0}", parts[1]), received.Sender); } } else if (parts[0].Equals("s")) { if (parts[1].Equals("2")) { server.Reply("Out of Sheilds", received.Sender); } else if (parts[1].Equals("1")) { if (p.shields > 0) { p.shields--; server.Reply(String.Format("update:shields:{0}", p.shields), received.Sender); p.ShieldOn = true; server.Reply(String.Format("sh:{0}", parts[1]), received.Sender); } else { server.Reply("Out of Shields", received.Sender); server.Reply(String.Format("sh:{0}", 2), received.Sender); } } else if (parts[1].Equals("0")) { p.ShieldOn = false; server.Reply(String.Format("sh:{0}", parts[1]), received.Sender); } } else if (parts[0].Equals("v")) { string rply = "unv:"; char sec = 'a'; while (sec != 'q') { for (int i = 0; i < 16; i++) { rply += universe.getGalaxy(sec + "" + i).getPlayerCount() + ":"; } sec++; } server.Reply(rply, received.Sender); } else if (parts[0].Equals("f")) { if (parts[1].Equals("p")) { //Add code for handelig shooting phasors if (p.Phasors != 0 && p.ShieldOn == false) { //server.Reply(String.Format("sh:{0}", parts[1]), received.Sender); Galaxy sector = universe.getGalaxy(p.SectorStr); sector.addWeapon('p', p.Column, p.Row, p.Oriantation, p.SectorStr); // rounds.Add(new Weapons('p', p.Column, p.Row, p.Oriantation, p.SectorStr)); p.Phasors--; server.Reply(String.Format("update:weaponAngle:{0}", p.Oriantation), received.Sender); server.Reply(String.Format("update:weaponLoc:{0}:{1}", p.Column, p.Row), received.Sender); server.Reply(String.Format("update:phasors:{0}", p.Phasors), received.Sender); server.Reply(String.Format("ni:{0}:{1}:{2}", sector.PlanetLocations, sector.getPlayersLocs(), sector.getWeaponLocations()), received.Sender); } else if (p.ShieldOn == true) { server.Reply("Can't shoot with shields on", received.Sender); } else { server.Reply(String.Format("loc:{0}:{1}:{2}:{3}:{4}", p.Sector, p.Column, p.Row, parts[1], p.Phasors), received.Sender); server.Reply(String.Format("Out of Phasors"), received.Sender); } } else if (parts[1].Equals("t")) { //Add code for handeling shooting torpedo if (p.Torpedoes > 0 && p.ShieldOn == false) { Galaxy sector = universe.getGalaxy(p.SectorStr); sector.addWeapon('t', p.Column, p.Row, p.Oriantation, p.SectorStr); p.Torpedoes--; server.Reply(String.Format("update:torpedos:{0}", p.Torpedoes), received.Sender); server.Reply(String.Format("ni:{0}:{1}:{2}", sector.PlanetLocations, sector.getPlayersLocs(), sector.getWeaponLocations()), received.Sender); } else if (p.ShieldOn == true) { server.Reply("Can't shoot with shields on", received.Sender); } else { server.Reply("Out of Torpedos!", received.Sender); server.Reply(String.Format("loc:{0}:{1}:{2}:{3}:{4}", p.Sector, p.Column, p.Row, parts[1], p.Torpedoes), received.Sender); } server.Reply(String.Format("sh:{0}", parts[1]), received.Sender); } } else if (parts[0].Equals("h")) { if (p.FuelPods >= 5) { Galaxy sector = universe.getGalaxy(p.SectorStr); p.Sector = rnd.Next(0, 255); p.SectorStr = numToSectorID(p.Sector); p.Column = rnd.Next(0, 9); p.Row = rnd.Next(0, 9); p.FuelPods -= 5; server.Reply(String.Format("update:fuelpods:{0}", p.FuelPods), received.Sender); Galaxy newSector = universe.getGalaxy(p.SectorStr); sector.removePlayer(p.Name); newSector.updatePlayer(p.Name, (p.Row * 10 + p.Column % 10)); server.Reply(String.Format("loc:{0}:{1}:{2}:{3}:{4}", p.SectorStr, p.Column, p.Row, p.Oriantation, p.FuelPods), received.Sender); sectorChanged = true; } else { server.Reply("Not enough fuel", received.Sender); server.Reply(String.Format("loc:{0}:{1}:{2}:{3}:{4}", p.Sector, p.Column, p.Row, p.Oriantation, p.FuelPods), received.Sender); } } if (sectorChanged) { p.SectorStr = numToSectorID(p.Sector); Galaxy sector = universe.getGalaxy(p.SectorStr); server.Reply(String.Format("si:{0}:{1}:{2}:{3}", sector.StarLocations, sector.PlanetLocations, sector.BlackholeLocations, sector.getPlayersLocs()), received.Sender); sectorChanged = false; } } else { server.Reply("You Are Dead!", received.Sender); } } } }); // Endless loop for user's to send messages to Client string read; do { read = Console.ReadLine(); foreach (IPEndPoint ep in connections.Values) { server.Reply(read, ep); } } while (read != "quit"); }
static void Main(string[] args) { //create a new server Universe u = new Universe(); var server = new UdpListener(); Random rnd = new Random(); Dictionary <string, IPEndPoint> connections = new Dictionary <string, IPEndPoint>(); Dictionary <string, Player> players = new Dictionary <string, Player>(); List <string> ip = new List <string>(); Console.WriteLine("============================================= Server"); string[] parts; //start listening for messages and copy the messages back to the client Task.Factory.StartNew(async() => { while (true) { var received = await server.Receive(); string msg = received.Message.ToString(); parts = msg.Split(':'); fixParts(parts); Console.WriteLine(msg + " -- " + received.Sender.Address.MapToIPv4().ToString()); // Only add new connections to the list of clients if (!connections.ContainsKey(received.Sender.Address.MapToIPv4().ToString())) { connections.Add(received.Sender.Address.MapToIPv4().ToString(), received.Sender); p1 = new Player(); p1.setCol(rnd.Next(0, 9)); p1.setRow(rnd.Next(0, 9)); p1.setStartingLocation(rnd.Next(0, 255)); p1.setSector(u.getSectors()[p1.getStartingLocation()]); u.getSectors()[p1.getStartingLocation()].addPlayer(p1); players.Add(received.Sender.Address.MapToIPv4().ToString(), p1); ip.Add(received.Sender.Address.MapToIPv4().ToString()); server.Reply(System.Text.Encoding.UTF8.GetString(p1.getSector().sendSectorData()), received.Sender); server.Reply(String.Format("connected:true:{0}:{1}:{2}:{3}", p1.getSectorRegion(), p1.getSectorValue(), p1.getCol(), p1.getRow()), received.Sender); } string ret = "[Connected Users]"; if (received.Message.Equals("list")) { foreach (string s in connections.Keys) { ret += "\n>> " + s; } server.Reply(ret + "\n*****************", received.Sender); } else { // Okay, send message to everyone //foreach (IPEndPoint ep in connections.Values) // server.Reply("[" + received.Sender.Address.ToString() + "] says: " + received.Message, ep); } if (received.Message == "quit") { connections.Remove(received.Sender.Address.ToString()); // Remove the IP Address from the list of connections } else if (received.Message == "shieldOn") { Player p = players[received.Sender.Address.MapToIPv4().ToString()]; p.changeShield(); Console.Write("reached"); } else if (received.Message == "viewu") { string playerString = ""; foreach (Sector s in u.getSectors()) { foreach (Player p in s.getPlayers()) { playerString += "Player- "; playerString += s.getRegion().ToString().ToUpper(); playerString += "-" + s.getValue().ToString(); playerString += System.Environment.NewLine; } } server.Reply((String.Format("universe:{0}", playerString)), received.Sender); Console.Write("reached"); } else if (received.Message == "update0") { Player p = players[received.Sender.Address.MapToIPv4().ToString()]; p.setShipAngle(0); } else if (received.Message == "update90") { Player p = players[received.Sender.Address.MapToIPv4().ToString()]; p.setShipAngle(90); } else if (received.Message == "update180") { Player p = players[received.Sender.Address.MapToIPv4().ToString()]; p.setShipAngle(180); } else if (received.Message == "update270") { Player p = players[received.Sender.Address.MapToIPv4().ToString()]; p.setShipAngle(270); } else if (received.Message == ("fireP")) { Player p = players[received.Sender.Address.MapToIPv4().ToString()]; if (p.getPhasors() != 0) { if (p.getShield() == false) { p.setPhasors(p.getPhasors() - 1); server.Reply((String.Format("phasors:{0}", p.getPhasors())), received.Sender); } } else { server.Reply((String.Format("display:{0}", "Out of Ammo")), received.Sender); } if (p.getSector().getPlayers().Count > 1) { foreach (Player p1 in p.getSector().getPlayers()) { if (p1.getRow() != p.getRow() || p1.getCol() != p.getCol()) { if (p.getShipAngle() == 0 && p1.getRow() < p.getRow() && p1.getCol() == p.getCol()) { Console.Write("Hit"); Console.Write(p.getShield()); if (p1.getShield() == false && p.getShield() == false) { p1.setHealth(p1.getHealth() - 5); } } else if (p.getShipAngle() == 180 && p1.getRow() > p.getRow() && p1.getCol() == p.getCol()) { Console.Write("Hit"); if (p1.getShield() == false && p.getShield() == false) { p1.setHealth(p1.getHealth() - 5); } } else if (p.getShipAngle() == 90 && p1.getRow() == p.getRow() && p1.getCol() > p.getCol()) { Console.Write("Hit"); if (p1.getShield() == false && p.getShield() == false) { p1.setHealth(p1.getHealth() - 5); } } else if (p.getShipAngle() == 270 && p1.getRow() == p.getRow() && p1.getCol() < p.getCol()) { Console.Write("Hit"); if (p1.getShield() == false && p.getShield() == false) { p1.setHealth(p1.getHealth() - 5); } } } } } } else if (received.Message == ("fireT")) { Player p = players[received.Sender.Address.MapToIPv4().ToString()]; if (p.getTorpedos() != 0) { p.setTorpedos(p.getTorpedos() - 1); server.Reply((String.Format("torpedos:{0}", p.getTorpedos())), received.Sender); } else { server.Reply((String.Format("display:{0}", "Out of Ammo")), received.Sender); } if (p.getSector().getPlayers().Count > 1) { foreach (Player p1 in p.getSector().getPlayers()) { if (p1.getRow() != p.getRow() || p1.getCol() != p.getCol()) { if (p.getShipAngle() == 0 && p1.getRow() < p.getRow() && p1.getCol() == p.getCol()) { Console.Write("Hit"); if (p1.getShield() == false && p.getShield() == false) { p1.setHealth(p1.getHealth() - 15); } } else if (p.getShipAngle() == 180 && p1.getRow() > p.getRow() && p1.getCol() == p.getCol()) { Console.Write("Hit"); if (p1.getShield() == false && p.getShield() == false) { p1.setHealth(p1.getHealth() - 15); } } else if (p.getShipAngle() == 90 && p1.getRow() == p.getRow() && p1.getCol() > p.getCol()) { Console.Write("Hit"); if (p1.getShield() == false && p.getShield() == false) { p1.setHealth(p1.getHealth() - 15); } } else if (p.getShipAngle() == 270 && p1.getRow() == p.getRow() && p1.getCol() < p.getCol()) { Console.Write("Hit"); if (p1.getShield() == false && p.getShield() == false) { p1.setHealth(p1.getHealth() - 15); } } } } } } else if (parts[0].Equals("mov")) { string message = ""; Player p = players[received.Sender.Address.MapToIPv4().ToString()]; p.setFuel(p.getFuel() - 1); if (parts[1].Equals("n")) { p.setShipAngle(0); p.setRow(p.getRow() - 1); int x = isCollision(p.getSector(), p.getRow(), p.getCol()); if (x == 1) { p.setHealth(0); if (p.getSector().getPlayers().Count > 1) { p.getSector().getPlayers().Remove(p); } } else if (x == 2) { p.setFuel(50); p.setHealth(100); p.setPhasors(50); p.setTorpedos(10); } else if (x == 3) { p.setStartingLocation(rnd.Next(0, 255)); p.getSector().removePlayer(p); p.setSector(u.getSectors()[p.getStartingLocation()]); p.getSector().addPlayer(p); var chars = p.getSector().getSafeLocation().ToCharArray(); string row = chars[0].ToString(); string col = chars[1].ToString(); p.setRow(Convert.ToInt32(row)); p.setCol(Convert.ToInt32(col)); server.Reply(System.Text.Encoding.UTF8.GetString(p.getSector().sendSectorData()), received.Sender); } else if (x == 4) { message = "You found treasure!"; } } else if (parts[1].Equals("s")) { p.setShipAngle(180); p.setRow(p.getRow() + 1); int x = isCollision(p.getSector(), p.getRow(), p.getCol()); if (x == 1) { p.setHealth(0); if (p.getSector().getPlayers().Count > 1) { p.getSector().getPlayers().Remove(p); } } else if (x == 2) { p.setFuel(50); p.setHealth(100); p.setPhasors(50); p.setTorpedos(10); } else if (x == 3) { p.setStartingLocation(rnd.Next(0, 255)); p.getSector().removePlayer(p); p.setSector(u.getSectors()[p.getStartingLocation()]); p.getSector().addPlayer(p); var chars = p.getSector().getSafeLocation().ToCharArray(); string row = chars[0].ToString(); string col = chars[1].ToString(); p.setRow(Convert.ToInt32(row)); p.setCol(Convert.ToInt32(col)); p.setFuel(p.getFuel() - 5); server.Reply(System.Text.Encoding.UTF8.GetString(p.getSector().sendSectorData()), received.Sender); } else if (x == 4) { message = "You found treasure!"; } } else if (parts[1].Equals("e")) { p.setShipAngle(90); p.setCol(p.getCol() + 1); int x = isCollision(p.getSector(), p.getRow(), p.getCol()); if (x == 1) { p.setHealth(0); if (p.getSector().getPlayers().Count > 1) { p.getSector().getPlayers().Remove(p); } } else if (x == 2) { p.setFuel(50); p.setHealth(100); p.setPhasors(50); p.setTorpedos(10); } else if (x == 3) { p.setStartingLocation(rnd.Next(0, 255)); p.getSector().removePlayer(p); p.setSector(u.getSectors()[p.getStartingLocation()]); p.getSector().addPlayer(p); var chars = p.getSector().getSafeLocation().ToCharArray(); string row = chars[0].ToString(); string col = chars[1].ToString(); p.setRow(Convert.ToInt32(row)); p.setCol(Convert.ToInt32(col)); server.Reply(System.Text.Encoding.UTF8.GetString(p.getSector().sendSectorData()), received.Sender); } else if (x == 4) { message = "You found treasure!"; } } else if (parts[1].Equals("w")) { p.setShipAngle(270); p.setCol(p.getCol() - 1); int x = isCollision(p.getSector(), p.getRow(), p.getCol()); if (x == 1) { p.setHealth(0); if (p.getSector().getPlayers().Count > 1) { p.getSector().getPlayers().Remove(p); } } else if (x == 2) { p.setFuel(50); p.setHealth(100); p.setTorpedos(10); p.setPhasors(50); } else if (x == 3) { p.setStartingLocation(rnd.Next(0, 255)); p.getSector().removePlayer(p); p.setSector(u.getSectors()[p.getStartingLocation()]); p.getSector().addPlayer(p); var chars = p.getSector().getSafeLocation().ToCharArray(); string row = chars[0].ToString(); string col = chars[1].ToString(); p.setRow(Convert.ToInt32(row)); p.setCol(Convert.ToInt32(col)); server.Reply(System.Text.Encoding.UTF8.GetString(p.getSector().sendSectorData()), received.Sender); } else if (x == 4) { message = "You found treasure!"; } } else if (parts[1].Equals("h")) { Console.Write("print"); p.setStartingLocation(rnd.Next(0, 255)); p.getSector().removePlayer(p); p.setSector(u.getSectors()[p.getStartingLocation()]); p.getSector().addPlayer(p); var chars = p.getSector().getSafeLocation().ToCharArray(); string row = chars[0].ToString(); string col = chars[1].ToString(); p.setRow(Convert.ToInt32(row)); p.setCol(Convert.ToInt32(col)); p.setFuel(p.getFuel() - 5); server.Reply(System.Text.Encoding.UTF8.GetString(p.getSector().sendSectorData()), received.Sender); } if (p.getCol() > 9) { p.setStartingLocation(p.getStartingLocation() + 16); if (p.getSectorRegion().Equals('P')) { p.getSector().removePlayer(p); p.setSector(u.getSectors()[p.getSectorValue()]); p.getSector().addPlayer(p); server.Reply(System.Text.Encoding.UTF8.GetString(p.getSector().sendSectorData()), received.Sender); p.setStartingLocation(p.getSectorValue()); } else { p.getSector().removePlayer(p); p.setSector(u.getSectors()[p.getStartingLocation()]); p.getSector().addPlayer(p); server.Reply(System.Text.Encoding.UTF8.GetString(p.getSector().sendSectorData()), received.Sender); } p.setCol(0); } if (p.getCol() < 0) { p.setStartingLocation(p.getStartingLocation() - 16); if ((p.getSectorRegion().Equals('A'))) { p.getSector().removePlayer(p); p.setSector(u.getSectors()[u.getSectors().Count - (16 - p.getSectorValue())]); p.getSector().addPlayer(p); server.Reply(System.Text.Encoding.UTF8.GetString(p.getSector().sendSectorData()), received.Sender); p.setStartingLocation(u.getSectors().Count - (16 - p.getSectorValue())); } else { p.getSector().removePlayer(p); p.setSector(u.getSectors()[p.getStartingLocation()]); p.getSector().addPlayer(p); server.Reply(System.Text.Encoding.UTF8.GetString(p.getSector().sendSectorData()), received.Sender); } p.setCol(9); } if (p.getRow() < 0) { p.setStartingLocation(p.getStartingLocation() - 1); if (p.getSectorValue() == 0) { p.getSector().removePlayer(p); p.setSector(u.getSectors()[p.getStartingLocation() + 16]); p.getSector().addPlayer(p); server.Reply(System.Text.Encoding.UTF8.GetString(p.getSector().sendSectorData()), received.Sender); p.setStartingLocation(p.getStartingLocation() + 16); } else { p.getSector().removePlayer(p); p.setSector(u.getSectors()[p.getStartingLocation()]); p.getSector().addPlayer(p); server.Reply(System.Text.Encoding.UTF8.GetString(p.getSector().sendSectorData()), received.Sender); } p.setRow(9); } if (p.getRow() > 9) { p.setStartingLocation(p.getStartingLocation() + 1); if (p.getSectorValue() == 15) { p.getSector().removePlayer(p); p.setSector(u.getSectors()[p.getStartingLocation() - 16]); p.getSector().addPlayer(p); server.Reply(System.Text.Encoding.UTF8.GetString(p.getSector().sendSectorData()), received.Sender); p.setStartingLocation(p.getStartingLocation() - 16); } else { p.getSector().removePlayer(p); p.setSector(u.getSectors()[p.getStartingLocation()]); p.getSector().addPlayer(p); server.Reply(System.Text.Encoding.UTF8.GetString(p.getSector().sendSectorData()), received.Sender); } p.setRow(0); } if (p.getSector().getPlayers().Count == 1) { string sendStream = ""; sendStream += p.getSectorRegion() + "-"; sendStream += p.getSectorValue() + "-"; sendStream += p.getRow() + "-"; sendStream += p.getCol() + "-"; sendStream += p.getHealth() + "-"; sendStream += p.getFuel() + "-"; sendStream += p.getPhasors() + "-"; sendStream += p.getTorpedos(); byte[] b = new byte[18]; b = Encoding.ASCII.GetBytes(sendStream); server.Reply((String.Format("loc:{0}:{1}:{2}", System.Text.Encoding.UTF8.GetString(b), parts[1], message)), received.Sender); } else { Console.Write("Check 1"); string ourPlayer = ""; string otherPlayers = ""; byte[] b1 = new byte[18]; int x = p.getSector().getPlayers().Count; byte[] b2 = new byte[x * 6]; foreach (Player p1 in p.getSector().getPlayers()) { if (p1.getRow() == p.getRow() && p1.getCol() == p.getCol()) { ourPlayer += p.getSectorRegion() + "-"; ourPlayer += p.getSectorValue() + "-"; ourPlayer += p.getRow() + "-"; ourPlayer += p.getCol() + "-"; ourPlayer += p.getHealth() + "-"; ourPlayer += p.getFuel() + "-"; ourPlayer += p.getPhasors() + "-"; ourPlayer += p.getTorpedos() + "-"; } else { if (p1.getHealth() > 0) { otherPlayers += p1.getRow() + "-"; otherPlayers += p1.getCol() + "-"; otherPlayers += p1.getShipAngle() + "-"; } } } b1 = Encoding.ASCII.GetBytes(ourPlayer); b2 = Encoding.ASCII.GetBytes(otherPlayers); server.Reply((String.Format("loc2:{0}:{1}:{2}:{3}", System.Text.Encoding.UTF8.GetString(b1), System.Text.Encoding.UTF8.GetString(b2), parts[1], message)), received.Sender); } } } }); // Endless loop for user's to send messages to Client string read; do { read = Console.ReadLine(); foreach (IPEndPoint ep in connections.Values) { server.Reply(read, ep); } } while (read != "quit"); }
static void Main(string[] args) { //create a new server var server = new UdpListener(); Random rnd = new Random(); Dictionary <string, IPEndPoint> connections = new Dictionary <string, IPEndPoint>(); Dictionary <string, Player> players = new Dictionary <string, Player>(); Console.WriteLine("============================================= Server"); string[] parts; //start listening for messages and copy the messages back to the client Task.Factory.StartNew(async() => { while (true) { var received = await server.Receive(); string msg = received.Message.ToString(); parts = msg.Split(':'); fixParts(parts); Console.WriteLine(msg + " -- " + received.Sender.Address.MapToIPv4().ToString()); // Only add new connections to the list of clients if (!connections.ContainsKey(received.Sender.Address.MapToIPv4().ToString())) { connections.Add(received.Sender.Address.MapToIPv4().ToString(), received.Sender); p1 = new Player(); p1.sector = rnd.Next(0, 256); p1.col = rnd.Next(0, 9); p1.row = rnd.Next(0, 9); players.Add(received.Sender.Address.MapToIPv4().ToString(), p1); server.Reply(String.Format("connected:true:{0}:{1}:{2}", p1.sector, p1.col, p1.row), received.Sender); } string ret = "[Connected Users]"; if (received.Message.Equals("list")) { foreach (string s in connections.Keys) { ret += "\n>> " + s; } server.Reply(ret + "\n*****************", received.Sender); } else { // Okay, send message to everyone //foreach (IPEndPoint ep in connections.Values) // server.Reply("[" + received.Sender.Address.ToString() + "] says: " + received.Message, ep); } if (received.Message == "quit") { connections.Remove(received.Sender.Address.ToString()); // Remove the IP Address from the list of connections } else if (parts[0].Equals("mov")) { Player p; players.TryGetValue(received.Sender.Address.MapToIPv4().ToString(), out p); if (parts[1].Equals("n")) { p.row--; } else if (parts[1].Equals("s")) { p.row++; } else if (parts[1].Equals("e")) { p.col++; } else if (parts[1].Equals("w")) { p.col--; } server.Reply(String.Format("loc:{0}:{1}:{2}:{3}", p.sector, p.col, p.row, parts[1]), received.Sender); } else if (parts[0].Equals("hyp")) { Player p; players.TryGetValue(received.Sender.Address.MapToIPv4().ToString(), out p); p.col = rnd.Next(0, 9); p.row = rnd.Next(0, 9); p.fuel_pods -= 5; server.Reply(String.Format("loc:{0}:{1}:{2}:{3}", p.sector, p.col, p.row, p.fuel_pods), received.Sender); } } }); // Endless loop for user's to send messages to Client string read; do { read = Console.ReadLine(); foreach (IPEndPoint ep in connections.Values) { server.Reply(read, ep); } } while (read != "quit"); }