예제 #1
0
	protected override void HandleMessageRecievedEvent(MessageIRC message)
	{
		base.HandleMessageRecievedEvent(message);

		string word = message.Parameters[1];
		word = word.Substring(0, word.Length - 2);

		for (int i = 0; i < Keys.Length; i++)
		{
			int matched = WordComparator.Comparator(word, Keys[i].Key);
			if (matched > Keys[i].RevealedCount)
			{
				Keys[i].RevealedCount = matched;
				m_PendingUIUpdates.Enqueue(i);
				if (Keys[i].RevealedCount == Keys[i].Key.Length)
				{
					m_BufferedMobs.Add(ExposedMobs[i]);
					m_BufferedMobs.Add(ExposedMobs[i]);
					m_BufferedMobs.Add(ExposedMobs[i]);
					m_BufferedMobs.Add(ExposedMobs[i]);
					m_BufferedMobsName.Add(message.Parameters[0]);
					m_BufferedMobsName.Add(message.Parameters[0]);
					m_BufferedMobsName.Add(message.Parameters[0]);
					m_BufferedMobsName.Add(message.Parameters[0]);
					m_PendingReplaces.Enqueue(i);
				}
			}
		}
	}
예제 #2
0
	protected override void HandleMessageRecievedEvent(MessageIRC message)
	{
		base.HandleMessageRecievedEvent(message);

		for (int i = 0; i < m_ShownMap.Count; i++)
		{
			string param = message.Parameters[1];
			if (param.Substring(0, param.Length - 2) == m_ShownMap[i].Name)
			{
				SelectedMapName = m_ShownMap[i].Name;
				Instigator = message.Parameters[0].Substring(1);
				break;
			}
		}
	}
예제 #3
0
	protected override void HandleMessageRecievedEvent(MessageIRC message)
	{
		base.HandleMessageRecievedEvent(message);
		
		string word = message.Parameters[1];
		word = word.Substring(0, word.Length - 2);

		int matched = WordComparator.Comparator(word, m_CurrentKey.Key);
		if (matched > m_CurrentKey.RevealedCount)
		{
			m_CurrentKey.RevealedCount = matched;
			m_PendingUIUpdates.Enqueue(0);
			if (m_CurrentKey.RevealedCount == m_CurrentKey.Key.Length)
			{
				m_PendingReplaces.Enqueue(0);
				m_UpgradeLevel++;
				if (m_UpgradeLevel == 3)
				{
					m_CurrentSelectionTime = 0;
				}
			}
		}
	}
예제 #4
0
	protected virtual void HandleMessageRecievedEvent(MessageIRC message)
	{
	}
예제 #5
0
	private void HandleConnectErrorEvent(MessageIRC message)
	{
		m_MenuToShow = ConnectErrorMenu;
	}
예제 #6
0
	void HandlePrivateMessage(MessageIRC message)
	{
#if DEBUG
		string log = string.Format("Message from {0}: {1}", message.Parameters[0], message.Parameters[1]);
		Debug.Log(log);
#endif
		OnMessageRecieved(message);
	}
예제 #7
0
	void HandlePingCommand(MessageIRC message)
	{
#if DEBUG
		Debug.Log("got pinged: " + message.Parameters[0]);
#endif
		SendRawMessage("PONG :{0}", message.Parameters[0]);
	}
예제 #8
0
	internal void OnConnectError(MessageIRC message)
	{
		if (ConnectErrorEvent != null) ConnectErrorEvent(message);
	}
예제 #9
0
	internal void OnMessageRecieved(MessageIRC message)
	{
		if (MessageRecievedEvent != null) MessageRecievedEvent(message);
	}
예제 #10
0
	private void HandleData(IAsyncResult result)
	{
		if (m_TcpClient == null)
		{
			return;
		}

		int length = m_TcpClient.GetStream().EndRead(result);
		if (length == 0)
		{
			Debug.Log("Connection dropped by server");
			Disconnect(false);
			return;
		}

		int readOffset = 0;
		while (length > 0)
		{
			int messageLength = Array.IndexOf(m_ReadBuffer, (byte)'\n', readOffset, length);
			messageLength++;
			int bytesToRead = messageLength;
			if (bytesToRead == 0)
			{
				bytesToRead = m_ReadBufferLength;
			}
			bytesToRead -= readOffset;

			StringBuilder rawMessage = new StringBuilder(m_PartialMessage);
			m_PartialMessage = "";
			rawMessage.Append(m_Encoding.GetString(m_ReadBuffer, readOffset, bytesToRead));
			if (rawMessage.Length > 0)
			{
				if (messageLength == 0)
				{
					// raw message is not complete
					m_PartialMessage = rawMessage.ToString();
					break;
				}
				else
				{
					// raw message complete
					MessageIRC ircMessage = new MessageIRC(rawMessage.ToString());
					string commandToLower = ircMessage.Command.ToLower();
					if (m_CommandHandlers.ContainsKey(commandToLower))
					{
						m_CommandHandlers[commandToLower](ircMessage);
					}
					else
					{
						if (m_FirstMessage)
						{
							if (ircMessage.Parameters[0] == "*" && ircMessage.Parameters[1].Contains("Error"))
							{
								Debug.Log(string.Format("Connection error: {0}", ircMessage.Parameters[1]));
								Disconnect(true);
								OnConnectError(ircMessage);
							}
							else
							{
								Debug.Log(string.Format("Connected to TwitchTV as {0}, on {1}'s channel", Username, StreamName));
								OnConnectSuccess();
							}
							m_FirstMessage = false;
						}
						else
						{
#if DEBUG
							Debug.Log(string.Format("Unknown message: {0}", ircMessage.RawMessage));
#endif
						}
					}
				}
			}
			else
			{
				Debug.LogError("Raw message is empty");
			}

			length -= bytesToRead;
			readOffset += bytesToRead;
		}

		m_TcpClient.GetStream().BeginRead(m_ReadBuffer, 0, m_ReadBufferLength, new AsyncCallback(HandleData), null);
	}