Example #1
0
        public static void WritePacketAsync(Packet packet, BinaryWriter writer)
        {
            var packetType = packet.GetType();

            // TODO: Optimise.
            var properties =
                packetType.GetProperties()
                    .Where(p => p.GetCustomAttributes(false).OfType<PacketDataAttribute>().Any())
                    .OrderBy(p => p.GetCustomAttributes(false).OfType<PacketDataAttribute>().First().Order);

            Task.Factory.StartNew(() =>
                                  {
                                      lock (writer)
                                      {
                                          try
                                          {

                                              writer.Write(packet.Header);
                                              foreach (var prop in properties)
                                              {
                                                  prop.GetValue(packet).Write(prop.PropertyType, writer);
                                              }
                                              writer.Flush();
                                          }
                                          catch (Exception ex)
                                          {
                                              // TODO: Something.
                                          }
                                      }
                                  });
        }
Example #2
0
 public void OnChatMessage(Packet packet)
 {
     //Console.WriteLine("{0} : {1}", packet.User, packet.Message);
     foreach (var c in _clients)
     {
         PacketWriter.WritePacketAsync(packet, c.Writer);
     }
 }
Example #3
0
File: Map.cs Project: aevv/Biscuit
 public void FinishMap(Packet p)
 {
     var packet = (FinishMapPacket) p;
     _self.X = packet.X;
     _self.Y = packet.Y;
     Camera.CenteredLocation = new PointF(_self.X, _self.Y);
     Loading = false;
     Loaded = true;
 }
Example #4
0
        public void Send(Packet data)
        {
            MemoryStream mem = new MemoryStream();
            BinaryFormatter bf = new BinaryFormatter();
            bf.Serialize(mem, data);
            byte[] buffer = mem.GetBuffer();

            bWriter.Write(buffer.Length);
            bWriter.Write(buffer);
            bWriter.Flush();
        }
Example #5
0
File: Map.cs Project: aevv/Biscuit
 public void GiveChunk(Packet p)
 {
     if (Loading)
     {
         var packet = (GiveChunkPacket) p;
         var chunk = _chunks.FirstOrDefault(c => c.X == packet.X && c.Y == packet.Y) ??
                     new Chunk(packet.X, packet.Y);
         chunk.Camera = Camera;
         chunk.LoadFromString(packet.Data);
         _chunks.Add(chunk);
     }
 }
Example #6
0
 public void OnCharCreateresult(Packet packet)
 {
     var p = (CharacterCreationResultPacket)packet;
     if (p.Success)
     {
         this.Call(Close);
     }
     else
     {
         Out.Red(p.Reason);
         lblReason.Call(() => lblReason.Text = p.Reason);
     }
 }
Example #7
0
        private void LoginRequest(Packet packet)
        {
            loginButton.Call(() => loginButton.Text = Resources.LoginForm_LoginRequest_Login);

            if (Game.ConfigManager.Query(c => !string.IsNullOrEmpty(c.Account)))
            {
                userTextBox.Call(() => userTextBox.Text = Game.ConfigManager.TryGet(c => c.Account));
            }

            if (Game.ConfigManager.Query(c => !string.IsNullOrEmpty(c.Password)))
            {
                passwordTextBox.Call(() => passwordTextBox.Text = Game.ConfigManager.TryGet(c => c.Password));
            }

            if (!Game.ConfigManager.Query(c => c.AutoLogin)) return;
            if (userTextBox.Text != "" && passwordTextBox.Text != "")
            {
                Login();
            }
        }
        private void button3_Click(object sender, EventArgs e)
        {
            Packet cp = new Packet();
            string hexString = "7c423d5858"; //data
            byte[] more_data = Packet.StringToByteArray(hexString); //data
            cp.init_CLIENT_P3(packet_cnt++, more_data);

            this.textBox1.Text = "Packet: " + cp.toHexString() + "\r\n";
            this.textBox1.Text += "------------------------------------------" + "\r\n";
            this.textBox1.Text += "PCK_SIZE = " + cp.getPCK_SIZE() + " (" + cp.getPCK_SIZE_HexString() + ")" + "\r\n";
            this.textBox1.Text += "PCK_CNT  = " + cp.getPCK_CNT() + " (" + cp.getPCK_CNT_HexString() + ")" + "\r\n";
            this.textBox1.Text += "PCK_ID   = " + cp.getPCK_ID() + " (" + cp.getPCK_ID_HexString() + ")" + "\r\n";
            this.textBox1.Text += "PCK_CRC  = " + cp.getPCK_CRC_HexString() + "\r\n";
            this.textBox1.Text += "------------------------------------------" + "\r\n";


            SendThread st = new SendThread(cp.getRawPacket(), this, this.textBoxIP.Text);

            Thread t = new Thread(new ThreadStart(st.ThreadProc));
            t.Start();
        }
Example #9
0
File: Map.cs Project: aevv/Biscuit
 public void RemoveEntity(Packet p)
 {
     var packet = (RemoveEntityPacket) p;
     _entities.RemoveAll(e => e.Id == packet.EntityId);
 }
Example #10
0
 public void GivePacket(Packet packet)
 {
 }
Example #11
0
        //----------------------------------------------------------------------------------
        public void Send(Packet data)
        {
            MemoryStream mem = new MemoryStream();
            BinaryFormatter bf = new BinaryFormatter();
            bf.Serialize(mem, data);
            byte[] buffer = mem.GetBuffer();

            try
            {
                _writer.Write(buffer.Length);
                _writer.Write(buffer);
                _writer.Flush();
            }

            catch (ObjectDisposedException e)
            {

            }
        }
Example #12
0
 public void OnDeletionResult(Packet packet)
 {
     RequestCharacters();
 }
Example #13
0
        public void OnSelectableCharacter(Packet packet)
        {
            var p = (SelectableCharacterPacket)packet;
            Out.Green(string.Format("Name: {0}, Id: {1}", p.Name, p.Id));

            Character character = new Character
            {
                Name = p.Name,
                Id = p.Id
            };

            Text text = new Text(colour: Color4.White, shadow: true, location: new PointF(600, _charCount * 75));
            text.Camera = Camera;
            _characters.Add(character);
            _charTexts.Add(text);
            _deferralQueue.Enqueue(new QueuedFunction
            {
                Parameters = new List<object> { _charCount, character },
                Function = (args) => text.Value = string.Format("{0} - level x something ({1})", args[1], args[0])
            });
            _deferralQueue.Enqueue(new QueuedFunction
            {
                Parameters = new List<object> { _charCount, p.Name, p.Id },
                Function = args => _delButtons.Add(new Button(new PointF(300, (int)(args[0]) * 75),
                    new SizeF(250, 100),
                    "assets/gfx/buttons/options.png", () =>
                        PacketWriter.WritePacketAsync(new DeleteCharacterPacket { Id = (Guid)args[2], Name = (string)args[1] }, _game.Connection.Writer)))
            });
            _charCount++;
        }
Example #14
0
 public void OnResult(Packet packet)
 {
     _res(packet);
 }
Example #15
0
 public void OnSelectionResult(Packet packet)
 {
     var p = (CharacterSelectionResultPacket)packet;
     if (p.Success)
     {
         _game.SwitchScreen("World");
     }
 }
Example #16
0
 public void OnCreateResult(Packet packet)
 {
     _action(packet);
 }
Example #17
0
 public void OnRequestCharacters(Packet packet)
 {
     if (Account == null) return;
     var chars = Account.GetCharactersForAccount(Account).ToList();
     Out.Yellow(string.Format("{0} has requested characters - {1} found", Account, chars.Count()));
     foreach (var c in chars)
     {
         PacketWriter.WritePacketAsync(new SelectableCharacterPacket { Name = c.Name, Id = c.Id }, _writer);
     }
 }
Example #18
0
 public void OnRequest(Packet packet)
 {
     _req(packet);
 }
        private Packet processAnswer(Packet client_packet)
        {
            UpdateTextBox2Callback tb2 = new UpdateTextBox2Callback(updateTextBox2);
            byte pck_id = client_packet.getPCK_ID();

            switch (pck_id)
            {
                case 0x05:
                    Packet sp3 = new Packet();
                    string hexString = "7c423d5858"; //data
                    byte[] more_data = Packet.StringToByteArray(hexString); //data
                    sp3.init_SERVER_P3(packet_cnt++, client_packet.getPCK_ID(), client_packet.getPCK_CNT(), more_data);
                    return sp3;
                default:
                    this.Invoke(tb2, new object[] { "UNKNOWN CLIENT PACKET ID" });
                    break;
            }

            return null;
        }
Example #20
0
        public void OnCreateCharacter(Packet packet)
        {
            if (Account == null) return;
            var p = (CreateCharacterPacket)packet;
            if (Character.GetCharacter(name: p.Name) == null)
            {
                if (Account.GetCharactersForAccount(Account).Count() < 3)
                {
                    var repo = DataConnection.Resolve().Repo;

                    var c = new Character { Id = Guid.NewGuid(), Name = p.Name, AccountId = Account.Id };
                    repo.Insert(c);
                    c.Location = new CharacterLocation
                    {
                        CharacterId = c.Id,
                        X = 0,
                        Y = 0,
                        MapId = _game.PrimaryMap.Id
                    };
                    repo.Insert(c.Location);
                    PacketWriter.WritePacketAsync(new CharacterCreationResultPacket { Success = true }, _writer);
                }
                else
                {
                    PacketWriter.WritePacketAsync(
                        new CharacterCreationResultPacket
                        {
                            Success = false,
                            Reason = "There are already three characters on this account."
                        }, _writer);
                }
            }
            else
            {
                PacketWriter.WritePacketAsync(
                    new CharacterCreationResultPacket { Success = false, Reason = "Character name already exists." },
                    _writer);
            }
        }
Example #21
0
 public void OnServerOffline(Packet packet)
 {
     MessageBox.Show(Resources.Connection_GivePacket_Server_has_shut_down_);
     Environment.Exit(0);
 }
Example #22
0
 public void OnChatMessage(Packet packet)
 {
     var p = (ChatMessagePacket)packet;
     Console.WriteLine(p.Message);
 }
Example #23
0
File: Map.cs Project: aevv/Biscuit
 public void SetMap(Packet p)
 {
     var packet = (SetMapPacket) p;
     Name = packet.Name;
     Loading = true;
     Loaded = false;
 }
Example #24
0
 public void OnSelectCharacter(Packet packet)
 {
     if (Account == null) return;
     var p = (SelectCharacterPacket)packet;
     var character = Character.GetCharacter(Account, p.Id);
     if (character != null)
     {
         Character = character;
         PacketWriter.WritePacketAsync(new CharacterSelectionResultPacket { Success = true }, _writer);
         Out.Yellow(string.Format("{0} selected character {1}", this, character));
         _game.AddClient(this);
     }
     else
     {
         Out.Red(string.Format("{0} tried to selected invalid character: {1}", this, p.Id));
         PacketWriter.WritePacketAsync(new CharacterSelectionResultPacket { Success = false }, _writer);
     }
 }
Example #25
0
        public void OnDeleteCharacter(Packet packet)
        {
            if (Account == null) return;
            var p = (DeleteCharacterPacket)packet;
            var c = Character.GetCharacter(Account, p.Id, p.Name);
            if (c != null)
            {
                var repo = DataConnection.Resolve().Repo;

                c.Deleted = true;
                repo.Update(c);
                PacketWriter.WritePacketAsync(new CharacterDeletionResultPacket { Success = true, Reason = "" }, _writer);
            }
            else
            {
                PacketWriter.WritePacketAsync(new CharacterDeletionResultPacket { Success = false, Reason = "Invalid character." }, _writer);
            }
        }
Example #26
0
        private void LoginResult(Packet packet)
        {
            var p = (LoginResultPacket)packet;

            if (p.Success)
            {
                DialogResult = DialogResult.OK;
                this.Call(Close);
            }
            else
            {
                infoLabel.Call(() => infoLabel.Text = string.Format("Login failed for user {0}.", userTextBox.Text));
                _loggingIn = false;
                ControlState(true);
                loginButton.Call(() => loginButton.Text = Resources.LoginForm_LoginRequest_Login);
            }
        }
Example #27
0
File: Map.cs Project: aevv/Biscuit
        public void MoveEntity(Packet p)
        {
            var packet = (EntityLocationPacket) p;
            var ent = _entities.FirstOrDefault(e => e.Id == packet.EntityId);

            if (ent == null)
            {
                ent = new Entity(packet.EntityId, packet.EntityType, new PointF(packet.X, packet.Y))
                {
                    Colour = Color4.Red,
                    Camera = Camera
                };
                _entities.Add(ent);
            }
            else
            {
                ent.Location = new PointF(packet.X, packet.Y);
            }
        }
Example #28
0
 public void OnLogin(Packet packet)
 {
     if (Account != null) return;
     var p = (LoginPacket)packet;
     Account = _auth.TryLogin(p.Username, p.Password);
     if (Account != null)
     {
         LoggedIn = true;
         Out.Yellow(string.Format("{0} logged in.", this));
         PacketWriter.WritePacketAsync(new LoginResultPacket { Success = true, Name = Account.Username },
             _writer);
     }
     else
     {
         Out.DarkYellow(string.Format("{0} failed to log in. User provided: {1}.", this, p.Username));
         PacketWriter.WritePacketAsync(new LoginResultPacket { Success = false, Name = p.Username }, _writer);
         Account = null;
     }
 }
        private void accept_n_process()
        {
            UpdateTextBox1Callback tb1 = new UpdateTextBox1Callback(updateTextBox1);
            UpdateTextBox2Callback tb2 = new UpdateTextBox2Callback(updateTextBox2);

            this.Invoke(tb1, new object[] { "accept_n_process started" });
            this.Invoke(tb2, new object[] { "accept_n_process started" });

            TcpClient client = null;

            try
            {
                while (srvRunning == true)
                {

                    client = server.AcceptTcpClient();
                    
                    Socket soc = client.Client;
                    soc.SendTimeout = 10000;
                    soc.ReceiveTimeout = 10000;
                    soc.NoDelay = true;

                    byte b = (byte)0x00;
                    byte[] data = new byte[1];
                    int bytes = 0;
                    int counter = 0;
                    ushort sizeOfReceivingFrame = (ushort)0x0000;
                    ushort rxCRC = (ushort)0x0000;
                    ushort crc = (ushort)0x0000;
                    byte crc_hb = (byte)0x00;
                    byte crc_lb = (byte)0x00;
                    bool pck_error = false;
                    bool rxOK = false;
                    bool crc_error = false;
                    bool end_error = false;
                    bool rx_len_error = false;
                    byte[] rxPacket = new byte[512];//cia tik atvaizdavimui reikalinga!
                    int idx = 0;

                    RX_STATE rxState = RX_STATE.WAIT_FOR_SYNC;

                    while ((pck_error == false && rxOK == false && (bytes = soc.Receive(data, 1, 0)) > 0))
                    {
                        //this.Invoke(tb1, new object[] { "byte received, bytes_size=" + bytes });

                        b = (byte)data[0];
                        switch (rxState)
                        {
                            case RX_STATE.WAIT_FOR_SYNC:
                                if (b != (byte)0x4D && b != (byte)0x61 && b != (byte)0x72)
                                {
                                    counter = 0;
                                    break;
                                }

                                counter++;
                                rxPacket[idx++] = b;

                                if (counter == 3)
                                {
                                    counter = 0;
                                    rxState = RX_STATE.RX_LENGTH;
                                }
                                break;
                            case RX_STATE.RX_LENGTH:
                                counter++;

                                if (counter == 1)
                                {
                                    sizeOfReceivingFrame = b;
                                    rxPacket[idx++] = b;
                                    break;
                                }

                                if (counter == 2)
                                {
                                    counter = 0;
                                    sizeOfReceivingFrame = (ushort)((sizeOfReceivingFrame << 8) | b);
                                    sizeOfReceivingFrame -= 4;// atmetam CRC ir END
                                    if (sizeOfReceivingFrame <= 0)
                                    {
                                        pck_error = true;
                                        rx_len_error = true;
                                        this.Invoke(tb1, new object[] { "RX_STATE.RX_LENGTH: pck_error" });
                                        break;
                                    }
                                    rxPacket[idx++] = b;
                                    rxState = RX_STATE.RX_DATA;
                                    break;
                                }
                                break;
                            case RX_STATE.RX_DATA:
                                rxPacket[idx++] = b;
                                counter++;
                                if (counter == sizeOfReceivingFrame)
                                {
                                    counter = 0;
                                    rxState = RX_STATE.RX_CRC;
                                    break;
                                }
                                break;
                            case RX_STATE.RX_CRC:
                                counter++;
                                if (counter == 1)
                                {
                                    crc_hb = b;
                                    rxPacket[idx++] = b;
                                    break;
                                }

                                if (counter == 2)
                                {
                                    crc_lb = b;
                                    rxPacket[idx++] = b;
                                    counter = 0;

                                    crc = (ushort)((crc_hb << 8) | crc_lb);

                                    rxCRC = calcCRC(rxPacket, idx);

                                    //Debug.WriteLine("server crc " + crc);
                                    //Debug.WriteLine("rxcrc" + rxCRC);

                                    if (crc != rxCRC)
                                    {
                                        this.Invoke(tb1, new object[] { "Server BAD CRC: calcCRC=" + word2hexstr(rxCRC) + " | crc=" + word2hexstr(crc) });
                                        this.Invoke(tb1, new object[] { "packet: " + toHexString(rxPacket) });
                                        pck_error = true;
                                        crc_error = true;
                                    }
                                    else
                                    {
                                        rxState = RX_STATE.RX_END;
                                        counter = 0;//
                                    }

                                    break;
                                }
                                break;
                            case RX_STATE.RX_END:
                                //   counter = 0;
                                if (b != (byte)0x56 && b != (byte)0x61)   // discard
                                {
                                    this.Invoke(tb1, new object[] { "MISSING END! ..." });
                                    this.Invoke(tb1, new object[] { "packet discarded: " + toHexString(rxPacket) });
                                    pck_error = true;
                                    end_error = true;
                                }
                                counter++;
                                rxPacket[idx++] = b;

                                if (counter == 2)
                                {
                                    rxPacket[idx++] = b;
                                    rxOK = true;
                                }

                                // 

                                break;
                        }
                    }

                    if (rxOK == true) // response
                    {
                        byte[] p = new byte[idx];
                        Array.Copy(rxPacket, p, idx);
                        Packet client_packet = new Packet();
                        client_packet.setPacket(p);
                        this.Invoke(tb1, new object[] { "OK: packet=" + client_packet.toHexString() });

                        Packet server_packet = processAnswer(client_packet);

                        if (server_packet != null)
                        {
                            soc.Send(server_packet.getRawPacket(), server_packet.getRawPacket().Length, 0);
                            this.Invoke(tb2, new object[] { "packet=" + server_packet.toHexString() });
                        }
                        else
                            this.Invoke(tb2, new object[] { "failed at processAnswer(): server_packet = null" });
                    }
                    else
                    {
                        this.Invoke(tb1, new object[] { "RX failed" });
                    }

                    client.Close();
                    this.Invoke(tb1, new object[] { "Connection closed" });
                }
            }
            catch (SocketException ex)
            {
                this.Invoke(tb1, new object[] { ex.Message });
                this.Invoke(tb2, new object[] { ex.Message });
                client.Close();
                this.Invoke(tb1, new object[] { "Connection closed after SocketException" });
            }
            catch (Exception exx)
            {
                this.Invoke(tb1, new object[] { exx.Message });
                this.Invoke(tb2, new object[] { exx.Message });
                client.Close();
                this.Invoke(tb1, new object[] { "Connection closed after Exception" });
            }

        }
Example #30
0
 public void OnLogout(Packet packet)
 {
     if (Account == null) return;
     Out.Cyan(string.Format("Client {0} logging out.", this));
     Kill();
 }