コード例 #1
0
        public MainWindow()
        {
            using (Mutex m = new Mutex(false, "SERV"))
            {
                if (!m.WaitOne(TimeSpan.FromSeconds(1), false))
                {
                    MessageBox.Show("Server is already running!");
                    Application.Current.Shutdown();
                    return;
                }
            }

            InitializeComponent();

            LogList = new ObservableCollection<DataLog>();
            LogList.CollectionChanged += LogList_CollectionChanged;

            Loaded += MainWindow_Loaded;
            Application.Current.Exit += Current_Exit;

            ServerPackets.ServerPacketHandler handler = new ServerPackets.ServerPacketHandler();

            ContextMenu ctxMenu = this.Resources["ctxMenu"] as ContextMenu;
            string[] opcodes = Enum.GetNames(typeof(Opcode));
            short[] values = (short[])Enum.GetValues(typeof(Opcode));

            var opcItr = opcodes.Zip(values, (o, v) => new Tuple<string, Opcode>(o, (Opcode)v)).Where( (t) => t.Item1.StartsWith("C") && t.Item2 != Opcode.Count);
            foreach (var pair in opcItr)
            {
                MenuItem item = new MenuItem { Header = pair.Item1, Tag = pair.Item2 };
                item.Click += Item_Click;
                ctxMenu.Items.Add(item);
            }

            MenuItem item2 = new MenuItem { Header = "Test" };
            item2.Click += (s, e) =>
            {
                Packet p = new Packet(Opcode.Test);
                p.WriteString(new string('*', 1000));
                GameWorld.SendToAll(p);
            };
            ctxMenu.Items.Add(item2);
        }
コード例 #2
0
        public void Connect(string Ip, int Port, ConcurrentQueue<Packet> receiveQueue)
        {
            if (_client != null && _client.Connected)
                Disconnect();

            _receivePacketQueue = receiveQueue;
            _client = new Socket(SocketType.Stream, ProtocolType.Tcp);
            try
            {
                _client.Connect(IPAddress.Parse(Ip), Port);
            }
            catch (Exception e)
            {
                Log.Error(e.Message);
                Disconnect();
                return;
            }

            _sendPacketQueue = new ConcurrentQueue<Packet>();

            Packet p = new Packet(Opcode.SConnection1);
            p.WriteString("WELL MET SERVER");
            Send(p);

            _receiverThread = new Thread(ReceiverThread);
            _senderThread = new Thread(SenderThread);
            _senderThread.Start(); _receiverThread.Start();
        }
コード例 #3
0
        void TestPackets()
        {
            Packet p = new Packet(Opcode.Test);
            p.WriteString("F**K");
            p.WriteInt32(123);
            byte[] bytes = p.GetBytes();

            Opcode opc = (Opcode)BitConverter.ToInt16(bytes, 0);
            short length = BitConverter.ToInt16(bytes, 2);
            string Data = p.ReadString();
            int i = p.ReadInt32();
        }
コード例 #4
0
 private void TestBtnClick(object sender, RoutedEventArgs e)
 {
     if ((sender as Button) == testBtn1)
     {
         var go = GameLogic.GameObjectFactory.CreateRandomGO();
         GameLogic.Game.GetWorld().AddToWorld(go);
         _testStack.Push(go);
     }
     else if ((sender as Button) == testBtn2)
     {
         if (_testStack.Count > 0)
         {
             var go = _testStack.Pop();
             GameLogic.Game.GetWorld().RemoveFromWorld(go);
         }
     }
     else
     {
         Packet p = new Packet(Opcode.Test);
         p.WriteString(new string('*', 1000));
         MainWindow.Connection.Send(p);
     }
 }