public NetMessage GetNoticeDevelopTech(string buyerName, string techName, DevelopTechResults result) { NetMessageStream addTechMsg = new NetMessageStream(); addTechMsg.WriteData(buyerName); addTechMsg.WriteData(techName); addTechMsg.WriteData((int)result); return(addTechMsg.CreateMessage((int)MessageTypes.Rsp_DevelopTech)); }
private NetMessage WhenReqDevelopTech(ServerVisitor client, NetMessageStream msg) { string userName = msg.ReadData <string>(); string companyName = msg.ReadData <string>().Trim(); string techName = msg.ReadData <string>().Trim(); int programSize = msg.ReadData <int>(); List <Command> program = new List <Command>(); for (int i = 0; i < programSize; ++i) { Command cmd = new Command(); cmd.ReadFromStream(msg); program.Add(cmd); } DevelopTechResults result = DevelopTechResults.Fail; // 인증 var user = this.UserDirector.GetLoginUser(client.ID); if (user != null && user.Name == userName) { user = this.UserDirector.GetAccount(user.Name); var company = this.FindCompanyByName(companyName); int devFee = program.Count * GameValues.DevFeePerProgramLine; int maxTechCount = this.GetCompanySiteCount(companyName) * GameValues.CompanyTechSizePerSite; // 유저가 존재하고 // 존재하는 회사가 유저의 소유이고 // 여유공간이 있고 // 기술 이름이 유효하고 // 개발비가 있으면 // 해당 계정이 없으면 실패 if (user == null) { result = DevelopTechResults.Fail_Unauthorized; } // 해당 회사가 없거나 자신의 소유가 아니면 실패 else if (company == null || company.Owner != user.Name) { result = DevelopTechResults.Fail_CompanyNotExist; } // 해당 회사의 여유공간이 부족하면 실패 else if (company.TechList.Count >= maxTechCount) { result = DevelopTechResults.Fail_NotEnoughClearance; } // 이름이 유효하지 않으면 실패 else if (techName.Length <= 0) { result = DevelopTechResults.Fail_InvalidName; } // 개발비가 없으면 실패 else if (user.Resource < devFee) { result = DevelopTechResults.Fail_NotEnoughResource; } else { Chip newChip = new Chip(); newChip.Name = techName; newChip.Program = program; // 기술 이름이 중복되지 않으면 if (company.CheckTechOverlap(newChip) == false) { // 개발비 차감 user.Resource -= devFee; // 회사에 기술 추가 company.AddTech(newChip); // 개발 성공 result = DevelopTechResults.Success; } else { // 이름이 중복되면 실패 result = DevelopTechResults.Fail_AlreadyExist; } } } else { // 클라이언트 이름이 올바르지 않으면 실패 result = DevelopTechResults.Fail_Unauthorized; } // 개발 성공 알림 NetMessageStream writer = new NetMessageStream(); writer.WriteData(companyName); writer.WriteData(techName); writer.WriteData((int)result); return(this.GetNoticeDevelopTech(companyName, techName, result)); }