Esempio n. 1
0
		public static Item Create(ItemStub itemStub, Controller parent, int serverRequestIndex, bool fromGuestRefresh, int instance)
		{
			ItemType type = itemStub.type;
			Item item;
			
			if (type == ItemType.LoginAlert)
				item = new Login((AlertStub)itemStub, parent, serverRequestIndex);
			else if (type == ItemType.LogoutAlert)
				item = new Logout((AlertStub)itemStub, parent, serverRequestIndex);
			else if (type == ItemType.LaughAlert)
				item = new Laugh((LaughStub)itemStub, parent, serverRequestIndex);
			else if (type == ItemType.PrivateChatMessage)
				item = new Private((PrivateStub)itemStub, parent, serverRequestIndex);
			else if (type == ItemType.CommentChatMessage)
				item = new CommentMessage((CommentMessageStub)itemStub, parent, serverRequestIndex);
			else if (type == ItemType.PublicChatMessage)
				item = new Message((MessageStub)itemStub, parent, serverRequestIndex);
			else if (type == ItemType.PhotoAlert)
				item = new Photo((PhotoStub)itemStub, parent, serverRequestIndex);
			else if (type == ItemType.TopPhoto)
				item = new TopPhoto((TopPhotoStub)itemStub, parent);
			else
				item = new Item(itemStub, parent);

			item.Instance = instance;
			item.ServerRequestIndex = serverRequestIndex;
			item.FromGuestRefresh = fromGuestRefresh;

			return item;
		}
Esempio n. 2
0
		public bool AddItem(Item item, Dictionary itemTracker)
		{
			if (Guest && !item.FromGuestRefresh)
				return false;

			if (!Guest && !Pinned)
				return false;

			LatestItem = item.Guid;

			if (item is HtmlItem)
			{
				latestHtmlItem = (HtmlItem)item;

				if (!isStreamRoom)
				{
					if (item is Newable)
						needsNewStatusUpdate = true;

					if (item.ServerRequestIndex > 0)
					{
						if (item is Newable)
							((Newable)item).IsInNewSection = true;
					}
				}
				else
				{
					if (item is Newable)
						((Newable)item).IsInNewSection = false;
				}


				if (!onlyRenderItemsWhenSelected)
				{
					renderItemToHtmlNow((HtmlItem)item, true);
				}

				if (itemTracker != null)
				{
					if (itemTracker[Guid] == null)
						itemTracker[Guid] = new Array();

					HtmlItem[] roomTracker = (HtmlItem[])itemTracker[Guid];
					roomTracker[roomTracker.Length] = (HtmlItem)item;
				}

				if (hideMoreInfoOnNextReceivedItem && MoreInfoVisible)
					HideMoreInfo(false);
			}
			else if (item is TopPhoto)
			{
				hasTopPhoto = true;
				topPhoto = (TopPhoto)item;
				updateUI();
			}

			Items[Items.Length] = item;

			return true;
		}
Esempio n. 3
0
		void initialise()
		{
			if (View.InitGo.Value == "0")
				return;

			serverTicksAtPageLoad = getRelevantDigits(View.InitLastActionTicks.Value);
			clientTicksAtPageLoad = getRelevantDigits(new DateTime().GetTime().ToString());

			StreamList = View.StreamList;
			Instance = this;
			UsrK = int.ParseInvariant(View.InitUsrK.Value);
			LoggedIn = UsrK > 0;
			ClientID = View.InitClientID.Value;
			LastActionTicks = View.InitLastActionTicks.Value;
			SessionID = Math.Round(Math.Random() * 10000);
			SystemMessagesRoomGuid = View.InitSystemMessagesRoomGuid.Value;
			InboxUpdatesRoomGuid = View.InitInboxUpdatesRoomGuid.Value;
			BuddyStreamRoomGuid = View.InitBuddyStreamRoomGuid.Value;
			PublicStreamRoomGuid = "ARAFAAAAAAUAAAAANdfH9w";
			PrivateChatRequestsRoomGuid = "ARIFAAAAAAUAAAAAO3ZY0A";
			lastKeyDown = -1;
			chatClientIsPaused = false;
			State = new StateStub[0];
			RoomsListOrder = new Array();
			Popups = new PopupArea(View);

			#region Add dom events
			DomEvent.AddHandler(View.TextBox, "focus", new DomEventHandler(textBoxFocus));
			DomEvent.AddHandler(View.TextBox, "blur", new DomEventHandler(textBoxBlur));
			DomEvent.AddHandler(View.TextBox, "keypress", new DomEventHandler(textBoxKeyPress));
			DomEvent.AddHandler(View.TextBox, "keydown", new DomEventHandler(textBoxKeyDown));
			DomEvent.AddHandler(View.OuterMain, "keydown", new DomEventHandler(outerKeyDown));
			DomEvent.AddHandler(View.RoomsMain, "click", new DomEventHandler(roomListClick));
			DomEvent.AddHandler(View.RoomsMain, "mousedown", new DomEventHandler(roomListMouseDown));
			if (LoggedIn)
			{
				DomEvent.AddHandler(View.PrivateChatDrop, "change", new DomEventHandler(privateChatDropChange));
			}
			DomEvent.AddHandler(View.WrongSessionResumeLink, "click", new DomEventHandler(resumeLinkClick));
			DomEvent.AddHandler(View.TimeoutResumeLink, "click", new DomEventHandler(resumeLinkClick));
			DomEvent.AddHandler(View.DeleteArchiveAnchor, "click", new DomEventHandler(deleteArchive));
			#endregion

			#region Create rooms
			Rooms = new Dictionary();
			selectedRoomGuid = "";
			for (int i = 0; i < View.RoomList.ChildNodes.Length + View.RoomPrivateList.ChildNodes.Length + View.RoomGuestList.ChildNodes.Length; i++)
			{
				DOMElement child = null;
				if (i < View.RoomList.ChildNodes.Length)
					child = View.RoomList.ChildNodes[i];
				else if (i < View.RoomList.ChildNodes.Length + View.RoomPrivateList.ChildNodes.Length)
					child = View.RoomPrivateList.ChildNodes[i - View.RoomList.ChildNodes.Length];
				else
					child = View.RoomGuestList.ChildNodes[i - View.RoomList.ChildNodes.Length - View.RoomPrivateList.ChildNodes.Length];

				if (child.NodeType == DOMElementType.Element && child.ClassName.StartsWith("ChatClientRoomHolder"))
				{
					Room r = new Room(this, View);
					r.InitialiseFromElement(child, State);
					initialiseRoomEvents(r);

					if (r.Selected)
					{
						if (selectedRoomGuid.Length > 0)
							r.Selected = false;
						else
							selectedRoomGuid = r.Guid;
					}

					Rooms[r.Guid] = r;
					RoomsListOrder[RoomsListOrder.Length] = r.Guid;
					r.SetListOrder(RoomsListOrder.Length - 1);
				}
			}
			#endregion

			#region LatestTopPhoto
			if (View.InitTopPhoto.Value.Length > 0 && Rooms["AQEFAAAAAAUAAAAAvVaVmQ"] != null)
			{
				string[] topPhotoParts = View.InitTopPhoto.Value.Split(',');
				TopPhoto p = new TopPhoto(
					new TopPhotoStub(
						"", 
						ItemType.TopPhoto, 
						"", 
						"AQEFAAAAAAUAAAAAvVaVmQ",
						int.ParseInvariant(topPhotoParts[0]),
						topPhotoParts[1],
						topPhotoParts[2],
						topPhotoParts[3],
						int.ParseInvariant(topPhotoParts[4]),
						int.ParseInvariant(topPhotoParts[5]),
						topPhotoParts[6],
						int.ParseInvariant(topPhotoParts[7]),
						int.ParseInvariant(topPhotoParts[8])),
					this);
				((Room)Rooms["AQEFAAAAAAUAAAAAvVaVmQ"]).AddItem(p, null);
			}
			#endregion

			updateDraggable();

			#region Initialise server
			Server = new ServerClass(this, SessionID, LastActionTicks, State);
			Server.GotItems = new EventHandler(gotItems);
			Server.GotNoItems = new EventHandler(gotNoItems);
			Server.GotWrongSessionException = new EventHandler(gotWrongSessionException);
			Server.GotTimeoutException = new EventHandler(gotTimeoutException);
			Server.GotGenericException = new EventHandler(gotGenericException);
			Server.GotRoom = new GotRoomHandler(gotRoom);
			Server.GotNewPhotoRoom = new GotRoomHandler(gotNewPhotoRoom);
			Server.GotRoomState = new EventHandler(gotRoomState);
			Server.ShowLoadingIcon = new EventHandler(showLoadingIcon);
			Server.HideLoadingIcon = new EventHandler(hideLoadingIcon);
			Server.GotMoreInfo = new EventHandler(gotRoomMoreInfoHtml);
			Server.GotArchiveItems = new EventHandler(gotRoomArchiveItems);
			Server.DebugPrint = new EventHandler(debugEventHandler);
			Server.DoneDeleteArchive = new EventHandler(doneDeleteArchive);
			Server.Start();
			#endregion

			if (selectedRoomGuid.Length == 0 && RoomsListOrder.Length > 0)
				SelectedRoom = (Room)Rooms[(string)RoomsListOrder[0]];

			debug("Controller started successfully.");

			
		}