public void Init() { bShuttingDown=false; iTickShutdown=0; iTicksToShutdown=10000; packetCorrupt = new Packet(); packetServerShutdown=new Packet(); //packetLogin=new Packet(); packetTemp = new Packet(); packetCorrupt.iTokenNum = PacketToken.Hidden; packetCorrupt.iType = PacketType.ServerMessage; packetCorrupt.Set(0,"An packet corruption has been detected by the server. Try logging in again."); packetServerShutdown.iType = PacketType.ServerMessage; packetServerShutdown.iTokenNum=PacketToken.Hidden; packetServerShutdown.iTickSent = PlatformNow.TickCount; packetServerShutdown.Set(0,"Server is Shutting down!"); packetServerShutdown.sFrom="Server"; //init other objects now that special Packets are ready to use: try { packetqIn = new PacketQ(); accountant = new Accountant(); packetqarr = new PacketQ[Accountant.MaxUsers]; coreInServer = new Core(); deltsPacketer = new ThreadStart(Packeting); tPacketer = new Thread(deltsPacketer); //Thread tPacketer = new Thread(new ThreadStart(Server())); tPacketer.Start(); coreInServer.Start(); } catch (Exception exn) { RReporting.ShowExn(exn,"Packeter Init","starting Server packeter object"); } RReporting.WriteLine("Server packeter initialized."); }
//private void Lockout() { // for (int i=0; i<iUsers; i++) { // if (packetqOut[i]!=null) packetqOut[i].Enq(packetCorrupt); // } // iTickLockout=Environment.iTickCount; // bLockout=true; // return; //} private void RunLoginPacket(ref Packet packetLogin, ref Packet packetNow) { int iTokenNow=0; bool bGood=true; if (packetNow==null) { RReporting.ShowErr("got a null packet","RunLoginPacket"); return; } try { iTokenNow=packetNow.iTokenNum; } catch (Exception exn) { RReporting.ShowExn(exn,"RunLoginPacket","reading a bad packet reference"); return; } try { if (packetLogin==null) packetLogin=new Packet(); else { try { packetLogin.Reset(); } catch (Exception exn) { RReporting.ShowExn(exn,"RunLoginPacket","resetting packet (creating new instead)"); packetLogin=new Packet(); } } try { packetLogin.Reset(); //debug performance, not needed } catch (Exception exn) { RReporting.ShowExn(exn,"RunLoginPacket","accessing new packet"); } string sName=packetNow.sFrom;//packetNow.vsData.GetForcedString(0); string sPwd=packetNow.GetForcedString(0);//(1); string sMsg=""; try { iTokenNow = accountant.Login(sName, sPwd, out sMsg); } catch (Exception exn) { bGood=false; RReporting.ShowExn(exn,"RunLoginPacket","accessing accountant after packetLogin creation"); } //TODO: show sMsg somewhere somehow now //(packetLogin's type etc will be changed by GetLoginConfirmation below): packetLogin.iType=PacketType.ServerMessage; if (iTokenNow == PacketToken.NoLogin) { packetLogin.Set(0,"Couldn't login to server"); if (sMsg!="") packetLogin.Set(0,packetLogin.GetForcedString(0)+": "+sMsg); else packetLogin.Set(0,packetLogin.GetForcedString(0)+"."); } else if (iTokenNow == PacketToken.Invalid) { packetLogin.Set(0,"Server couldn't process the login."); } else if (packetqarr==null) { //accountant.Logout(sName); //debug NYI add this line and create this method packetLogin.Set(0,"The Server's queues were not initialized correctly."); } else if (packetqarr[iTokenNow]!=null) { packetLogin.Set(0,"Your queue on the server was in use and so it could not initialize."); } else { accountant.GetLoginConfirmation(ref packetLogin, iTokenNow); if (packetLogin.iType==PacketType.LoginConfirmation) { try { packetqarr[iTokenNow]=new PacketQ();//debug CRASH if doesn't have to be initialized separately from packetqarr } catch (Exception exn) { packetLogin.Reset(); packetLogin.iType=PacketType.ServerMessage; packetLogin.sFrom="Server"; packetLogin.Set(0,"Exception error on server; couldn't complete the login because failed to access the packetqarr."); RReporting.ShowExn(exn,"packeter RunLoginPacket","accessing packetqarr"); } } else { packetLogin.Reset(); packetLogin.iType=PacketType.ServerMessage; packetLogin.sFrom="Server"; packetLogin.Set(0,"Server couldn't complete the login."); } } packetLogin.iTokenNum=iTokenNow; } catch (Exception exn) { RReporting.ShowExn(exn,"RunLoginPacket","processing login request"); } return; }//end RunLoginPacket