コード例 #1
0
ファイル: core_ison.cpp プロジェクト: Canternet/inspircd
/** Handle /ISON
 */
CmdResult CommandIson::Handle (const std::vector<std::string>& parameters, User *user)
{
	std::string reply = "303 " + user->nick + " :";
	const std::string::size_type pos = reply.size();

	for (std::vector<std::string>::const_iterator i = parameters.begin(); i != parameters.end(); ++i)
	{
		const std::string& targetstr = *i;

		User* const u = ServerInstance->FindNickOnly(targetstr);
		if (!AddNick(user, u, reply, pos))
		{
			if ((i == parameters.end() - 1) && (targetstr.find(' ') != std::string::npos))
			{
				/* Its a space seperated list of nicks (RFC1459 says to support this)
				 */
				irc::spacesepstream list(targetstr);
				std::string item;

				while (list.GetToken(item))
					AddNick(user, ServerInstance->FindNickOnly(item), reply, pos);
			}
		}
	}

	user->WriteServ(reply);
	return CMD_SUCCESS;
}
コード例 #2
0
ファイル: server.cpp プロジェクト: desiv/Chat-Yell
void sSocket::ParseData(int bytes)
{
	Reader.Reset();

	while(Reader.GetOffset() < bytes)
	{
		int opcode = Reader.ReadWord();

		switch(opcode)
		{
		case C_MESSAGE:
				SendToAll(bytes);
				break;

		//case C_REQ_NICK_LIST:
		//		Writer.WriteWord(S_SEND_NICK_LIST);
		//			Writer.WriteByte(TotalMembers); //how many members
		//		for(int x = 0; x < 20; x++)
		//		{
		//			if(NickPar[x].nick_size > 0)
		//			{
		//				Writer.WriteByte(NickPar[x].nick_size);	//nick size
		//				Writer.WriteString((unsigned char*)NickPar[x].nick, NickPar[x].nick_size);	//nick
		//			}
		//		}
		//		Send((char*)Writer.Buffer, Writer.offset);
		//		break;

		case C_WHO_I_AM:	//client told us who he is:
			unsigned int size = Reader.ReadByte(); //size
			unsigned char *nick;
			nick = new unsigned char[size];
			Reader.ReadString(nick, size);	//get nick

			//add to the list
			if(FindNick((char*)nick, size) == -1) //there's no nick
				AddNick((char*)nick, size);

			else	//send that nick already exists
			{
				Writer.WriteWord(S_NICK_EXISTS);
				Send((char*)Writer.Buffer, Writer.offset);
				//now client should close the connection...
				break;
			}

			//notice all
			SendToAllNotice((char*)nick, size, 0);
			SendNickList();
			break;
			}
		}
}
コード例 #3
0
ファイル: Chan.cpp プロジェクト: jimloco/znc
int CChan::AddNicks(const CString& sNicks) {
	int iRet = 0;
	VCString vsNicks;
	VCString::iterator it;

	sNicks.Split(" ", vsNicks, false);

	for (it = vsNicks.begin(); it != vsNicks.end(); ++it) {
		if (AddNick(*it)) {
			iRet++;
		}
	}

	return iRet;
}
コード例 #4
0
ファイル: client.cpp プロジェクト: desiv/Chat-Yell
void Socket::ParseData(int bytes)
{
	Reader.Reset();
	

	while(Reader.GetOffset() < bytes)
	{
		unsigned short opcode = Reader.ReadWord();

		switch(opcode)
		{
		case C_MESSAGE: //text message
				{
					unsigned char *msg;
					unsigned char *nick;

					unsigned short size_nick = Reader.ReadByte();	//read nick
					nick = new unsigned char[size_nick];

					Reader.ReadString(nick, size_nick);	//read nick string

					unsigned short size_text = Reader.ReadByte();	//read text size
					msg = new unsigned char[size_text];

					Reader.ReadString(msg, size_text);	//read text

					ShowMessage((char*)msg, size_text, (char*)nick, size_nick);

					delete [] nick;
					delete [] msg;
					break;
				}

		case C_CONNECT:	//connected
			{
				unsigned char *nick;
				unsigned short size = Reader.ReadByte();
				
				nick = new unsigned char[size];
				
				Reader.ReadString(nick, size);

				MemberNotice((char*)nick, size, 0);	//notice everyone
				//AddNick((char*)nick, size);

				delete [] nick;
				break;
			}

		case C_DISCONNECT:	//disconnected
			{
				unsigned char *nick;
				unsigned short size = Reader.ReadByte();

				nick = new unsigned char[size];
				
				Reader.ReadString(nick, size);

				MemberNotice((char*)nick, size, 1);
				delete [] nick;
				break;
			}

		case S_SEND_NICK_LIST:	//got from server
			{
				for(int x = 0; x < 20; x++)	//delete old list
					ZeroMemory(&NickPar[x], sizeof(Nick));	

				for(int x = 0; x < 20; x++)	//delete nick list
					SendMessage(NickList, LB_DELETESTRING, 0, 0);


				int TotalMembers = Reader.ReadByte(); //get total members
				cur_chatters = TotalMembers; //used for deleting list

				for(int x = 0; x < TotalMembers; x++)
				{
					unsigned int size = Reader.ReadByte(); //get size
					unsigned char *nick;
					nick = new unsigned char[size];
					Reader.ReadString(nick, size); //get nick

					if(FindNick((char*)nick, size) > -1)
					{
						//nick found do nothing...
					}
					else
					{
						AddNick((char*)nick, size);
						UpdateWindow(NickList);
					}
				}
				break;
			}

		case S_WHO_ARE_YOU:
			{
				Writer.WriteWord(C_WHO_I_AM);	//
					Writer.WriteByte(MyNick.nick_size);	//size
					Writer.WriteString((unsigned char*)MyNick.nick, MyNick.nick_size); //nick
				Send((char*)Writer.Buffer, Writer.offset);
				break;
			}

		default:
			{
				SetText("Unknown opcode");
				Reader.SetOffset(1000);
				break;
			}
			
		}
	}	
}