Exemple #1
0
 static void NewLink(KcpUser linker, DataBuffer data)
 {
     byte[] dat = data.fakeStruct.GetData <byte[]>(Req.Args);
     if (dat != null)
     {
         var link = KcpPack.UnPackMsg <LinkInfo>(dat);
         if (link != null)
         {
             new IPAddress(link.ip.ToBytes());
             IPEndPoint endPoint = new IPEndPoint(new IPAddress(link.ip.ToBytes()), link.port);
             KcpServer.Instance.Send(new byte[1], EnvelopeType.Mate, endPoint);
         }
     }
 }
 void MessagePro(DataBuffer data)
 {
     switch (data.fakeStruct[Req.Cmd])
     {
     case ProCmd.ServerIp:
         byte[] dat = data.fakeStruct.GetData <byte[]>(Req.Args);
         var    rs  = KcpPack.UnPackMsg <ServerInfo>(dat);
         if (rs != null)
         {
             link.Redirect(rs.ip, rs.port);
             link.SendNull(DefCmd.heart, MessageType.Def);
         }
         break;
     }
 }
 static void RedirectServer(KcpUser linker, DataBuffer data)
 {
     try
     {
         byte[] dat = data.fakeStruct.GetData <byte[]>(Req.Args);
         var    rs  = KcpPack.UnPackMsg <RServer>(dat);
         if (rs != null)
         {
             if (rs.key == key)
             {
                 ServerTable.AddServer(linker.ip, linker.port, rs.name);
             }
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.StackTrace);
     }
 }
        static void Main(string[] args)
        {
            KcpServer.CreateLink = (o) => { return(new KcpUser(o)); };
            var kcp = new KcpServer(8888);

            kcp.OpenHeart();
            RServer rs = new RServer();

            rs.name = "斗地主";
            rs.key  = "ert125dsaqwqf43bvrwurx24354tq245sd32dfkh348shdjfhs234sf5345";
            IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("193.112.70.170"), 6666);

            kcp.Send(KcpPack.PackObject <RServer>(ProCmd.Server, MessageType.Pro, rs), EnvelopeType.AesDataBuffer, endPoint);
            while (true)
            {
                var cmd = Console.ReadLine();
                if (cmd == "close" | cmd == "Close")
                {
                    break;
                }
            }
        }
    public void SendObject <T>(Int32 cmd, Int32 type, object obj) where T : class
    {
        var buf = KcpPack.PackObject <T>(cmd, type, obj);

        Send(buf, EnvelopeType.AesDataBuffer);
    }
    public void SendStruct <T>(Int32 cmd, Int32 type, T obj) where T : unmanaged
    {
        var buf = KcpPack.PackStruct <T>(cmd, type, obj);

        Send(buf, EnvelopeType.AesDataBuffer);
    }
    public void SendNull(Int32 cmd, Int32 type)
    {
        var buf = KcpPack.PackNull(cmd, type);

        Send(buf, EnvelopeType.AesDataBuffer);
    }