private NetMessage WhenReqProduceProduct(ServerVisitor client, NetMessageStream msg) { string userName = msg.ReadData <string>(); string companyName = msg.ReadData <string>().Trim(); string techName = msg.ReadData <string>().Trim(); // 인증 var user = this.UserDirector.GetLoginUser(client.ID); if (user != null && user.Name == userName) { user = this.UserDirector.GetAccount(user.Name); var company = this.FindCompanyByName(companyName); // 유저가 존재하고 // 존재하는 회사가 유저의 소유이고 // 기술 이름이 유효하고 if (user != null && company != null && company.Owner == user.Name && techName.Length > 0) { Chip techChip = company.GetTech(techName); if (techChip != null) { int produceFee = techChip.Program.Count * GameValues.ProduceFeePerProgramLine; int maxProductCount = this.GetCompanySiteCount(companyName) * GameValues.CompanyProductSizePerSite; // 생산비가 충분하고 // 여유공간이 있으면 if (user.Resource >= produceFee && company.ProductList.Count < maxProductCount) { // 생산비 차감 user.Resource -= produceFee; // 회사 창고에 생산품 추가 company.AddProduct(techChip.Clone()); // 생산 알림 NetMessageStream writer = new NetMessageStream(); writer.WriteData(companyName); writer.WriteData(techName); return(writer.CreateMessage((int)MessageTypes.Rsp_ProduceProduct)); } } } } return(null); }
private NetMessage WhenReqSellTech(ServerVisitor client, NetMessageStream msg) { string userName = msg.ReadData <string>(); string companyName = msg.ReadData <string>().Trim(); string techName = msg.ReadData <string>().Trim(); int price = msg.ReadData <int>(); string targetUser = msg.ReadData <string>(); // 인증 var user = this.UserDirector.GetLoginUser(client.ID); if (user != null && user.Name == userName) { user = this.UserDirector.GetAccount(user.Name); var company = this.FindCompanyByName(companyName); // 유저가 존재하고 // 존재하는 회사가 유저의 소유이고 // 기술 이름이 유효하고 if (user != null && company != null && company.Owner == user.Name && techName.Length > 0) { Chip techChip = company.GetTech(techName); // 해당 기술이 회사에 존재하면 if (techChip != null) { // 판매 허가 및 기술 상점에 추가 SellingTech sellingTech = new SellingTech() { Name = techChip.Name, Price = price, Seller = company.Name, TargetUser = targetUser, Item = techChip.Clone(), }; m_techStore.Add(sellingTech); // 기술 판매 알림 NetMessageStream writer = new NetMessageStream(); writer.WriteData(company.Name); writer.WriteData(techChip.Name); writer.WriteData(price); // 따로 허가된 유저가 있으면 if (targetUser.Length > 0) { // 판매자와 그 유저에게만 알림 this.NoticeWhereDelegate(new string[] { targetUser, user.Name }, writer.CreateMessage((int)MessageTypes.Ntf_SellTech)); } else { // 전체공개이면 그냥 모두에게 알림 this.NoticeDelegate(writer.CreateMessage((int)MessageTypes.Ntf_SellTech)); } } } } return(null); }
private NetMessage WhenReqSellProduct(ServerVisitor client, NetMessageStream msg) { string userName = msg.ReadData <string>(); string companyName = msg.ReadData <string>().Trim(); int productIndex = msg.ReadData <int>(); int price = msg.ReadData <int>(); string targetUser = msg.ReadData <string>(); // 인증 var user = this.UserDirector.GetLoginUser(client.ID); if (user != null && user.Name == userName) { user = this.UserDirector.GetAccount(user.Name); var company = this.FindCompanyByName(companyName); // 유저가 존재하고 // 존재하는 회사가 유저의 소유이고 // 제품 번호가 유효하고 if (user != null && company != null && company.Owner == user.Name && productIndex >= 0) { Chip productChip = company.GetProductAt(productIndex); // 해당 제품이 회사에 존재하면 if (productChip != null) { // 판매 허가 및 제품 상점에 추가 SellingTech sellingProduct = new SellingTech() { Name = productChip.Name, Price = price, Seller = company.Name, TargetUser = targetUser, Item = productChip.Clone(), }; m_productStore.Add(sellingProduct); // 회사의 창고에서 제거 client.Sender.SendMessage(GetDiscardProductNotice(company.Name, productIndex)); // 제품 판매 알림 NetMessageStream writer = new NetMessageStream(); writer.WriteData(company.Name); writer.WriteData(productChip.Name); writer.WriteData(price); // 따로 허가된 유저가 있으면 if (targetUser.Length > 0) { // 판매자와 그 유저에게만 알림 this.NoticeWhereDelegate(new string[] { targetUser, user.Name }, writer.CreateMessage((int)MessageTypes.Ntf_SellProduct)); } else { // 전체공개이면 그냥 모두에게 알림 this.NoticeDelegate(writer.CreateMessage((int)MessageTypes.Ntf_SellProduct)); } } } } return(null); }