public static void HandleClientTransferZone(ZoneConnection zc, InterPacket packet) { byte admin, zoneid; int accountid; string username, charname, hostip; ushort randid; if (!packet.TryReadByte(out zoneid) || !packet.TryReadInt(out accountid) || !packet.TryReadString(out username) || !packet.TryReadString(out charname) || !packet.TryReadUShort(out randid) || !packet.TryReadByte(out admin) || !packet.TryReadString(out hostip)) { return; } if (Program.Zones.ContainsKey(zoneid)) { ZoneConnection z; if (Program.Zones.TryGetValue(zoneid, out z)) { z.SendTransferClientFromZone(accountid, username, charname, randid, admin, hostip); } } else { Log.WriteLine(LogLevel.Warn, "Uh oh, Zone {0} tried to transfer {1} to zone {1} D:", zc.ID, charname, zoneid); } }
public static void SendZoneServerIP(WorldClient client, ZoneConnection info) { using (var packet = new Packet(SH4Type.ServerIP)) { packet.WriteString(client.Host == "127.0.0.1" ? "127.0.0.1" : info.IP, 16); packet.WriteUShort(info.Port); client.SendPacket(packet); } }
public static void HandleAssigning(ZoneConnection lc, InterPacket packet) { string ip; if (!packet.TryReadString(out ip)) { return; } lc.IP = ip; // make idlist InterHandler.SendZoneStarted(lc.ID, lc.IP, lc.Port, lc.Maps); InterHandler.SendZoneList(lc); Log.WriteLine(LogLevel.Info, "Zone {0} listens @ {1}:{2}", lc.ID, lc.IP, lc.Port); }
public static void SendZoneList(ZoneConnection zc) { using (var packet = new InterPacket(InterHeader.ZONELIST)) { packet.Write(Program.Zones.Values.Count); foreach (var z in Program.Zones.Values) { packet.Write(z.ID); packet.Write(z.IP); packet.Write(z.Port); packet.WriteInt(z.Maps.Count); foreach (var m in z.Maps) { packet.WriteUShort(m.ID); packet.WriteStringLen(m.ShortName); packet.WriteStringLen(m.FullName); packet.WriteInt(m.RegenX); packet.WriteInt(m.RegenY); packet.WriteByte(m.Kingdom); packet.WriteUShort(m.ViewRange); } } zc.SendPacket(packet); } }
public static void HandleWorldMessage(ZoneConnection zc, InterPacket packet) { string msg; bool wut; byte type; if (!packet.TryReadString(out msg) || !packet.TryReadByte(out type) || !packet.TryReadBool(out wut)) { return; } if (wut) { string to; if (!packet.TryReadString(out to)) { return; } WorldClient client; if ((client = ClientManager.Instance.GetClientByCharname(to)) == null) { Log.WriteLine(LogLevel.Warn, "Tried to send a WorldMessage to a character that is unknown. Charname: {0}", to); } else { using (var p = Handler25.CreateWorldMessage((WorldMessageTypes)type, msg)) { client.SendPacket(p); } } } else { using (var p = Handler25.CreateWorldMessage((WorldMessageTypes)type, msg)) { ClientManager.Instance.SendPacketToAll(p); } } }
private void WorldAcceptor_OnIncommingConnection(Socket session) { // So something with it X: Log.WriteLine(LogLevel.Info, "Incoming connection from {0}", session.RemoteEndPoint); ZoneConnection wc = new ZoneConnection(session); }