로비 네트워크 매니져
Inheritance: SingletonSchedule
コード例 #1
0
ファイル: NetDAL.cs プロジェクト: yxyzka/onegit
        /// <summary>
        /// 新增
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public bool Insert(T entity)
        {
            NET net = new NET();

            net.Set <T>().Add(entity);
            return(net.SaveChanges() > 0);
        }
コード例 #2
0
ファイル: SV_MAIN.cs プロジェクト: optimus-code/Q2Sharp
        public static void SVC_RemoteCommand( )
        {
            Int32  i;
            String remaining;

            i = Rcon_Validate();
            var msg = Lib.CtoJava(Globals.net_message.data, 4, 1024);

            if (i == 0)
            {
                Com.Printf("Bad rcon from " + NET.AdrToString(Globals.net_from) + ":\\n" + msg + "\\n");
            }
            else
            {
                Com.Printf("Rcon from " + NET.AdrToString(Globals.net_from) + ":\\n" + msg + "\\n");
            }
            Com.BeginRedirect(Defines.RD_PACKET, SV_SEND.sv_outputbuf, Defines.SV_OUTPUTBUF_LENGTH, new AnonymousRD_Flusher());
            if (0 == Rcon_Validate())
            {
                Com.Printf("Bad rcon_password.\\n");
            }
            else
            {
                remaining = "";
                for (i = 2; i < Cmd.Argc(); i++)
                {
                    remaining += Cmd.Argv(i);
                    remaining += " ";
                }

                Cmd.ExecuteString(remaining);
            }

            Com.EndRedirect();
        }
コード例 #3
0
ファイル: SV_MAIN.cs プロジェクト: optimus-code/Q2Sharp
        public static void SV_Frame(Int64 msec)
        {
            Globals.time_before_game = Globals.time_after_game = 0;
            if (!SV_INIT.svs.initialized)
            {
                return;
            }
            SV_INIT.svs.realtime += ( Int32 )msec;
            Lib.Rand();
            SV_CheckTimeouts();
            SV_ReadPackets();
            if (0 == SV_MAIN.sv_timedemo.value && SV_INIT.svs.realtime < SV_INIT.sv.time)
            {
                if (SV_INIT.sv.time - SV_INIT.svs.realtime > 100)
                {
                    if (SV_MAIN.sv_showclamp.value != 0)
                    {
                        Com.Printf("sv lowclamp\\n");
                    }
                    SV_INIT.svs.realtime = SV_INIT.sv.time - 100;
                }

                NET.Sleep(SV_INIT.sv.time - SV_INIT.svs.realtime);
                return;
            }

            SV_CalcPings();
            SV_GiveMsec();
            SV_RunGameFrame();
            SV_SEND.SV_SendClientMessages();
            SV_ENTS.SV_RecordDemoMessage();
            Master_Heartbeat();
            SV_PrepWorldFrame();
        }
コード例 #4
0
        /**
         * Master_Shutdown, Informs all masters that this server is going down.
         */
        public static void Master_Shutdown()
        {
            int i;

            // pgm post3.19 change, cvar pointer not validated before dereferencing
            if (null == Globals.dedicated || 0 == Globals.dedicated.value)
            {
                return;                 // only dedicated servers send heartbeats
            }
            // pgm post3.19 change, cvar pointer not validated before dereferencing
            if (null == SV_MAIN.public_server || 0 == SV_MAIN.public_server.value)
            {
                return;                 // a private dedicated game
            }
            // send to group master
            for (i = 0; i < Defines.MAX_MASTERS; i++)
            {
                if (SV_MAIN.master_adr[i].port != 0)
                {
                    if (i > 0)
                    {
                        Com.Printf("Sending heartbeat to " + NET.AdrToString(SV_MAIN.master_adr[i]) + "\n");
                    }

                    Netchan.OutOfBandPrint(Defines.NS_SERVER, SV_MAIN.master_adr[i], "shutdown");
                }
            }
        }
コード例 #5
0
ファイル: UDPClient.cs プロジェクト: UnforeseenOcean/Warmode
    public void send_serverinfo(string ip, int port)
    {
        UdpClient  udpClient  = new UdpClient();
        IPEndPoint iPEndPoint = new IPEndPoint(IPAddress.Parse(ip), port);

        UDPClient.UdpState udpState = new UDPClient.UdpState();
        udpState.e = iPEndPoint;
        udpState.u = udpClient;
        try
        {
            NET.BEGIN_WRITE();
            NET.WRITE_BYTE(244);
            NET.WRITE_BYTE(0);
            NET.WRITE_BYTE(0);
            NET.WRITE_BYTE(0);
            NET.WRITE_FLOAT(Time.time);
            NET.END_WRITE();
            udpClient.Send(NET.WRITE_DATA(), NET.WRITE_LEN(), iPEndPoint);
        }
        catch
        {
            UnityEngine.Debug.LogWarning("[udp] send error");
        }
        udpClient.BeginReceive(new AsyncCallback(UDPClient.ReceiveCallback), udpState);
        base.StartCoroutine(this.forceclose(udpClient));
    }
コード例 #6
0
ファイル: SV_MAIN.cs プロジェクト: optimus-code/Q2Sharp
        public static void Master_Heartbeat( )
        {
            String string_renamed;
            Int32  i;

            if (Globals.dedicated == null || 0 == Globals.dedicated.value)
            {
                return;
            }
            if (null == SV_MAIN.public_server || 0 == SV_MAIN.public_server.value)
            {
                return;
            }
            if (SV_INIT.svs.last_heartbeat > SV_INIT.svs.realtime)
            {
                SV_INIT.svs.last_heartbeat = SV_INIT.svs.realtime;
            }
            if (SV_INIT.svs.realtime - SV_INIT.svs.last_heartbeat < SV_MAIN.HEARTBEAT_SECONDS * 1000)
            {
                return;
            }
            SV_INIT.svs.last_heartbeat = SV_INIT.svs.realtime;
            string_renamed             = SV_StatusString();
            for (i = 0; i < Defines.MAX_MASTERS; i++)
            {
                if (SV_MAIN.master_adr[i].port != 0)
                {
                    Com.Printf("Sending heartbeat to " + NET.AdrToString(SV_MAIN.master_adr[i]) + "\\n");
                    Netchan.OutOfBandPrint(Defines.NS_SERVER, SV_MAIN.master_adr[i], "heartbeat\\n" + string_renamed);
                }
            }
        }
コード例 #7
0
ファイル: Netchan.cs プロジェクト: optimus-code/Q2Sharp
 public static void Netchan_OutOfBand(int net_socket, netadr_t adr, int length, byte[] data)
 {
     SZ.Init(send, send_buf, Defines.MAX_MSGLEN);
     MSG.WriteInt(send, -1);
     SZ.Write(send, data, length);
     NET.SendPacket(net_socket, send.cursize, send.data, adr);
 }
コード例 #8
0
ファイル: Netchan.cs プロジェクト: optimus-code/Q2Sharp
        public static bool Process(netchan_t chan, sizebuf_t msg)
        {
            MSG.BeginReading(msg);
            int sequence     = MSG.ReadLong(msg);
            int sequence_ack = MSG.ReadLong(msg);

            if (chan.sock == Defines.NS_SERVER)
            {
                MSG.ReadShort(msg);
            }
            int reliable_message = sequence >> 31;
            int reliable_ack     = sequence_ack >> 31;

            sequence     &= ~(1 << 31);
            sequence_ack &= ~(1 << 31);
            if (showpackets.value != 0)
            {
                if (reliable_message != 0)
                {
                    Com.Printf("recv " + msg.cursize + " : s=" + sequence + " reliable=" + (chan.incoming_reliable_sequence ^ 1) + " ack=" + sequence_ack + " rack=" + reliable_ack + "\\n");
                }
                else
                {
                    Com.Printf("recv " + msg.cursize + " : s=" + sequence + " ack=" + sequence_ack + " rack=" + reliable_ack + "\\n");
                }
            }

            if (sequence <= chan.incoming_sequence)
            {
                if (showdrop.value != 0)
                {
                    Com.Printf(NET.AdrToString(chan.remote_address) + ":Out of order packet " + sequence + " at " + chan.incoming_sequence + "\\n");
                }
                return(false);
            }

            chan.dropped = sequence - (chan.incoming_sequence + 1);
            if (chan.dropped > 0)
            {
                if (showdrop.value != 0)
                {
                    Com.Printf(NET.AdrToString(chan.remote_address) + ":Dropped " + chan.dropped + " packets at " + sequence + "\\n");
                }
            }

            if (reliable_ack == chan.reliable_sequence)
            {
                chan.reliable_length = 0;
            }
            chan.incoming_sequence              = sequence;
            chan.incoming_acknowledged          = sequence_ack;
            chan.incoming_reliable_acknowledged = reliable_ack;
            if (reliable_message != 0)
            {
                chan.incoming_reliable_sequence ^= 1;
            }

            chan.last_received = (int)Globals.curtime;
            return(true);
        }
コード例 #9
0
ファイル: NET.cs プロジェクト: UnforeseenOcean/Warmode
 private static void WRITE_SHORT(short svalue)
 {
     byte[] array = NET.EncodeShort(svalue);
     NET.sendbuffer[NET.writepos]     = array[0];
     NET.sendbuffer[NET.writepos + 1] = array[1];
     NET.writepos += 2;
 }
コード例 #10
0
ファイル: NetDAL.cs プロジェクト: yxyzka/onegit
        /// <summary>
        /// 修改
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public bool Update(T entity)
        {
            NET net = new NET();

            net.Entry <T>(entity).State = EntityState.Modified;
            return(net.SaveChanges() > 0);
        }
コード例 #11
0
ファイル: SV_MAIN.cs プロジェクト: optimus-code/Q2Sharp
        public static void SVC_GetChallenge( )
        {
            Int32 i;
            Int32 oldest;
            Int32 oldestTime;

            oldest     = 0;
            oldestTime = 0x7fffffff;
            for (i = 0; i < Defines.MAX_CHALLENGES; i++)
            {
                if (NET.CompareBaseAdr(Globals.net_from, SV_INIT.svs.challenges[i].adr))
                {
                    break;
                }
                if (SV_INIT.svs.challenges[i].time < oldestTime)
                {
                    oldestTime = SV_INIT.svs.challenges[i].time;
                    oldest     = i;
                }
            }

            if (i == Defines.MAX_CHALLENGES)
            {
                SV_INIT.svs.challenges[oldest].challenge = Lib.Rand() & 0x7fff;
                SV_INIT.svs.challenges[oldest].adr       = Globals.net_from;
                SV_INIT.svs.challenges[oldest].time      = ( Int32 )Globals.curtime;
                i = oldest;
            }

            Netchan.OutOfBandPrint(Defines.NS_SERVER, Globals.net_from, "challenge " + SV_INIT.svs.challenges[i].challenge);
        }
コード例 #12
0
ファイル: Netchan.cs プロジェクト: optimus-code/Q2Sharp
        public static void Transmit(netchan_t chan, int length, byte[] data)
        {
            int send_reliable;
            int w1, w2;

            if (chan.message.overflowed)
            {
                chan.fatal_error = true;
                Com.Printf(NET.AdrToString(chan.remote_address) + ":Outgoing message overflow\\n");
                return;
            }

            send_reliable = Netchan_NeedReliable(chan) ? 1 : 0;
            if (chan.reliable_length == 0 && chan.message.cursize != 0)
            {
                System.Array.Copy(chan.message_buf, 0, chan.reliable_buf, 0, chan.message.cursize);
                chan.reliable_length    = chan.message.cursize;
                chan.message.cursize    = 0;
                chan.reliable_sequence ^= 1;
            }

            SZ.Init(send, send_buf, send_buf.Length);
            w1 = (chan.outgoing_sequence & ~(1 << 31)) | (send_reliable << 31);
            w2 = (chan.incoming_sequence & ~(1 << 31)) | (chan.incoming_reliable_sequence << 31);
            chan.outgoing_sequence++;
            chan.last_sent = (int)Globals.curtime;
            MSG.WriteInt(send, w1);
            MSG.WriteInt(send, w2);
            if (chan.sock == Defines.NS_CLIENT)
            {
                MSG.WriteShort(send, (int)qport.value);
            }
            if (send_reliable != 0)
            {
                SZ.Write(send, chan.reliable_buf, chan.reliable_length);
                chan.last_reliable_sequence = chan.outgoing_sequence;
            }

            if (send.maxsize - send.cursize >= length)
            {
                SZ.Write(send, data, length);
            }
            else
            {
                Com.Printf("Netchan_Transmit: dumped unreliable\\n");
            }
            NET.SendPacket(chan.sock, send.cursize, send.data, chan.remote_address);
            if (showpackets.value != 0)
            {
                if (send_reliable != 0)
                {
                    Com.Printf("send " + send.cursize + " : s=" + (chan.outgoing_sequence - 1) + " reliable=" + chan.reliable_sequence + " ack=" + chan.incoming_sequence + " rack=" + chan.incoming_reliable_sequence + "\\n");
                }
                else
                {
                    Com.Printf("send " + send.cursize + " : s=" + (chan.outgoing_sequence - 1) + " ack=" + chan.incoming_sequence + " rack=" + chan.incoming_reliable_sequence + "\\n");
                }
            }
        }
コード例 #13
0
ファイル: SV_CCMDS.cs プロジェクト: optimus-code/Q2Sharp
        public static void SV_Status_f( )
        {
            Int32    i, j, l;
            client_t cl;
            String   s;
            Int32    ping;

            if (SV_INIT.svs.clients == null)
            {
                Com.Printf("No server running.\\n");
                return;
            }

            Com.Printf("map              : " + SV_INIT.sv.name + "\\n");
            Com.Printf("num score ping name            lastmsg address               qport \\n");
            Com.Printf("--- ----- ---- --------------- ------- --------------------- ------\\n");
            for (i = 0; i < SV_MAIN.maxclients.value; i++)
            {
                cl = SV_INIT.svs.clients[i];
                if (0 == cl.state)
                {
                    continue;
                }
                Com.Printf("%3i ", i);
                Com.Printf("%5i ", cl.edict.client.ps.stats[Defines.STAT_FRAGS]);
                if (cl.state == Defines.cs_connected)
                {
                    Com.Printf("CNCT ");
                }
                else if (cl.state == Defines.cs_zombie)
                {
                    Com.Printf("ZMBI ");
                }
                else
                {
                    ping = cl.ping < 9999 ? cl.ping : 9999;
                    Com.Printf("%4i ", ping);
                }

                Com.Printf("%s", cl.name);
                l = 16 - cl.name.Length;
                for (j = 0; j < l; j++)
                {
                    Com.Printf(" ");
                }
                Com.Printf("%7i ", SV_INIT.svs.realtime - cl.lastmessage);
                s = NET.AdrToString(cl.netchan.remote_address);
                Com.Printf(s);
                l = 22 - s.Length;
                for (j = 0; j < l; j++)
                {
                    Com.Printf(" ");
                }
                Com.Printf("%5i", cl.netchan.qport);
                Com.Printf("\\n");
            }

            Com.Printf("\\n");
        }
コード例 #14
0
ファイル: NetDAL.cs プロジェクト: yxyzka/onegit
        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public bool Delete(object id)
        {
            NET net    = new NET();
            T   entity = net.Set <T>().Find(id);

            net.Set <T>().Remove(entity);
            return(net.SaveChanges() > 0);
        }
コード例 #15
0
ファイル: NET.cs プロジェクト: UnforeseenOcean/Warmode
    public static void END_WRITE()
    {
        short svalue = (short)NET.writepos;

        NET.writepos = 2;
        NET.WRITE_SHORT(svalue);
        NET.writepos = (int)svalue;
    }
コード例 #16
0
ファイル: NET.cs プロジェクト: UnforeseenOcean/Warmode
 private static void WRITE_LONG(int ivalue)
 {
     byte[] array = NET.EncodeInteger(ivalue);
     NET.sendbuffer[NET.writepos]     = array[0];
     NET.sendbuffer[NET.writepos + 1] = array[1];
     NET.sendbuffer[NET.writepos + 2] = array[2];
     NET.sendbuffer[NET.writepos + 3] = array[3];
     NET.writepos += 4;
 }
コード例 #17
0
ファイル: NET.cs プロジェクト: UnforeseenOcean/Warmode
 public static void WRITE_FLOAT(float fvalue)
 {
     byte[] array = NET.EncodeFloat(fvalue);
     NET.sendbuffer[NET.writepos]     = array[0];
     NET.sendbuffer[NET.writepos + 1] = array[1];
     NET.sendbuffer[NET.writepos + 2] = array[2];
     NET.sendbuffer[NET.writepos + 3] = array[3];
     NET.writepos += 4;
 }
コード例 #18
0
ファイル: SV_CCMDS.cs プロジェクト: optimus-code/Q2Sharp
 public static void SV_KillServer_f( )
 {
     if (!SV_INIT.svs.initialized)
     {
         return;
     }
     SV_MAIN.SV_Shutdown("Server was killed.\\n", false);
     NET.Config(false);
 }
コード例 #19
0
ファイル: SV_MAIN.cs プロジェクト: optimus-code/Q2Sharp
        public static void SV_ReadPackets( )
        {
            Int32    i;
            client_t cl;
            var      qport = 0;

            while (NET.GetPacket(Defines.NS_SERVER, Globals.net_from, Globals.net_message))
            {
                if ((Globals.net_message.data[0] == -1) && (Globals.net_message.data[1] == -1) && (Globals.net_message.data[2] == -1) && (Globals.net_message.data[3] == -1))
                {
                    SV_ConnectionlessPacket();
                    continue;
                }

                MSG.BeginReading(Globals.net_message);
                MSG.ReadLong(Globals.net_message);
                MSG.ReadLong(Globals.net_message);
                qport = MSG.ReadShort(Globals.net_message) & 0xffff;
                for (i = 0; i < SV_MAIN.maxclients.value; i++)
                {
                    cl = SV_INIT.svs.clients[i];
                    if (cl.state == Defines.cs_free)
                    {
                        continue;
                    }
                    if (!NET.CompareBaseAdr(Globals.net_from, cl.netchan.remote_address))
                    {
                        continue;
                    }
                    if (cl.netchan.qport != qport)
                    {
                        continue;
                    }
                    if (cl.netchan.remote_address.port != Globals.net_from.port)
                    {
                        Com.Printf("SV_ReadPackets: fixing up a translated port\\n");
                        cl.netchan.remote_address.port = Globals.net_from.port;
                    }

                    if (Netchan.Process(cl.netchan, Globals.net_message))
                    {
                        if (cl.state != Defines.cs_zombie)
                        {
                            cl.lastmessage = SV_INIT.svs.realtime;
                            SV_USER.SV_ExecuteClientMessage(cl);
                        }
                    }

                    break;
                }

                if (i != SV_MAIN.maxclients.value)
                {
                    continue;
                }
            }
        }
コード例 #20
0
ファイル: NET.cs プロジェクト: UnforeseenOcean/Warmode
    public static float READ_FLOAT()
    {
        if (NET.readpos + 4 > NET.readlen)
        {
            NET.readerror = true;
            return(0f);
        }
        float result = NET.DecodeSingle(NET.readbuffer, NET.readpos);

        NET.readpos += 4;
        return(result);
    }
コード例 #21
0
ファイル: NET.cs プロジェクト: UnforeseenOcean/Warmode
    public static int READ_LONG()
    {
        if (NET.readpos + 4 > NET.readlen)
        {
            NET.readerror = true;
            return(0);
        }
        int result = NET.DecodeInteger(NET.readbuffer, NET.readpos);

        NET.readpos += 4;
        return(result);
    }
コード例 #22
0
        /**
         * A connectionless packet has four leading 0xff characters to distinguish
         * it from a game channel. Clients that are in the game can still send
         * connectionless packets. It is used also by rcon commands.
         */
        public static void SV_ConnectionlessPacket()
        {
            string s;
            string c;

            MSG.BeginReading(Globals.net_message);
            MSG.ReadLong(Globals.net_message);             // skip the -1 marker

            s = MSG.ReadStringLine(Globals.net_message);

            Cmd.TokenizeString(s.ToCharArray(), false);

            c = Cmd.Argv(0);

            //for debugging purposes
            //Com.Printf("Packet " + NET.AdrToString(Netchan.net_from) + " : " + c + "\n");
            //Com.Printf(Lib.hexDump(net_message.data, 64, false) + "\n");

            if (0 == Lib.strcmp(c, "ping"))
            {
                SV_MAIN.SVC_Ping();
            }
            else if (0 == Lib.strcmp(c, "ack"))
            {
                SV_MAIN.SVC_Ack();
            }
            else if (0 == Lib.strcmp(c, "status"))
            {
                SV_MAIN.SVC_Status();
            }
            else if (0 == Lib.strcmp(c, "info"))
            {
                SV_MAIN.SVC_Info();
            }
            else if (0 == Lib.strcmp(c, "getchallenge"))
            {
                SV_MAIN.SVC_GetChallenge();
            }
            else if (0 == Lib.strcmp(c, "connect"))
            {
                SV_MAIN.SVC_DirectConnect();
            }
            else if (0 == Lib.strcmp(c, "rcon"))
            {
                SV_MAIN.SVC_RemoteCommand();
            }
            else
            {
                Com.Printf("bad connectionless packet from " + NET.AdrToString(Globals.net_from) + "\n");
                Com.Printf("[" + s + "]\n");
                Com.Printf("" + Lib.hexDump(Globals.net_message.data, 128, false));
            }
        }
コード例 #23
0
ファイル: NET.cs プロジェクト: UnforeseenOcean/Warmode
    public static int READ_SHORT()
    {
        if (NET.readpos + 2 > NET.readlen)
        {
            NET.readerror = true;
            return(0);
        }
        int result = NET.DecodeShort(NET.readbuffer, NET.readpos);

        NET.readpos += 2;
        return(result);
    }
コード例 #24
0
ファイル: NeuroHelper.cs プロジェクト: vehar/Athena-NeuroPlay
 public void GetNeuroData(ref BaseSign bs)
 {
     double[] X = bs.GetAllIn();
     double[] Y;
     if (X != null)
     {
         if (NET != null)
         {
             NET.NetOUT(X, out Y);
             bs.SetOut(Y);
         }
     }
 }
コード例 #25
0
ファイル: SV_CCMDS.cs プロジェクト: optimus-code/Quake2Sharp
        /*
         * ===============================================================================
         *
         * OPERATOR CONSOLE ONLY COMMANDS
         *
         * These commands can only be entered from stdin or by a remote operator datagram
         * ===============================================================================
         */

        /*
         * ====================
         * SV_SetMaster_f
         *
         * Specify a list of master servers
         * ====================
         */
        public static void SV_SetMaster_f()
        {
            int i, slot;

            // only dedicated servers send heartbeats
            if (Globals.dedicated.value == 0)
            {
                Com.Printf("Only dedicated servers use masters.\n");

                return;
            }

            // make sure the server is listed public
            Cvar.Set("public", "1");

            for (i = 1; i < Defines.MAX_MASTERS; i++)
            {
                SV_MAIN.master_adr[i] = new();
            }

            slot = 1;             // slot 0 will always contain the id master

            for (i = 1; i < Cmd.Argc(); i++)
            {
                if (slot == Defines.MAX_MASTERS)
                {
                    break;
                }

                if (!NET.StringToAdr(Cmd.Argv(i), SV_MAIN.master_adr[i]))
                {
                    Com.Printf("Bad address: " + Cmd.Argv(i) + "\n");

                    continue;
                }

                if (SV_MAIN.master_adr[slot].port == 0)
                {
                    SV_MAIN.master_adr[slot].port = Defines.PORT_MASTER;
                }

                Com.Printf("Master server at " + NET.AdrToString(SV_MAIN.master_adr[slot]) + "\n");
                Com.Printf("Sending a ping.\n");

                Netchan.OutOfBandPrint(Defines.NS_SERVER, SV_MAIN.master_adr[slot], "ping");

                slot++;
            }

            SV_INIT.svs.last_heartbeat = -9999999;
        }
コード例 #26
0
ファイル: SV_MAIN.cs プロジェクト: optimus-code/Q2Sharp
        public static void SV_ConnectionlessPacket( )
        {
            String s;
            String c;

            MSG.BeginReading(Globals.net_message);
            MSG.ReadLong(Globals.net_message);
            s = MSG.ReadStringLine(Globals.net_message);
            Cmd.TokenizeString(s.ToCharArray(), false);
            c = Cmd.Argv(0);
            if (0 == Lib.Strcmp(c, "ping"))
            {
                SVC_Ping();
            }
            else if (0 == Lib.Strcmp(c, "ack"))
            {
                SVC_Ack();
            }
            else if (0 == Lib.Strcmp(c, "status"))
            {
                SVC_Status();
            }
            else if (0 == Lib.Strcmp(c, "info"))
            {
                SVC_Info();
            }
            else if (0 == Lib.Strcmp(c, "getchallenge"))
            {
                SVC_GetChallenge();
            }
            else if (0 == Lib.Strcmp(c, "connect"))
            {
                SVC_DirectConnect();
            }
            else if (0 == Lib.Strcmp(c, "rcon"))
            {
                SVC_RemoteCommand();
            }
            else
            {
                Com.Printf("bad connectionless packet from " + NET.AdrToString(Globals.net_from) + "\\n");
                Com.Printf("[" + s + "]\\n");
                Com.Printf("" + Lib.HexDump(Globals.net_message.data, 128, false));
            }
        }
コード例 #27
0
        /**
         * A client issued an rcon command. Shift down the remaining args Redirect
         * all printfs fromt hte server to the client.
         */
        public static void SVC_RemoteCommand()
        {
            int    i;
            string remaining;

            i = SV_MAIN.Rcon_Validate();

            var msg = Lib.CtoJava(Globals.net_message.data, 4, 1024);

            if (i == 0)
            {
                Com.Printf("Bad rcon from " + NET.AdrToString(Globals.net_from) + ":\n" + msg + "\n");
            }
            else
            {
                Com.Printf("Rcon from " + NET.AdrToString(Globals.net_from) + ":\n" + msg + "\n");
            }

            Com.BeginRedirect(
                Defines.RD_PACKET,
                SV_SEND.sv_outputbuf,
                Defines.SV_OUTPUTBUF_LENGTH,
                (target, buffer) => { SV_SEND.SV_FlushRedirect(target, Lib.stringToBytes(buffer.ToString())); }
                );

            if (0 == SV_MAIN.Rcon_Validate())
            {
                Com.Printf("Bad rcon_password.\n");
            }
            else
            {
                remaining = "";

                for (i = 2; i < Cmd.Argc(); i++)
                {
                    remaining += Cmd.Argv(i);
                    remaining += " ";
                }

                Cmd.ExecuteString(remaining);
            }

            Com.EndRedirect();
        }
コード例 #28
0
        public void Send(ExtendedPlayerAgent player)
        {
            if (NET.IsMaster)
            {
                if (player == null || player.WrappedObj == null)
                {
                    Debug.LogError("Tried to send progression data to a null player.");
                    return;
                }

                pProgressionData data = Replicator.Owner.ProgressionData.ToPacket();
                data.to.Set(player.WrappedObj);

                byte[] bytes = NET.GetBytesFromPacket(data, Replicator.Key, ID);
                NET.Send(bytes, SNetwork.SNet_ChannelType.GameReceiveCritical, player.Owner);
            }
            else
            {
                Debug.LogError("Attempting to send progression data when not the master.");
            }
        }
コード例 #29
0
        public static void Master_Heartbeat()
        {
            string @string;
            int    i;

            // pgm post3.19 change, cvar pointer not validated before dereferencing
            if (Globals.dedicated == null || 0 == Globals.dedicated.value)
            {
                return;                 // only dedicated servers send heartbeats
            }
            // pgm post3.19 change, cvar pointer not validated before dereferencing
            if (null == SV_MAIN.public_server || 0 == SV_MAIN.public_server.value)
            {
                return;                 // a private dedicated game
            }
            // check for time wraparound
            if (SV_INIT.svs.last_heartbeat > SV_INIT.svs.realtime)
            {
                SV_INIT.svs.last_heartbeat = SV_INIT.svs.realtime;
            }

            if (SV_INIT.svs.realtime - SV_INIT.svs.last_heartbeat < SV_MAIN.HEARTBEAT_SECONDS * 1000)
            {
                return;                 // not time to send yet
            }
            SV_INIT.svs.last_heartbeat = SV_INIT.svs.realtime;

            // send the same string that we would give for a status OOB command
            @string = SV_MAIN.SV_StatusString();

            // send to group master
            for (i = 0; i < Defines.MAX_MASTERS; i++)
            {
                if (SV_MAIN.master_adr[i].port != 0)
                {
                    Com.Printf("Sending heartbeat to " + NET.AdrToString(SV_MAIN.master_adr[i]) + "\n");
                    Netchan.OutOfBandPrint(Defines.NS_SERVER, SV_MAIN.master_adr[i], "heartbeat\n" + @string);
                }
            }
        }
コード例 #30
0
ファイル: SV_MAIN.cs プロジェクト: optimus-code/Q2Sharp
        public static void Master_Shutdown( )
        {
            Int32 i;

            if (null == Globals.dedicated || 0 == Globals.dedicated.value)
            {
                return;
            }
            if (null == SV_MAIN.public_server || 0 == SV_MAIN.public_server.value)
            {
                return;
            }
            for (i = 0; i < Defines.MAX_MASTERS; i++)
            {
                if (SV_MAIN.master_adr[i].port != 0)
                {
                    if (i > 0)
                    {
                        Com.Printf("Sending heartbeat to " + NET.AdrToString(SV_MAIN.master_adr[i]) + "\\n");
                    }
                    Netchan.OutOfBandPrint(Defines.NS_SERVER, SV_MAIN.master_adr[i], "shutdown");
                }
            }
        }
コード例 #31
0
ファイル: MyUI.cs プロジェクト: prafulliu/ppter-network
 private void show(NET.Message mes)
 {
     SetText(mes);
 }
コード例 #32
0
ファイル: MyUI.cs プロジェクト: prafulliu/ppter-network
 private void SetText(NET.Message mes)
 {
     if (this.listView1.InvokeRequired)
     {
         MyInvoke _myInvoke = new MyInvoke(SetText);
         this.Invoke(_myInvoke, new object[] { mes });
     }
     else
     {
         NET.Message m = mes as NET.Message;
         ListViewItem[] lvi = new ListViewItem[m.Result.Count];
         NET.FileInfo fi;
         for (int i = 0; i < m.Result.Count; i++)
         {
             fi = m.Result[i];
             lvi[i] = new ListViewItem(new string[] { fi.fileName, fi.IP, fi.Path, fi.introduction });
         }
         this.listView1.Items.AddRange(lvi);
     }
 }
コード例 #33
0
 void managementDataServer_OnManagementAllowed(object sender, NET.Remoting.Channels.ManagementAllowedEventArgs e)
 {
     if (Properties.Settings.Default.EnableRemoteManagement == false)
     {
         if (currentIP.Equals(e.IpAddress) || e.IpAddress.Equals("127.0.0.1") || e.IpAddress.ToLower().Equals("localhost"))
         {
             e.ManagementAllowed = true;
         }
         else
         {
             e.ManagementAllowed = false;
         }
     }
     else
     {
         e.ManagementAllowed = true;
     }
 }
コード例 #34
0
 void tcpClientManagementDataServer_OnManagementAllowed(object sender, NET.Remoting.Channels.ManagementAllowedEventArgs e)
 {
     try
     {
         int ext = Convert.ToInt32(e.Extension);
         bool allow = false;
         WOSI.CallButler.Data.CallButlerDataset.ExtensionsRow row = dataProvider.GetExtensionNumber(Properties.Settings.Default.CustomerID, ext);
         if (row != null)
         {
             allow = row.EnableManagement;
         }
         e.ManagementAllowed = allow;
     }
     catch
     {
         e.ManagementAllowed = false;
     }
 }
コード例 #35
0
 void tcpClientManagementDataServer_OnAuthentication(object sender, NET.Remoting.Channels.AuthenticationEventArgs e)
 {
     e.IsAuthenticated = managementInterfaceServer.Authenticate(e.CustomerID, e.ExtensionNumber, e.Password);
 }