Пример #1
0
 public Packet ClientRead()
 {
     Packet p = new Packet();
     IPEndPoint ep = new IPEndPoint(IPAddress.Any, 29929);
     p.memBlock = Client.Receive(ref ep);
     return p;
 }
Пример #2
0
 public async void ClientReadInternal()
 {
     var d = await Client.ReceiveAsync();
     if (d.RemoteEndPoint.Port == 29929)
     {
         Packet p = new Packet();
         p.memBlock = d.Buffer;
         if (PacketReceived != null)
         {
             PacketReceived(this, new PacketEventArgs(p));
         }
     }
     ClientReadInternal();
 }
Пример #3
0
 public void Login()
 {
     Packet p = new Packet();
     p.PutByte((byte)PacketType.Login);     // Login-viesti
     p.PutString("v2.5"); // Ohjelmaversio
     p.PutString("SharpNM" + new Random().Next(int.MaxValue));    // Nimi
     ClientSend(p);                // Lähetys
     while (!IsLoggedIn)
     {
         NmClient_PacketReceived(null, new PacketEventArgs(ClientRead()));
     }
     //ClientReadInternal();
 }
Пример #4
0
 private void HandleLogin(Packet p)
 {
     var netmsg = p.GetByte(); // Luetaan kirjautumispyynnön vastaus
     switch ((PacketType)netmsg)
     {
         case PacketType.LoginFailed:
             {
                 // Kirjautuminen epäonnistui
                 // Luetaan syy
                 var reason = p.GetByte();
                 switch ((PacketType)reason)
                 {
                     case PacketType.WrongVersion:
                         // Väärä ohjelmaversio
                         // Luetaan palvelimen ohjelmaversio
                         throw new Exception("Wrong version! Server expected version " + p.GetString());
                     case PacketType.TooManyPlayers:
                         // Liikaa pelaajia
                         throw new Exception("Server is full");
                     case PacketType.NicknameInUse:
                         throw new Exception("Nickname in use");
                     default:
                         throw new Exception("Unexpected error!");
                 }
             }
         case PacketType.LoginOk:
             Uid = p.ClientId;
             PlayerId = p.GetByte();
             var playMode = p.GetByte();
             MapName = p.GetString();
             MapCRC = p.GetInt();
             MapServerUrl = p.GetString();
             p = new Packet();
             p.PutByte(PacketType.PlayerName);        // Pyydetään kaikki tiedot
             p.PutByte(PlayerId);      // Pelaajatunnus
             p.PutByte(PacketType.End);               // Viestin loppu
             ClientSend(p);
             IsLoggedIn = true;
             return;
             break;
     }
 }
Пример #5
0
 internal void Logout()
 {
     Packet p = new Packet();
     p.PutByte(PacketType.Logout);
     ClientSend(p);
     IsLoggedIn = false;
 }
Пример #6
0
        public void UpdatePlayer(byte shootNow, byte pickedItemId = 0)
        {
            Packet p = new Packet();
            p.PutByte((byte)PacketType.Player);
            p.PutByte(LocalPlayer.Id);
            p.PutShort((short)LocalPlayer.Position.X);
            p.PutShort((short)LocalPlayer.Position.Y);
            p.PutShort(LocalPlayer.Angle);

            if (LocalPlayer.HasAmmo == 0 || LocalPlayer.HeldWeapon == 0)
            {
                shootNow = 0;
            }

            // Tungetaan useampi muuttuja yhteen tavuun:
            byte b = (byte)((((int)LocalPlayer.HeldWeapon % 16) << 0)  // Ase (bitit 0-3)
              + (LocalPlayer.HasAmmo << 4)     // Onko ammuksia (bitti 4)
              + (shootNow << 5));          // Ammutaanko (bitti 5)

            p.PutByte(b);
            p.PutByte(pickedItemId);
            ClientSend(p);
        }
Пример #7
0
 public PacketEventArgs(Packet p)
 {
     this.p = p;
 }
Пример #8
0
 public void ClientSend(Packet data)
 {
     data.ClientId = this.Uid;
     System.Diagnostics.Debug.WriteLine("s " + BitConverter.ToString(data.memBlock));
     this.Client.Send(data.memBlock, data.memBlock.Length);
 }