Ejemplo n.º 1
0
		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.");
		}
Ejemplo n.º 2
0
		//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