static void Main(string[] args) { Console.WriteLine("Memulai Server"); MySQLDatabase db = new MySQLDatabase(); PlayerManagement playerManagement = new PlayerManagement(); ConnectionFactory factory = new ConnectionFactory(); factory.HostName = "167.205.7.19"; factory.Port = 5672; factory.UserName = "******"; factory.Password = "******"; factory.VirtualHost = "/ARX"; using (var connection = factory.CreateConnection()) using (var channel = connection.CreateModel()) { channel.ExchangeDeclare(exchange: "TheDemiteRequestExchange", type: "direct", durable: true); channel.ExchangeDeclare(exchange: "TheDemiteResponseExchange", type: "direct", durable: true); var queueName = channel.QueueDeclare().QueueName; channel.QueueBind(queue: queueName, exchange: "TheDemiteRequestExchange", routingKey: "TheDemiteRequestRoutingKey"); Console.WriteLine(" [*] Waiting for massages."); var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { //menerima message dari queue var body = ea.Body; var message = Encoding.UTF8.GetString(body); //process request Console.WriteLine(" [x] recieved request = {0}", message); dynamic msg = JsonConvert.DeserializeObject(message); if (msg != null) { //login if (msg["type"] == "login") { Console.WriteLine(" [x] processing login request from {0}", msg["id"]); string username = (string)msg["username"]; string password = (string)msg["password"]; int count = db.Count("user", "username='******' AND password='******'"); if (count == 1) { count = db.Update("user", "is_active=1", "username='******'"); } LoginResponseJson response = new LoginResponseJson(); response.id = msg["id"]; response.type = msg["type"]; response.count = count; response.username = username; var jsonString = JsonConvert.SerializeObject(response); Console.WriteLine(jsonString); //send response var newMassage = Encoding.UTF8.GetBytes(jsonString); channel.BasicPublish(exchange: "TheDemiteResponseExchange", routingKey: "TheDemiteResponseRoutingKey", basicProperties: null, body: newMassage); Console.WriteLine(" [x] login response sent to {0} ", msg["id"]); } if (msg["type"] == "newaccount") { Console.WriteLine(" [x] processing new account request from {0} ", msg["id"]); string firstName = (string)msg["firstName"]; string lastName = (string)msg["lastName"]; string email = (string)msg["email"]; string username = (string)msg["username"]; string password = (string)msg["password"]; NewAccountResponseJson response = new NewAccountResponseJson(); response.id = msg["id"]; response.type = msg["type"]; response.result = db.CreateNewAccount(firstName, lastName, username, password, email); var jsonString = JsonConvert.SerializeObject(response); //send response var newMassage = Encoding.UTF8.GetBytes(jsonString); channel.BasicPublish(exchange: "TheDemiteResponseExchange", routingKey: "TheDemiteResponseRoutingKey", basicProperties: null, body: newMassage); //Console.WriteLine("helloworld"); Console.WriteLine(" [x] new account response sent to {0} ", msg["id"]); } if (msg["type"] == "resetpassword") { Console.WriteLine(" [x] Processing reset password request from {0} ", msg["id"]); EmailManagement emailManage = new EmailManagement(); int user_id = -1; int updateResult = -1; int result = -1; string email = (string)msg["email"]; user_id = db.FindUserIdByEmail(email); if (user_id != -1) { string newPass = emailManage.CreateRandomPassword(6); updateResult = db.Update("user", "password" + newPass, "id=" + user_id); if (updateResult != -1) { result = emailManage.SendEmail(email, newPass, 1); } } ResetPasswordJson reset = new ResetPasswordJson(); reset.id = msg["id"]; reset.type = msg["type"]; reset.result = result; var jsonString = JsonConvert.SerializeObject(reset); //send response Console.WriteLine(" [x] sending reset password response to {0} ", msg["id"]); var newMassage = Encoding.UTF8.GetBytes(jsonString); channel.BasicPublish(exchange: "TheDemiteResponseExchange", routingKey: "TheDemiteResponseRoutingKey", basicProperties: null, body: newMassage); } if (msg["type"] == "changepassword") { Console.WriteLine(" [x] processing change password request from {0} ", msg["id"]); EmailManagement emailManage = new EmailManagement(); string username = (string)msg["username"]; string oldPass = (string)msg["oldPass"]; string newPass = (string)msg["newPass"]; int result = -1; int count = db.Count("user", "username='******'"); if (count != -1) { int count2 = db.Count("user", "password" + oldPass); if (count2 != -1) { result = db.Update("user", "password="******"username='******'"); if (result != -1) { string email = db.FindEmail(username); result = emailManage.SendEmail(email, "", 2); } } } ChangePasswordJson change = new ChangePasswordJson(); change.id = msg["id"]; change.type = msg["type"]; change.result = result; var jsonString = JsonConvert.SerializeObject(change); //send response Console.WriteLine(" [x] sending change password response to {0} ", msg["id"]); var newMessage = Encoding.UTF8.GetBytes(jsonString); channel.BasicPublish(exchange: "TheDemiteResponseExchange", routingKey: "TheDemiteResponseRoutingKey", basicProperties: null, body: newMessage); } if (msg["type"] == "map") { Console.WriteLine(" [x] processing map request from {0} ", msg["id"]); ResponseJson responseJson = new ResponseJson(); responseJson.id = msg["id"]; responseJson.type = msg["type"]; responseJson.mapData = playerManagement.AcquireMapData(msg); responseJson.needCreateMap = playerManagement.GetNeedCreateMap(); responseJson.playerName = msg["playerName"]; responseJson.playerPosX = playerManagement.GetPlayerPosX(); responseJson.playerPosY = playerManagement.GetPlayerPosY(); responseJson.centerPosX = playerManagement.GetCenterPosX(); responseJson.centerPosY = playerManagement.GetCenterPosY(); responseJson.tileX = playerManagement.GetTileX(); responseJson.tileY = playerManagement.GetTileY(); var jsonString = JsonConvert.SerializeObject(responseJson); // send response var newMessage = Encoding.UTF8.GetBytes(jsonString); channel.BasicPublish(exchange: "TheDemiteResponseExchange", routingKey: "TheDemiteResponseRoutingKey", basicProperties: null, body: newMessage); Console.WriteLine(" [x] map response sent to {0} ", msg["id"]); } if (msg["type"] == "maptohome") { Console.WriteLine(" [x] processing maptohome request from {0} ", msg["id"]); int result = playerManagement.SetPlayerActive(msg); // send update to other user that user return home List <UnityPlayerPetPosition> unityPlayerPos = playerManagement.GetOthers(msg); ListPlayerResponseJson listPlayer = new ListPlayerResponseJson(); listPlayer.unityPlayerPos = unityPlayerPos; listPlayer.type = "listplayer"; listPlayer.tileX = (int)msg["tileX"]; listPlayer.tileY = (int)msg["tileY"]; //listPlayer.id = msg["id"]; var jsonString2 = JsonConvert.SerializeObject(listPlayer); // send response //Console.WriteLine(" [x] sending list player response to {0} ", msg["username"]); Console.WriteLine(" list player2 = " + jsonString2); var newMessage2 = Encoding.UTF8.GetBytes(jsonString2); channel.BasicPublish(exchange: "TheDemiteResponseExchange", routingKey: "TheDemiteResponseRoutingKey", basicProperties: null, body: newMessage2); // map to home response PauseRespondJson respond = new PauseRespondJson(); respond.id = msg["id"]; respond.type = msg["type"]; respond.result = result; var jsonString = JsonConvert.SerializeObject(respond); Console.WriteLine(jsonString); // send response var newMessage = Encoding.UTF8.GetBytes(jsonString); channel.BasicPublish(exchange: "TheDemiteResponseExchange", routingKey: "TheDemiteResponseRoutingKey", basicProperties: null, body: newMessage); Console.WriteLine(" [x] maptohome response sent to {0} ", msg["id"]); } if (msg["type"] == "route") { Console.WriteLine(" [x] processing route request from {0} ", msg["id"]); List <Coordinate> route = playerManagement.PlayerRouting(msg); RouteResponseJson routeResponseJson = new RouteResponseJson(); routeResponseJson.route = route; routeResponseJson.type = msg["type"]; routeResponseJson.id = msg["id"]; var jsonString = JsonConvert.SerializeObject(routeResponseJson); // send response var newMessage = Encoding.UTF8.GetBytes(jsonString); channel.BasicPublish(exchange: "TheDemiteResponseExchange", routingKey: "TheDemiteResponseRoutingKey", basicProperties: null, body: newMessage); Console.WriteLine(" [x] route response sent to {0} ", msg["id"]); } /* * if (msg["type"] == "returntitle") * { * Console.WriteLine(" [x] processing return title request from {0} ", msg["id"]); * * string username = (string)msg["username"]; * int rest = (int)msg["rest"]; * int energy = (int)msg["energy"]; * int agility = (int)msg["agility"]; * int stress = (int)msg["stress"]; * int heart = (int)msg["heart"]; * int money = (int)msg["money"]; * int xp = (int)msg["xp"]; * * //int result = db.UpdateStatus(username, rest, energy, agility, stress, heart, money, xp); * * if (result == 1) * { * result = playerManagement.RemovePlayer(msg); * } * * ReturnTitleRespondJson respond = new ReturnTitleRespondJson(); * respond.id = msg["id"]; * respond.type = msg["type"]; * respond.result = result; * * var jsonString = JsonConvert.SerializeObject(respond); * * // send response * var newMessage = Encoding.UTF8.GetBytes(jsonString); * channel.BasicPublish(exchange: "DigipetResponseExchange", * routingKey: "DigipetResponseRoutingKey", * basicProperties: null, * body: newMessage); * * Console.WriteLine(" [x] return title response sent to {0} ", msg["id"]); * } */ if (msg["type"] == "listplayer") { Console.WriteLine(" [x] processing list player request from {0} ", msg["username"]); playerManagement.UpdatePetLocation(msg); List <UnityPlayerPetPosition> unityPlayerPos = playerManagement.GetOthers(msg); ListPlayerResponseJson listPlayer = new ListPlayerResponseJson(); listPlayer.unityPlayerPos = unityPlayerPos; listPlayer.type = msg["type"]; listPlayer.tileX = (int)msg["tileX"]; listPlayer.tileY = (int)msg["tileY"]; //listPlayer.id = msg["id"]; var jsonString = JsonConvert.SerializeObject(listPlayer); // send response Console.WriteLine(" [x] sending list player response to {0} ", msg["username"]); Console.WriteLine(" list player = " + jsonString); var newMessage = Encoding.UTF8.GetBytes(jsonString); channel.BasicPublish(exchange: "TheDemiteResponseExchange", routingKey: "TheDemiteResponseRoutingKey", basicProperties: null, body: newMessage); } } channel.BasicAck(ea.DeliveryTag, false); }; channel.BasicConsume(queue: queueName, autoAck: false, consumer: consumer); Console.WriteLine("Press [enter] to stop server and exit"); Console.ReadLine(); } }
static void Main(string[] args) { Console.WriteLine("Start Server"); MySQLDatabase db = new MySQLDatabase(); PlayerManagement playerManagement = new PlayerManagement(); ConnectionFactory factory = new ConnectionFactory(); //factory.HostName = "localhost"; factory.HostName = ""; factory.Port = 5672; factory.UserName = ""; factory.Password = ""; factory.VirtualHost = ""; using (var connection = factory.CreateConnection()) using (var channel = connection.CreateModel()) { // create if not exist and bind exchange and queue for request and response channel.ExchangeDeclare(exchange: "DigipetRequestExchange", type: "direct", durable: true); channel.ExchangeDeclare(exchange: "DigipetResponseExchange", type: "direct", durable: true); var queueName = channel.QueueDeclare().QueueName; channel.QueueBind(queue: queueName, exchange: "DigipetRequestExchange", routingKey: "DigipetRequestRoutingKey"); Console.WriteLine(" [*] Waiting for messages."); // create consumer and tell consumer to waiting request from requestQueue var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { // receive message from queue var body = ea.Body; var message = Encoding.UTF8.GetString(body); dynamic msg = JsonConvert.DeserializeObject(message); if (msg != null) { if (msg["type"] == "login") { Console.WriteLine(" [x] processing login request from {0} ", msg["username"]); string username = (string)msg["username"]; string password = (string)msg["password"]; int count = db.Count("user", "username='******' AND password='******' AND is_active=0"); if (count == 1) { count = db.Update("user", "is_active=1", "username='******'"); } playerManagement.AddPlayer(username); LoginResponseJson response = new LoginResponseJson(); response.id = msg["id"]; response.type = msg["type"]; response.count = count; response.username = username; response.data = db.GetPetData(username); var jsonString = JsonConvert.SerializeObject(response); //Console.WriteLine(jsonString); // send response var newMessage = Encoding.UTF8.GetBytes(jsonString); channel.BasicPublish(exchange: "DigipetResponseExchange", routingKey: "DigipetResponseRoutingKey", basicProperties: null, body: newMessage); Console.WriteLine(" [x] login response sent to {0} ", msg["username"]); } if (msg["type"] == "newaccount") { Console.WriteLine(" [x] processing new account request from {0} ", msg["username"]); string firstName = (string)msg["firstName"]; string lastName = (string)msg["lastName"]; string email = (string)msg["email"]; string username = (string)msg["username"]; string petName = (string)msg["petName"]; string password = (string)msg["password"]; NewAccountResponseJson response = new NewAccountResponseJson(); response.id = msg["id"]; response.type = msg["type"]; response.result = db.CreateNewAccount(firstName, lastName, email, username, petName, password); var jsonString = JsonConvert.SerializeObject(response); // send response var newMessage = Encoding.UTF8.GetBytes(jsonString); channel.BasicPublish(exchange: "DigipetResponseExchange", routingKey: "DigipetResponseRoutingKey", basicProperties: null, body: newMessage); Console.WriteLine(" [x] new account response sent to {0} ", msg["username"]); } if (msg["type"] == "map") { Console.WriteLine(" [x] processing map request from {0} ", msg["playerName"]); ResponseJson responseJson = new ResponseJson(); responseJson.id = msg["id"]; responseJson.type = msg["type"]; responseJson.mapData = playerManagement.AcquireMapData(msg); responseJson.needCreateMap = playerManagement.GetNeedCreateMap(); responseJson.playerName = msg["playerName"]; responseJson.playerPosX = playerManagement.GetPlayerPosX(); responseJson.playerPosY = playerManagement.GetPlayerPosY(); responseJson.centerPosX = playerManagement.GetCenterPosX(); responseJson.centerPosY = playerManagement.GetCenterPosY(); responseJson.tileX = playerManagement.GetTileX(); responseJson.tileY = playerManagement.GetTileY(); var jsonString = JsonConvert.SerializeObject(responseJson); // send response var newMessage = Encoding.UTF8.GetBytes(jsonString); channel.BasicPublish(exchange: "DigipetResponseExchange", routingKey: "DigipetResponseRoutingKey", basicProperties: null, body: newMessage); Console.WriteLine(" [x] map response sent to {0} ", msg["playerName"]); // send update to other user that user change position List <UnityPlayerPetPosition> unityPlayerPos = playerManagement.GetOthers(playerManagement.GetTileX(), playerManagement.GetTileY()); UnityPlayerPetPosition curPlayer = unityPlayerPos.Find(x => x.playerName == (string)msg["playerName"]); curPlayer.petLastPosX += playerManagement.GetCenterPosX(); curPlayer.petLastPosY += playerManagement.GetCenterPosY(); curPlayer.petPosX += playerManagement.GetCenterPosX(); curPlayer.petPosY += playerManagement.GetCenterPosY(); ListPlayerResponseJson listPlayer = new ListPlayerResponseJson(); listPlayer.unityPlayerPos = unityPlayerPos; listPlayer.type = "listplayer"; listPlayer.tileX = playerManagement.GetTileX(); listPlayer.tileY = playerManagement.GetTileY(); var jsonString2 = JsonConvert.SerializeObject(listPlayer); // send response //Console.WriteLine(" list player2 = " + jsonString2); var newMessage2 = Encoding.UTF8.GetBytes(jsonString2); channel.BasicPublish(exchange: "DigipetResponseExchange", routingKey: "DigipetResponseRoutingKey", basicProperties: null, body: newMessage2); } if (msg["type"] == "maptohome") { Console.WriteLine(" [x] processing maptohome request from {0} ", msg["id"]); int result = playerManagement.SetPlayerActiveFalse((string)msg["username"], false); // send update to other user that user return home List <UnityPlayerPetPosition> unityPlayerPos = playerManagement.GetOthers((int)msg["tileX"], (int)msg["tileY"]); ListPlayerResponseJson listPlayer = new ListPlayerResponseJson(); listPlayer.unityPlayerPos = unityPlayerPos; listPlayer.type = "listplayer"; listPlayer.tileX = (int)msg["tileX"]; listPlayer.tileY = (int)msg["tileY"]; var jsonString2 = JsonConvert.SerializeObject(listPlayer); // send response //Console.WriteLine(" list player2 = " + jsonString2); var newMessage2 = Encoding.UTF8.GetBytes(jsonString2); channel.BasicPublish(exchange: "DigipetResponseExchange", routingKey: "DigipetResponseRoutingKey", basicProperties: null, body: newMessage2); // map to home response PauseRespondJson respond = new PauseRespondJson(); respond.id = msg["id"]; respond.type = msg["type"]; respond.result = result; var jsonString = JsonConvert.SerializeObject(respond); // send response var newMessage = Encoding.UTF8.GetBytes(jsonString); channel.BasicPublish(exchange: "DigipetResponseExchange", routingKey: "DigipetResponseRoutingKey", basicProperties: null, body: newMessage); Console.WriteLine(" [x] maptohome response sent to {0} ", msg["id"]); } if (msg["type"] == "route") { Console.WriteLine(" [x] processing route request from {0} ", msg["id"]); List <Coordinate> route = playerManagement.PlayerRouting(msg); RouteResponseJson routeResponseJson = new RouteResponseJson(); routeResponseJson.route = route; routeResponseJson.type = msg["type"]; routeResponseJson.id = msg["id"]; var jsonString = JsonConvert.SerializeObject(routeResponseJson); // send response var newMessage = Encoding.UTF8.GetBytes(jsonString); channel.BasicPublish(exchange: "DigipetResponseExchange", routingKey: "DigipetResponseRoutingKey", basicProperties: null, body: newMessage); Console.WriteLine(" [x] route response sent to {0} ", msg["id"]); } if (msg["type"] == "returntitle") { Console.WriteLine(" [x] processing return title request from {0} ", msg["username"]); string username = (string)msg["username"]; int rest = (int)msg["rest"]; int energy = (int)msg["energy"]; int agility = (int)msg["agility"]; int stress = (int)msg["stress"]; int heart = (int)msg["heart"]; int money = (int)msg["money"]; int xp = (int)msg["xp"]; int result = db.UpdateStatus(username, rest, energy, agility, stress, heart, money, xp); if (result == 1) { result = playerManagement.RemovePlayer(msg); } ReturnTitleRespondJson respond = new ReturnTitleRespondJson(); respond.id = msg["id"]; respond.type = msg["type"]; respond.result = result; var jsonString = JsonConvert.SerializeObject(respond); // send response var newMessage = Encoding.UTF8.GetBytes(jsonString); channel.BasicPublish(exchange: "DigipetResponseExchange", routingKey: "DigipetResponseRoutingKey", basicProperties: null, body: newMessage); Console.WriteLine(" [x] return title response sent to {0} ", msg["username"]); } if (msg["type"] == "listplayer") { Console.WriteLine(" [x] processing list player request from {0} ", msg["username"]); playerManagement.UpdatePetLocation(msg); List <UnityPlayerPetPosition> unityPlayerPos = playerManagement.GetOthers((int)msg["tileX"], (int)msg["tileY"]); ListPlayerResponseJson listPlayer = new ListPlayerResponseJson(); listPlayer.unityPlayerPos = unityPlayerPos; listPlayer.type = msg["type"]; listPlayer.tileX = (int)msg["tileX"]; listPlayer.tileY = (int)msg["tileY"]; var jsonString = JsonConvert.SerializeObject(listPlayer); // send response Console.WriteLine(" [x] sending list player response to {0} ", msg["username"]); var newMessage = Encoding.UTF8.GetBytes(jsonString); channel.BasicPublish(exchange: "DigipetResponseExchange", routingKey: "DigipetResponseRoutingKey", basicProperties: null, body: newMessage); } if (msg["type"] == "updateBall") { Console.WriteLine(" [x] processing ball state request from {0} ", msg["username"]); float[] ballPos = playerManagement.UpdateBallState(msg); UpdateBallResponse response = new UpdateBallResponse(); response.type = msg["type"]; response.username = msg["username"]; response.tileX = msg["tileX"]; response.tileY = msg["tileY"]; response.ballPosX = ballPos[0]; response.ballPosY = msg["ballPosY"]; response.ballPosZ = ballPos[1]; response.ballState = msg["ballState"]; var jsonString = JsonConvert.SerializeObject(response); Console.WriteLine(" [x] sending ball state response to {0} ", msg["username"]); var newMessage = Encoding.UTF8.GetBytes(jsonString); channel.BasicPublish(exchange: "DigipetResponseExchange", routingKey: "DigipetResponseRoutingKey", basicProperties: null, body: newMessage); } if (msg["type"] == "resetpassword") { Console.WriteLine(" [x] processing reset password request from {0} ", msg["id"]); EmailManagement emailManage = new EmailManagement(); int user_id = -1; int updateResult = -1; int result = -1; string email = (string)msg["email"]; user_id = db.FindUserIdByEmail(email); if (user_id != -1) { string newPass = emailManage.CreateRandomPassword(6); updateResult = db.Update("user", "password="******"id=" + user_id); if (updateResult != -1) { result = emailManage.SendEmail(email, newPass, 1); } } ResetPasswordJson reset = new ResetPasswordJson(); reset.id = msg["id"]; reset.type = msg["type"]; reset.result = result; var jsonString = JsonConvert.SerializeObject(reset); // send response Console.WriteLine(" [x] sending reset password response to {0} ", msg["id"]); var newMessage = Encoding.UTF8.GetBytes(jsonString); channel.BasicPublish(exchange: "DigipetResponseExchange", routingKey: "DigipetResponseRoutingKey", basicProperties: null, body: newMessage); } if (msg["type"] == "changepassword") { Console.WriteLine(" [x] processing change password request from {0} ", msg["username"]); EmailManagement emailManage = new EmailManagement(); string username = (string)msg["username"]; string oldPass = (string)msg["oldPass"]; string newPass = (string)msg["newPass"]; int result = -1; int count = db.Count("user", "username='******'"); if (count != -1) { int count2 = db.Count("user", "password="******"user", "password="******"username='******'"); if (result != -1) { string email = db.FindEmail(username); result = emailManage.SendEmail(email, "", 2); } } } ChangePasswordJson change = new ChangePasswordJson(); change.id = msg["id"]; change.type = msg["type"]; change.result = result; var jsonString = JsonConvert.SerializeObject(change); // send response Console.WriteLine(" [x] sending change password response to {0} ", msg["username"]); var newMessage = Encoding.UTF8.GetBytes(jsonString); channel.BasicPublish(exchange: "DigipetResponseExchange", routingKey: "DigipetResponseRoutingKey", basicProperties: null, body: newMessage); } if (msg["type"] == "restart") { Console.WriteLine(" [x] processing restart request from {0} ", msg["id"]); string username = (string)msg["username"]; RestartJson response = new RestartJson(); response.id = msg["id"]; response.type = msg["type"]; response.result = db.UpdateStatus(username, 100, 100, 100, 100, 6, 100, 0); var jsonString = JsonConvert.SerializeObject(response); // send response var newMessage = Encoding.UTF8.GetBytes(jsonString); channel.BasicPublish(exchange: "DigipetResponseExchange", routingKey: "DigipetResponseRoutingKey", basicProperties: null, body: newMessage); Console.WriteLine(" [x] restart response sent to {0} ", msg["id"]); } } channel.BasicAck(ea.DeliveryTag, false); }; channel.BasicConsume(queue: queueName, noAck: false, consumer: consumer); Console.WriteLine(" Press [enter] to stop server and exit."); Console.ReadLine(); } }