Exemplo n.º 1
0
        private NetMessage WhenReqDestroyCompany(ServerVisitor client, NetMessageStream msg)
        {
            string userName = msg.ReadData <string>();
            int    tileX    = msg.ReadData <int>();
            int    tileY    = msg.ReadData <int>();


            // 인증
            var user = this.UserDirector.GetLoginUser(client.ID);

            if (user != null && user.Name == userName)
            {
                user = this.UserDirector.GetAccount(user.Name);

                // 유저가 존재하고
                // 해당 타일이 존재하고
                if (user != null &&
                    this.GameBoard.Board.ContainsItemAt(tileX, tileY))
                {
                    var tile = this.GameBoard.Board.GetItemAt(tileX, tileY);

                    // 회사 타일이면
                    if (tile != null && tile.IsCompanyTile)
                    {
                        // 폐쇄
                        this.DestroyCompany(userName, tileX, tileY);
                    }
                }
            }


            return(null);
        }
Exemplo n.º 2
0
        private NetMessage WhenReqAllSellingTech(ServerVisitor client, NetMessageStream msg)
        {
            string userName = msg.ReadData <string>();


            // 인증
            var user = this.UserDirector.GetLoginUser(client.ID);

            if (user != null && user.Name == userName)
            {
                foreach (var item in m_techStore)
                {
                    // 해당 기술 구매가 허가된 유저라면
                    if (item.TargetUser.Length <= 0 ||
                        item.TargetUser == user.Name)
                    {
                        // 정보 전송
                        NetMessageStream writer = new NetMessageStream();
                        writer.WriteData(item.Seller);
                        writer.WriteData(item.Name);
                        writer.WriteData(item.Price);

                        client.Sender.SendMessage(writer.CreateMessage((int)MessageTypes.Ntf_SellTech));
                    }
                }
            }


            return(null);
        }
Exemplo n.º 3
0
        private NetMessage WhenReqAllUserInfo(ServerVisitor client, NetMessageStream msg)
        {
            var accounts = this.UserDirector.Accounts;

            if (accounts.Length > 0)
            {
                NetMessageStream writer = null;


                writer = new NetMessageStream();
                writer.WriteData(1);

                client.Sender.SendMessage(writer.CreateMessage((int)MessageTypes.Rsp_AllUserInfo));


                foreach (var account in accounts)
                {
                    writer = new NetMessageStream();
                    writer.WriteData(0);

                    writer.WriteData(account.UserColor.ToArgb());
                    writer.WriteData(account.Name);
                    writer.WriteData(account.AreaCount);
                    writer.WriteData(account.Resource);

                    writer.WriteData((account == accounts.Last()) ? 1 : 0);

                    client.Sender.SendMessage(writer.CreateMessage((int)MessageTypes.Rsp_AllUserInfo));
                }
            }


            return(null);
        }
        private NetMessage WhenReqMailbox(ServerVisitor client, NetMessageStream msg)
        {
            string userName = msg.ReadData <string>();


            // 인증
            var user = this.UserDirector.GetLoginUser(client.ID);

            if (user != null && user.Name == userName)
            {
                user = this.UserDirector.GetAccount(user.Name);

                if (user != null)
                {
                    var mailbox = user.Mailbox;

                    for (int i = mailbox.Count - 1; i >= 0; --i)
                    {
                        this.NtfReceiveMailTo(client, mailbox[i]);
                    }
                }
            }


            return(null);
        }
Exemplo n.º 5
0
        private NetMessage WhenReqLogout(ServerVisitor client, NetMessageStream msg)
        {
            this.RemoveLoginUser(client.ID);


            return(null);
        }
        private NetMessage WhenReqAttackTerritory(ServerVisitor client, NetMessageStream msg)
        {
            // 클릭속도 제한
            m_attackLimiter.Set(client.ID, GameValues.MinAttackDelay);
            if (m_attackLimiter.Tick(client.ID))
            {
                m_attackLimiter.Update(client.ID);


                string attackerName = msg.ReadData <string>();
                int    tileX        = msg.ReadData <int>();
                int    tileY        = msg.ReadData <int>();


                // 유저 인증하고
                // 해당 지역이 있으면
                var user = this.UserDirector.GetLoginUser(client.ID);
                if (user != null && user.Name == attackerName &&
                    this.GameBoard.Board.ContainsItemAt(tileX, tileY))
                {
                    // 공격/점령
                    this.AttackTerritory(attackerName, tileX, tileY, client);
                }
            }


            return(null);
        }
        private NetMessage WhenReqReadMail(ServerVisitor client, NetMessageStream msg)
        {
            string userName = msg.ReadData <string>();
            int    index    = msg.ReadData <int>();


            // 인증
            var user = this.UserDirector.GetLoginUser(client.ID);

            if (user != null && user.Name == userName)
            {
                user = this.UserDirector.GetAccount(user.Name);

                if (user != null)
                {
                    var mailbox = user.Mailbox;

                    if (index >= 0 && index < mailbox.Count)
                    {
                        mailbox[index].Read = true;
                    }
                }
            }


            return(null);
        }
        private NetMessage WhenReqBuildCountry(ServerVisitor client, NetMessageStream msg)
        {
            string userName = msg.ReadData <string>();
            int    tileX    = msg.ReadData <int>();
            int    tileY    = msg.ReadData <int>();

            const int beginningMoney = 100;


            // 로그
            Utility.Logger.GetInstance().Log(string.Format("\"{0}\"님이 건국을 요청했습니다.",
                                                           userName));


            // 유저 인증하고
            // 해당 지역이 있고
            // 유저가 아무런 땅도 가지지 않은게 맞으면
            var user = this.UserDirector.GetLoginUser(client.ID);

            if (user != null && user.Name == userName &&
                this.GameBoard.Board.ContainsItemAt(tileX, tileY) &&
                this.UserDirector.GetAccount(userName).AreaCount <= 0)
            {
                var tile = this.GameBoard.Board.GetItemAt(tileX, tileY);

                // 주인없는 땅이면
                if (tile.HaveOwner == false)
                {
                    // 건국
                    this.GameBoard.SetOwnerAt(tileX, tileY, userName);
                    this.GameBoard.SetPowerAt(tileX, tileY, beginningMoney);


                    // 계정의 영토크기 정보 갱신
                    this.UserDirector.GetAccount(userName).AreaCount = 1;


                    // 건국 알림
                    NetMessageStream writer = new NetMessageStream();
                    writer.WriteData <int>(1); // 성공여부
                    writer.WriteData(userName);
                    writer.WriteData(tileX);
                    writer.WriteData(tileY);
                    writer.WriteData(beginningMoney);

                    this.NoticeDelegate(writer.CreateMessage((int)MessageTypes.Ntf_CountryBuilt));


                    return(null);
                }
            }


            // 건국 실패 알림
            NetMessageStream failWriter = new NetMessageStream();

            failWriter.WriteData <int>(0);

            return(failWriter.CreateMessage((int)MessageTypes.Ntf_CountryBuilt));
        }
Exemplo n.º 9
0
        private NetMessage WhenReqDiscardProduct(ServerVisitor client, NetMessageStream msg)
        {
            string userName     = msg.ReadData <string>();
            string companyName  = msg.ReadData <string>().Trim();
            int    productIndex = msg.ReadData <int>();


            // 인증
            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 && productIndex < company.ProductList.Count)
                {
                    // 회사에서 제품 폐기
                    company.RemoveProductAt(productIndex);


                    // 제품 폐기 알림
                    return(this.GetDiscardProductNotice(companyName, productIndex));
                }
            }


            return(null);
        }
Exemplo n.º 10
0
        private NetMessage WhenReqMyAllCompanyName(ServerVisitor client, NetMessageStream msg)
        {
            string userName = msg.ReadString();


            // 인증
            var user = this.UserDirector.GetLoginUser(client.ID);

            if (user != null && user.Name == userName)
            {
                user = this.UserDirector.GetAccount(user.Name);

                if (user != null)
                {
                    // 회사 이름 전송
                    NetMessageStream writer = new NetMessageStream();
                    writer.WriteData(user.Companies.Count);

                    foreach (string companyName in user.Companies)
                    {
                        writer.WriteData(companyName);
                    }


                    return(writer.CreateMessage((int)MessageTypes.Rsp_MyAllCompanyName));
                }
            }


            return(null);
        }
Exemplo n.º 11
0
        //#####################################################################################
        // 수신된 메세지 처리

        private NetMessage WhenReqNotice(ServerVisitor client, NetMessageStream msg)
        {
            NetMessageStream writer = new NetMessageStream();

            writer.WriteData(this.Notice);

            return(writer.CreateMessage((int)MessageTypes.Ntf_Notice));
        }
Exemplo n.º 12
0
        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);
        }
        //#####################################################################################

        protected void NtfReceiveMailTo(ServerVisitor targetClient, Mail mail)
        {
            NetMessageStream writer = new NetMessageStream();

            writer.WriteData <int>(mail.Read ? 1 : 0);
            writer.WriteData(mail.From);
            writer.WriteData(mail.To);
            writer.WriteData(mail.SendingDate);
            writer.WriteData(mail.Message);

            targetClient.Sender.SendMessage(writer.CreateMessage((int)MessageTypes.Ntf_ReceiveMail));
        }
Exemplo n.º 14
0
        private NetMessage WhenReqTechProgram(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)
                    {
                        var program = techChip.Program;

                        // 기술 프로그램 전송
                        NetMessageStream writer = new NetMessageStream();
                        writer.WriteData(companyName);
                        writer.WriteData(techName);
                        writer.WriteData(program.Count);
                        foreach (var cmd in program)
                        {
                            cmd.WriteToStream(writer);
                        }

                        return(writer.CreateMessage((int)MessageTypes.Rsp_TechProgram));
                    }
                }
            }


            return(null);
        }
Exemplo n.º 15
0
        private NetMessage WhenReqMyAllCompanySiteCount(ServerVisitor client, NetMessageStream msg)
        {
            string userName = msg.ReadString();


            // 인증
            var user = this.UserDirector.GetLoginUser(client.ID);

            if (user != null && user.Name == userName)
            {
                user = this.UserDirector.GetAccount(user.Name);

                if (user != null)
                {
                    // 자기 회사별 건물 개수 계산
                    var wholeCompanySiteCount = this.CompanyDirector.CompanySiteCount;
                    Dictionary <string, int> myCompanySiteCount = new Dictionary <string, int>();

                    var myCompanies = user.Companies;
                    foreach (string myCompany in myCompanies)
                    {
                        if (wholeCompanySiteCount.ContainsKey(myCompany))
                        {
                            myCompanySiteCount.Add(myCompany, wholeCompanySiteCount[myCompany]);
                        }
                    }


                    // 회사별 건물 개수 전송
                    NetMessageStream writer = new NetMessageStream();
                    writer.WriteData(myCompanySiteCount.Count);

                    foreach (var company_count in myCompanySiteCount)
                    {
                        writer.WriteData(company_count.Key);
                        writer.WriteData(company_count.Value);
                    }


                    return(writer.CreateMessage((int)MessageTypes.Rsp_MyAllCompanySiteCount));
                }
            }


            return(null);
        }
Exemplo n.º 16
0
        private NetMessage WhenReqConvertAllResource(ServerVisitor client, NetMessageStream msg)
        {
            string userName = msg.ReadData <string>();
            int    tileX    = msg.ReadData <int>();
            int    tileY    = msg.ReadData <int>();


            // 인증
            var user = this.UserDirector.GetLoginUser(client.ID);

            if (user != null && user.Name == userName)
            {
                this.ConvertResource(user.Name, tileX, tileY, true);
            }


            return(null);
        }
        //#####################################################################################
        // 수신된 메세지 처리

        private NetMessage WhenReqSendMail(ServerVisitor client, NetMessageStream msg)
        {
            string userName   = msg.ReadData <string>();
            string targetName = msg.ReadData <string>();
            string date       = msg.ReadData <string>();
            string message    = msg.ReadData <string>();


            // 인증
            var user = this.UserDirector.GetLoginUser(client.ID);

            if (user != null && user.Name == userName)
            {
                var targetUser = this.UserDirector.GetAccount(targetName);

                if (targetUser != null)
                {
                    Mail mail = new Mail()
                    {
                        Read        = false,
                        From        = userName,
                        To          = targetName,
                        SendingDate = date,
                        Message     = message,
                    };

                    // 메일함에 추가
                    targetUser.Mailbox.Insert(0, mail);

                    // 메일함의 크기가 너무 크면 오래된 메일부터 지움.
                    if (targetUser.Mailbox.Count > this.MaxMailboxSize)
                    {
                        targetUser.Mailbox.RemoveRange(this.MaxMailboxSize, targetUser.Mailbox.Count - this.MaxMailboxSize);
                    }


                    // 메일 수신 알림
                    this.NtfReceiveMailTo(targetName, mail);
                }
            }


            return(null);
        }
Exemplo n.º 18
0
        private NetMessage WhenReqNewTerritory(ServerVisitor client, NetMessageStream msg)
        {
            string userName = msg.ReadData <string>();


            // 적당한 영토 고름
            int tileX, tileY;

            this.GameBoard.CreateRandomTerritory(out tileX, out tileY);


            // 영토 위치 전송
            NetMessageStream writer = new NetMessageStream();

            writer.WriteData(tileX);
            writer.WriteData(tileY);

            return(writer.CreateMessage((int)MessageTypes.Rsp_NewTerritory));
        }
Exemplo n.º 19
0
        private NetMessage WhenReqEditTileSign(ServerVisitor client, NetMessageStream msg)
        {
            string userName = msg.ReadData <string>();
            int    tileX    = msg.ReadData <int>();
            int    tileY    = msg.ReadData <int>();
            string sign     = msg.ReadData <string>();


            // 인증
            var user = this.UserDirector.GetLoginUser(client.ID);

            if (user != null && user.Name == userName)
            {
                this.EditSign(userName, tileX, tileY, sign);
            }


            return(null);
        }
Exemplo n.º 20
0
        //#####################################################################################
        // 수신된 메세지 처리

        private NetMessage WhenReqCountryLocation(ServerVisitor client, NetMessageStream msg)
        {
            string userName = msg.ReadData <string>();


            // 국가 위치 찾기
            int  x, y;
            bool exist = this.GameBoard.FindCountryLocation(userName, out x, out y);


            // 국가 위치 전송
            NetMessageStream writer = new NetMessageStream();

            writer.WriteData <int>(exist ? 1 : 0);
            writer.WriteData(x);
            writer.WriteData(y);

            return(writer.CreateMessage((int)MessageTypes.Rsp_CountryLocation));
        }
Exemplo n.º 21
0
        private NetMessage WhenReqMyAllCompanyProductList(ServerVisitor client, NetMessageStream msg)
        {
            string userName = msg.ReadString();


            // 인증
            var user = this.UserDirector.GetLoginUser(client.ID);

            if (user != null && user.Name == userName)
            {
                user = this.UserDirector.GetAccount(user.Name);

                if (user != null)
                {
                    var companies = user.Companies;


                    // 회사별 제품 정보 전송
                    NetMessageStream writer = new NetMessageStream();
                    writer.WriteData(companies.Count);

                    for (int i = 0; i < companies.Count; ++i)
                    {
                        var company     = this.CompanyDirector.FindCompanyByName(companies[i]);
                        var productList = company.ProductList;

                        writer.WriteData(companies[i]);
                        writer.WriteData(productList.Count);

                        foreach (var chip in productList)
                        {
                            writer.WriteData(chip.Name);
                        }
                    }


                    return(writer.CreateMessage((int)MessageTypes.Rsp_MyAllCompanyProductList));
                }
            }


            return(null);
        }
Exemplo n.º 22
0
        //#####################################################################################
        // 수신된 메세지 처리

        private NetMessage WhenReqUserColor(ServerVisitor client, NetMessageStream msg)
        {
            string userName = msg.ReadString();


            var user = this.UserDirector.GetAccount(userName);

            if (user != null)
            {
                NetMessageStream writer = new NetMessageStream();
                writer.WriteData(userName);
                writer.WriteData(user.UserColor.ToArgb());

                return(writer.CreateMessage((int)MessageTypes.Rsp_UserColor));
            }


            return(null);
        }
Exemplo n.º 23
0
        private NetMessage WhenReqDestroyFactory(ServerVisitor client, NetMessageStream msg)
        {
            string userName = msg.ReadData <string>();
            int    tileX    = msg.ReadData <int>();
            int    tileY    = msg.ReadData <int>();


            // 인증
            var user = this.UserDirector.GetLoginUser(client.ID);

            if (user != null && user.Name == userName)
            {
                // 해당 타일이 존재하고
                if (this.GameBoard.Board.ContainsItemAt(tileX, tileY))
                {
                    var tile = this.GameBoard.Board.GetItemAt(tileX, tileY);

                    // 타일의 주인이 맞고
                    // 공장타일이면
                    if (tile.Owner == userName &&
                        tile.IsFactoryTile)
                    {
                        // 공장 폐쇄
                        this.GameBoard.DestroyFactory(tileX, tileY);


                        // 공장 폐쇄 알림
                        NetMessageStream writer = new NetMessageStream();
                        writer.WriteData(userName);
                        writer.WriteData(tileX);
                        writer.WriteData(tileY);

                        this.NoticeToUsersInVision(writer.CreateMessage((int)MessageTypes.Ntf_DestroyFactory),
                                                   tileX, tileY);
                    }
                }
            }


            return(null);
        }
Exemplo n.º 24
0
        private NetMessage WhenReqSendPower(ServerVisitor client, NetMessageStream msg)
        {
            string userName = msg.ReadData <string>();
            int    fromX    = msg.ReadData <int>();
            int    fromY    = msg.ReadData <int>();
            int    toX      = msg.ReadData <int>();
            int    toY      = msg.ReadData <int>();


            // 인증
            var user = this.UserDirector.GetLoginUser(client.ID);

            if (user != null && user.Name == userName)
            {
                // 힘 보내기
                this.SendPower(user.Name, fromX, fromY, toX, toY);
            }


            return(null);
        }
Exemplo n.º 25
0
        private NetMessage WhenReqAddTilePower(ServerVisitor client, NetMessageStream msg)
        {
            // 클릭속도 제한
            m_addPowerLimiter.Set(client.ID, GameValues.MinAddPowerDelay);
            if (m_addPowerLimiter.Tick(client.ID))
            {
                m_addPowerLimiter.Update(client.ID);


                string    userName   = msg.ReadData <string>();
                int       tileX      = msg.ReadData <int>();
                int       tileY      = msg.ReadData <int>();
                const int deltaPower = 1;


                // 클라이언트가 userName을 변조해서 보낸것인지 확인한다음 문제없고
                // 요청받은 타일이 서버에 존재하면
                var user = this.UserDirector.GetLoginUser(client.ID);
                if (user != null && user.Name == userName &&
                    this.GameBoard.Board.ContainsItemAt(tileX, tileY))
                {
                    var tile = this.GameBoard.Board.GetItemAt(tileX, tileY);

                    // 유저의 소유 타일이 맞으면
                    if (tile.Owner == userName)
                    {
                        // GameBoard 갱신
                        this.GameBoard.AddPowerAt(tileX, tileY, deltaPower);


                        // 타일 Power 변경 통보
                        this.NtfSetPower(tileX, tileY, tile.Power);
                    }
                }
            }


            return(null);
        }
Exemplo n.º 26
0
        private NetMessage WhenReqChunk(ServerVisitor client, NetMessageStream msg)
        {
            int tileX = msg.ReadData <int>();
            int tileY = msg.ReadData <int>();


            int chunkX, chunkY;

            this.GameBoard.Board.GetChunkPosContainsItemAt(tileX, tileY, out chunkX, out chunkY);


            var chunk = this.GameBoard.Board.GetChunkContainsItemAt(tileX, tileY);

            if (chunk != null)
            {
                // 청크 데이터 얻기
                NetMessageStream writer = new NetMessageStream();

                writer.WriteData(chunkX);
                writer.WriteData(chunkY);

                for (int x = 0; x < chunk.GetLength(0); ++x)
                {
                    for (int y = 0; y < chunk.GetLength(1); ++y)
                    {
                        var tile = chunk[x, y];

                        tile.WriteToStream(writer);
                    }
                }


                // 청크 데이터 전송
                return(writer.CreateMessage((int)MessageTypes.Rsp_Chunk));
            }


            return(null);
        }
Exemplo n.º 27
0
        private NetMessage WhenReqDiscardTech(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)
                {
                    // 회사에서 기술 제거
                    company.RemoveTech(techName);


                    // 기술 폐기 알림
                    NetMessageStream writer = new NetMessageStream();
                    writer.WriteData(companyName);
                    writer.WriteData(techName);

                    return(writer.CreateMessage((int)MessageTypes.Rsp_DiscardTech));
                }
            }


            return(null);
        }
Exemplo n.º 28
0
        private NetMessage WhenReqSetScreen(ServerVisitor client, NetMessageStream msg)
        {
            string userName = msg.ReadData <string>();
            int    left     = msg.ReadData <int>();
            int    top      = msg.ReadData <int>();
            int    width    = msg.ReadData <int>();
            int    height   = msg.ReadData <int>();


            // 인증
            var user = this.UserDirector.GetLoginUser(client.ID);

            if (user != null && user.Name == userName)
            {
                Rectangle rect = new Rectangle(left, top, width, height);

                if (m_userScreen.ContainsKey(user.Name) == false)
                {
                    m_userScreen.Add(user.Name, new Rectangle(0, 0, 0, 0));
                }

                // 이전 화면영역 정보와 다르면
                if (m_userScreen[user.Name] != rect)
                {
                    // 새로 보이는 곳의 정보 전달
                    this.SyncChangedTiles(client, user.Name, rect);


                    // 갱신
                    m_userScreen[user.Name] = rect;
                }
            }


            return(null);
        }
Exemplo n.º 29
0
        private NetMessage WhenReqDestroyChip(ServerVisitor client, NetMessageStream msg)
        {
            string userName = msg.ReadData <string>();
            int    tileX    = msg.ReadData <int>();
            int    tileY    = msg.ReadData <int>();


            // 인증
            var user = this.UserDirector.GetLoginUser(client.ID);

            if (user != null && user.Name == userName)
            {
                // 해당 타일이 존재하고
                if (this.GameBoard.Board.ContainsItemAt(tileX, tileY))
                {
                    var tile = this.GameBoard.Board.GetItemAt(tileX, tileY);

                    // 타일의 주인이 맞고
                    // 칩 타일이면
                    if (tile.Owner == userName &&
                        tile.IsChipTile)
                    {
                        // 칩 제거
                        this.CompanyDirector.RemoveChip(tileX, tileY);
                        this.GameBoard.DestroyChip(tileX, tileY);


                        // 칩 제거 알림
                        this.NoticeDestroyChip(tileX, tileY);
                    }
                }
            }


            return(null);
        }
Exemplo n.º 30
0
        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);
        }