static public void Handle_SC_Chat(SC_PrivateChat <Database> pkt, Database _db) { string[] splitArr = { ", " }; List <string> users = new List <string>(); users = pkt.users.Split(splitArr, StringSplitOptions.RemoveEmptyEntries).Select(p => p.Trim()).ToList(); SC_Chat msg = new SC_Chat(); msg.chatType = Helpers.Chat_Type.PrivateChat; msg.message = pkt.chat + ":" + pkt.message; msg.from = pkt.from; foreach (string user in users) { Player p = _db._server.getPlayer(user); if (p == null) { continue; } if (p._alias == pkt.from) { continue; } p._client.sendReliable(msg); } }
/// <summary> /// Handles re-routing of db related messages. /// </summary> static public void Handle_DB_Chat(SC_Chat <Database> pkt, Database db) { if (pkt.recipient == "*") { //Route it to everybody List <Arena> targetarenas = db._server._arenas.Values.ToList(); List <Player> targets = new List <Player>(); foreach (Arena a in targetarenas) { foreach (Player pl in a.Players) { targets.Add(pl); } } Helpers.Social_ArenaChat(targets, pkt.message, 0); return; } //Route it to a single player Player p = db._server.getPlayer(pkt.recipient); if (p == null) { return; } //Route it. Helpers.Social_ArenaChat(p, pkt.message, 0); }
public void sendMessage(Zone zone, string player, string message) { //297 bytes is the maximum size of a chat message that can be sent without crashing the client int maxSize = 297; int size = message.Length; int idx = 0; //Make sure that the message won't crash our player! //TODO: FIXME: Less Gheto StringBuilder sb = new StringBuilder(maxSize); while (size - idx > 0) { SC_Chat <Zone> msg = new SC_Chat <Zone>(); sb.Clear(); while ((size - idx > 0) && (sb.Length < maxSize)) { sb.Append(message[idx]); idx++; } msg.recipient = player; msg.message = sb.ToString(); zone._client.send(msg); } }
/// <summary> /// Creates a new packet based on the typeID and the received content /// inside the buffer. The user has to create an own implementation /// of this interface. /// </summary> public PacketBase createPacket(NetworkClient client, ushort typeID, byte[] buffer, int offset, int size) { //Ready our packet base PacketBase packet = null; size--; //Was it a system packet? if (buffer[offset++] == 0) { //Yes, find the appropriate type return(createSystemPacket(typeID, buffer, offset, size)); } //So what was the typeid? switch (typeID) { case SC_Login.TypeID: packet = new SC_Login(typeID, buffer, offset, size); break; case SC_PatchInfo.TypeID: packet = new SC_PatchInfo(typeID, buffer, offset, size); break; case SC_AssetInfo.TypeID: packet = new SC_AssetInfo(typeID, buffer, offset, size); break; case SC_SetIngame.TypeID: packet = new SC_SetIngame(typeID, buffer, offset, size); break; case SC_Chat.TypeID: packet = new SC_Chat(typeID, buffer, offset, size); break; default: //An undefined packet. packet = new PacketDummy(typeID, buffer, offset, size); break; } return(packet); }
/// <summary> /// Handles a chat packet received from the server /// </summary> static public void Handle_SC_Chat(SC_Chat pkt, Client client) { GameClient c = ((client as Client <GameClient>)._obj); switch (pkt.chatType) { case InfServer.Protocol.Helpers.Chat_Type.Arena: { c._wGame.updateChat(pkt.message, pkt.from, pkt.chatType, ""); } break; case InfServer.Protocol.Helpers.Chat_Type.Normal: { c._wGame.updateChat(pkt.message, pkt.from, pkt.chatType, ""); } break; case InfServer.Protocol.Helpers.Chat_Type.Team: { c._wGame.updateChat(pkt.message, pkt.from, pkt.chatType, ""); } break; case InfServer.Protocol.Helpers.Chat_Type.Whisper: { c._wGame.updateChat(pkt.message, pkt.from, pkt.chatType, ""); } break; case InfServer.Protocol.Helpers.Chat_Type.PrivateChat: { c._wGame.updateChat(pkt.message, pkt.from, pkt.chatType, pkt.chat); } break; default: { c._wGame.updateChat("ZoneServer", pkt.message, pkt.chatType, ""); } break; } }
/// <summary> /// Handles a chat packet received from the server /// </summary> static public void Handle_SC_Chat(SC_Chat pkt, Client client) { switch (pkt.chatType) { case Helpers.Chat_Type.Arena: { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine(String.Format("(Type={0}) {1}", pkt.chatType, pkt.message)); } break; case Helpers.Chat_Type.Normal: { Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine(String.Format("(Type={0}) {1}> {2}", pkt.chatType, pkt.from, pkt.message)); } break; case Helpers.Chat_Type.Team: { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine(String.Format("(Type={0}) {1}> {2}", pkt.chatType, pkt.from, pkt.message)); } break; case Helpers.Chat_Type.Whisper: { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine(String.Format("(Type={0}) {1}> {2}", pkt.chatType, pkt.from, pkt.message)); } break; } }
{ /// <summary> /// Creates a new system protocol packet. /// </summary> public PacketBase createSystemPacket(ushort typeID, byte[] buffer, int offset, int size) { //Ready our packet base PacketBase packet = null; offset++; size--; //What are we dealing with? switch (typeID) { case SC_Initial.TypeID: packet = new SC_Initial(typeID, buffer, offset, size); break; case SC_Login.TypeID: packet = new SC_Login(typeID, buffer, offset, size); break; case SC_State.TypeID: packet = new SC_State(typeID, buffer, offset, size); break; case SC_PatchInfo.TypeID: packet = new SC_PatchInfo(typeID, buffer, offset, size); break; case SC_AssetInfo.TypeID: packet = new SC_AssetInfo(typeID, buffer, offset, size); break; case SC_SetIngame.TypeID: packet = new SC_SetIngame(typeID, buffer, offset, size); break; case SC_Chat.TypeID: packet = new SC_Chat(typeID, buffer, offset, size); break; case BoxPacket.TypeID: packet = new BoxPacket(typeID, buffer, offset, size); break; case Disconnect.TypeID: packet = new Disconnect(typeID, buffer, offset, size); break; case PingPacket.TypeID: packet = new PingPacket(typeID, buffer, offset, size); break; case Reliable.TypeID: packet = new Reliable(typeID, buffer, offset, size, 0); break; case Reliable.TypeID + 1: packet = new Reliable(typeID, buffer, offset, size, 1); break; case Reliable.TypeID + 2: packet = new Reliable(typeID, buffer, offset, size, 2); break; case Reliable.TypeID + 3: packet = new Reliable(typeID, buffer, offset, size, 3); break; case OutOfSync.TypeID: packet = new OutOfSync(typeID, buffer, offset, size, 0); break; case OutOfSync.TypeID + 1: packet = new OutOfSync(typeID, buffer, offset, size, 1); break; case OutOfSync.TypeID + 2: packet = new OutOfSync(typeID, buffer, offset, size, 2); break; case OutOfSync.TypeID + 3: packet = new OutOfSync(typeID, buffer, offset, size, 3); break; case ReliableEcho.TypeID: packet = new ReliableEcho(typeID, buffer, offset, size, 0); break; case ReliableEcho.TypeID + 1: packet = new ReliableEcho(typeID, buffer, offset, size, 1); break; case ReliableEcho.TypeID + 2: packet = new ReliableEcho(typeID, buffer, offset, size, 2); break; case ReliableEcho.TypeID + 3: packet = new ReliableEcho(typeID, buffer, offset, size, 3); break; case ReliableBox.TypeID: packet = new ReliableBox(typeID, buffer, offset, size, 0); break; case ReliableBox.TypeID + 1: packet = new ReliableBox(typeID, buffer, offset, size, 1); break; case ReliableBox.TypeID + 2: packet = new ReliableBox(typeID, buffer, offset, size, 2); break; case ReliableBox.TypeID + 3: packet = new ReliableBox(typeID, buffer, offset, size, 3); break; case DataPacketRcv.TypeID: packet = new DataPacketRcv(typeID, buffer, offset, size, 0); break; case DataPacketRcv.TypeID + 1: packet = new DataPacketRcv(typeID, buffer, offset, size, 1); break; case DataPacketRcv.TypeID + 2: packet = new DataPacketRcv(typeID, buffer, offset, size, 2); break; case DataPacketRcv.TypeID + 3: packet = new DataPacketRcv(typeID, buffer, offset, size, 3); break; default: //An undefined packet. packet = new PacketDummy(typeID, buffer, offset, size); break; } return(packet); }
/// <summary> /// Creates a new packet based on the typeID and the received content /// inside the buffer. The user has to create an own implementation /// of this interface. /// </summary> public PacketBase createPacket(NetworkClient client, ushort typeID, byte[] buffer, int offset, int size) { //Ready our packet base PacketBase packet = null; size--; //Was it a system packet? if (buffer[offset++] == 0) { //Yes, find the appropriate type return(createSystemPacket(typeID, buffer, offset, size)); } //So what was the typeid? switch (typeID) { case SC_Auth <T> .TypeID: packet = new SC_Auth <T>(typeID, buffer, offset, size); break; case SC_PlayerLogin <T> .TypeID: packet = new SC_PlayerLogin <T>(typeID, buffer, offset, size); break; case SC_PlayerStatsResponse <T> .TypeID: packet = new SC_PlayerStatsResponse <T>(typeID, buffer, offset, size); break; case SC_Whisper <T> .TypeID: packet = new SC_Whisper <T>(typeID, buffer, offset, size); break; case SC_JoinChat <T> .TypeID: packet = new SC_JoinChat <T>(typeID, buffer, offset, size); break; case SC_LeaveChat <T> .TypeID: packet = new SC_LeaveChat <T>(typeID, buffer, offset, size); break; case SC_PrivateChat <T> .TypeID: packet = new SC_PrivateChat <T>(typeID, buffer, offset, size); break; case SC_Chat <T> .TypeID: packet = new SC_Chat <T>(typeID, buffer, offset, size); break; case SC_Zones <T> .TypeID: packet = new SC_Zones <T>(typeID, buffer, offset, size); break; case Disconnect <T> .TypeID: packet = new Disconnect <T>(typeID, buffer, offset, size); break; default: //An undefined packet. packet = new PacketDummy(typeID, buffer, offset, size); break; } return(packet); }