Kom ihåg mig?
Home Menu

Menu


Det skummaste problemet jag någonsin stött på (C#)

 
Ämnesverktyg Visningsalternativ
Oläst 2012-09-26, 00:38 #1
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Vad kör du för projekttyp?
Conny Westh är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-09-26, 00:52 #2
yakuzaemmes avatar
yakuzaemme yakuzaemme är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2012
Inlägg: 773
yakuzaemme yakuzaemme är inte uppkopplad
Mycket flitig postare
yakuzaemmes avatar
 
Reg.datum: Jun 2012
Inlägg: 773
Citat:
Ursprungligen postat av ConnyWesth Visa inlägg
Vad kör du för projekttyp?
Hur menar du?
yakuzaemme är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-09-26, 01:34 #3
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Citat:
Ursprungligen postat av yakuzaemme Visa inlägg
Hur menar du?
Kör du webforms, Winforms, Console application, eller någon annan variant, det finns ju en uppsjö av varianter att välja på....
Conny Westh är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-09-26, 02:02 #4
yakuzaemmes avatar
yakuzaemme yakuzaemme är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2012
Inlägg: 773
yakuzaemme yakuzaemme är inte uppkopplad
Mycket flitig postare
yakuzaemmes avatar
 
Reg.datum: Jun 2012
Inlägg: 773
Citat:
Ursprungligen postat av ConnyWesth Visa inlägg
Kör du webforms, Winforms, Console application, eller någon annan variant, det finns ju en uppsjö av varianter att välja på....
Jasså, du menade så. Basen för spelservern är Console Application givetvis, och så launchar jag en WinForm som fungerar som kontrollpanel.

Socketsystemet & authservern skriven i ren C#, dekrypterar auth-datan och skickar vidare till spelservern. Verkar få samma data (förutom id och så) från authdelen, så den verkar vara bra.

Socketsystemet lyssnar av på authportarna, hanterar onConnect och onReceive.

Dekrypterar auth-paketet (se kod nedan) och gör kontroller om allt verkar som det ska. Allt detta verkar fungera felfritt och det skickas vidare till spelservern.

Kod:
public void Decrypt(Byte[] rgb)
        {
            if (rgb == null)
                throw new NullReferenceException("Buffer can't be null!");

            Int16 K = COSAC_IV / 2;
            if (m_BufKey != null)
                K = COSAC_KEY / 2;

            for (Int32 i = 0; i < rgb.Length; i++)
            {
                rgb[i] ^= (Byte)0xAB;
                rgb[i] = (Byte)(rgb[i] >> 4 | rgb[i] << 4);
                if (m_BufKey != null)
                {
                    rgb[i] ^= (Byte)(m_BufKey[(Byte)(DecryptCounter & 0xFF) + 0]);
                    rgb[i] ^= (Byte)(m_BufKey[(Byte)(DecryptCounter >> 8) + K]);
                }
                else if (m_BufIV != null)
                {
                    rgb[i] ^= (Byte)(m_BufIV[(Byte)(DecryptCounter & 0xFF) + 0]);
                    rgb[i] ^= (Byte)(m_BufIV[(Byte)(DecryptCounter >> 8) + K]);
                }
                DecryptCounter++;
            }
        }

Skickar senare somsagt vidare till spelservern, lyssnar av vilka paket som kommer från klient>server, lägger till dem i kö för den rätta användaren och så låter jag pakethanteraren ta hand om det. Båda klienterna loggas in normalt, men när någon av dem skickar ett nytt paket (klient>server), som servern ska hantera och styra vad klienten ska göra (exempelvis röra sig, attackera, skriva eller dylikt) så händer detta på alla klienter.

Kod:
public static void OnPlayerReceive()
        {
            foreach (Connection con in Program.GameConnections.Values)
            {
                con.DoQueueSend();

                Byte[] mData;
                if (con.ReceiveQueue.TryDequeue(out mData))
                {
                    Program.Tasks.StartNew(()
                        => Packets.Delegates.PacketHandles[BitConverter.ToUInt16(mData, 2)](mData, con));
                }
            }
        }

Här verkar det strula. Om jag kompilerar i VS Express 2010 så skickas paket ut till alla klienter anslutna, om jag kompilerar i VS Express 2012 så sker allt rätt till, dvs. att rätt paket går till rätt klient.


VS 2010 (Express) körs på .NET Framework 4.0, precis som VS 2012. Använder multithreading över hela spelservern, mycket LINQ i pakethanterar-delen.

Senast redigerad av yakuzaemme den 2012-09-26 klockan 02:11
yakuzaemme är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 08:45.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017