コード例 #1
0
ファイル: Pong.cs プロジェクト: homiedopie/SharpFly
        public Pong(uint time, Socket socket)
        {
            OutgoingPacket packet = new OutgoingPacket(OpCodes.PONG);

            packet.Write(time);
            packet.Send(socket);
        }
コード例 #2
0
ファイル: SessionKey.cs プロジェクト: homiedopie/SharpFly
        public SessionKey(int sessionKey, Socket socket)
        {
            OutgoingPacket packet = new OutgoingPacket(OpCodes.SESSION_KEY);

            packet.Write(sessionKey);
            packet.Send(socket);
        }
コード例 #3
0
 public void SendPacket(OutgoingPacket op)
 {
     if (netClient != null)
     {
         netClient.SendPacket(op);
     }
 }
コード例 #4
0
        public LoginFail(uint errorCode, Socket socket)
        {
            OutgoingPacket packet = new OutgoingPacket(OpCodes.LOGIN_MESSAGE);

            packet.Write(errorCode);
            packet.Send(socket);
        }
コード例 #5
0
 public void SendToAll(OutgoingPacket outgoing)
 {
     foreach (GameConnection connection in this.Players.Values)
     {
         connection.SendPacket(outgoing);
     }
 }
コード例 #6
0
        public static void WritePkgOut(OutgoingPacket packet)
        {
            if (packet.PacketType == PacketType.Ping || packet.PacketType == PacketType.Pong)
            {
                return;
            }
            WriteType("[O]");
            switch (packet.PacketType)
            {
            case PacketType.Init1:
                Console.Write("InitID: ");
                Write(packet.Data[4].ToString(), ConsoleColor.Magenta);
                break;

            case PacketType.Ack:
            case PacketType.AckLow:
                Console.Write("Acking: ");
                Write(NetUtil.N2Hushort(packet.Data, 0).ToString(), ConsoleColor.Magenta);
                break;

            default:
                Console.Write(packet);
                break;
            }
            Console.WriteLine();
        }
コード例 #7
0
        /// <summary>
        /// A WebSocket implementation of the packet sending.
        /// </summary>
        public void Send(OutgoingPacket packet)
        {
            if (State == TransportStates.Closed ||
                State == TransportStates.Paused)
            {
                HTTPManager.Logger.Information("WebSocketTransport", string.Format("Send - State == {0}, skipping packet sending!", State), this.Manager.Context);
                return;
            }

            if (packet.IsBinary)
            {
                Implementation.Send(packet.PayloadData.Data, (ulong)packet.PayloadData.Offset, (ulong)packet.PayloadData.Count);
            }
            else
            {
                Implementation.Send(packet.Payload);
            }

            if (packet.Attachements != null)
            {
                for (int i = 0; i < packet.Attachements.Count; ++i)
                {
                    Implementation.Send(packet.Attachements[i]);
                }
            }
        }
コード例 #8
0
        private bool ENETServerQueueInternal(int connectionId, int channelId, ArraySegment <byte> data)
        {
            if (!ServerStarted)
            {
                Debug.LogError("Attempted to send while the server was not active");
                return(false);
            }

            if (channelId > Channels.Length)
            {
                Debug.LogWarning($"Ignorance: Attempted to send data on channel {channelId} when we only have {Channels.Length} channels defined");
                return(false);
            }

            OutgoingPacket op = default;

            op.connectionId = connectionId;
            op.channelId    = (byte)channelId;

            Packet dataPayload = default;

            dataPayload.Create(data.Array, data.Offset, data.Count + data.Offset, (PacketFlags)Channels[channelId]);

            op.payload = dataPayload;

            MirrorServerOutgoingQueue.Enqueue(op);
            return(true);
        }
コード例 #9
0
ファイル: ServerIp.cs プロジェクト: homiedopie/SharpFly
        public ServerIp(string ipAddress, Socket socket)
        {
            OutgoingPacket packet = new OutgoingPacket(OpCodes.SERVER_IP);

            packet.Write(ipAddress);
            packet.Send(socket);
        }
コード例 #10
0
        public byte[] GetBytes(Revision revision)
        {
            byte[] bytes = null;
            if (!this.Bytes.TryGetValue(revision, out bytes))
            {
                OutgoingPacket packet_ = null;
                if (BasicUtilies.GetRevisionPacketManager(revision).HandleOutgoing(this.Packet, out packet_))
                {
                    ServerMessage message = packet_.Handle(this.ValueHolder);
                    if (message == null || message is EmptyServerMessage)
                    {
                        bytes = null;
                    }
                    else
                    {
                        bytes = message.GetBytes();
                    }
                }
                else
                {
                    throw new Exception("Unable to find packet id: " + this.Packet + ", from: " + revision);
                }

                this.Bytes.Add(revision, bytes);
            }

            return(bytes);
        }
コード例 #11
0
        public void SendPacket(OutgoingPacket packet)
        {
            if (!_socket.Connected)
            {
                return;
            }
            MemoryStream ms = new MemoryStream();

            using (PacketOutput output = new PacketOutput(ms))
            {
                output.Write(0);
                output.Write(packet.GetPacketType().ToId());
                packet.Write(output);
            }
            byte[] buffer = ms.ToArray();
            _outgoingEncryption.Cipher(buffer, 5);
            int size = buffer.Length;

            byte[] a = BitConverter.GetBytes(IPAddress.NetworkToHostOrder(size));
            buffer[0] = a[0];
            buffer[1] = a[1];
            buffer[2] = a[2];
            buffer[3] = a[3];
            _socket?.Send(buffer);
        }
コード例 #12
0
ファイル: UdpSocket.cs プロジェクト: AnnexGameDev/Annex
 private void SendPacket(IPEndPoint endpoint, int packetID, OutgoingPacket packet)
 {
     byte[] payload  = packet.GetBytes();
     byte[] datagram = new byte[payload.Length + 4];
     Array.Copy(payload, 0, datagram, 4, payload.Length);
     Array.Copy(BitConverter.GetBytes(packetID), 0, datagram, 0, 4);
     this._socket.BeginSend(datagram, datagram.Length, endpoint, this.SendCallback, null);
 }
コード例 #13
0
ファイル: Client.cs プロジェクト: AnnexGameDev/Annex
 public override void SendPacket(object baseConnection, int packetID, OutgoingPacket packet)
 {
     while (this._senderReceiver == null)
     {
         ;
     }
     this._senderReceiver.SendPacket(packetID, packet);
 }
コード例 #14
0
        public override void SendPacket(int packetID, OutgoingPacket packet)
        {
            var message = this._lidgrenClient.CreateMessage();

            message.Write(packetID);
            message.Write(packet.GetBytes());
            this._lidgrenClient.SendMessage(message, this._method);
        }
コード例 #15
0
ファイル: QueryTickCount.cs プロジェクト: homiedopie/SharpFly
        public QueryTickCount(uint time, Socket socket)
        {
            OutgoingPacket packet = new OutgoingPacket(OpCodes.QUERY_TICK_COUNT);

            packet.Write(time);
            packet.Write((uint)DateTime.Now.Ticks);
            packet.Send(socket);
        }
コード例 #16
0
        public override bool ServerDisconnect(int connectionId)
        {
            OutgoingPacket op = default;

            op.connectionId = connectionId;
            op.commandType  = CommandPacketType.BootToTheFace;
            return(true);
        }
コード例 #17
0
ファイル: CharacterList.cs プロジェクト: homiedopie/SharpFly
        public CharacterList(uint authKey, Dictionary <CharacterSlot, Character> characters, Socket socket)
        {
            // not finished

            OutgoingPacket packet = new OutgoingPacket(OpCodes.CHARACTER_LIST);

            packet.Write(authKey);               // authkey
            packet.Write(characters.Keys.Count); // character count

            // if > 0 characters
            if (characters.Keys.Count > 0)
            {
                foreach (KeyValuePair <CharacterSlot, Character> character in characters)
                {
                    packet.Write(character.Key.SlotId);
                    packet.Write(2);    // Character block
                    packet.Write(character.Value.Map);
                    packet.Write(0x0B); // Index? 0x0B?
                    packet.Write(character.Value.Name);
                    packet.Write(character.Value.Position.X);
                    packet.Write(character.Value.Position.Y);
                    packet.Write(character.Value.Position.Z);
                    packet.Write(character.Value.CharacterId);
                    packet.Write(0); // ID Party
                    packet.Write(0); // ID Guild
                    packet.Write(0); // ID War
                    packet.Write(character.Value.Skinset);
                    packet.Write(character.Value.HairStyle);
                    packet.Write(character.Value.HairColor);
                    packet.Write(character.Value.HeadMesh);
                    packet.Write(character.Value.Gender);
                    packet.Write(character.Value.ClassId);
                    packet.Write(character.Value.Level);
                    packet.Write(0); // Job level
                    packet.Write(character.Value.Strength);
                    packet.Write(character.Value.Stamina);
                    packet.Write(character.Value.Dexterity);
                    packet.Write(character.Value.Intelligence);
                    packet.Write(0); // Mode
                    packet.Write(0); // equipcount

                    // for each item
                    if (false)
                    {
                        packet.Write(0); // itemid
                    }
                }
            }

            packet.Write(0); // countmessenger
            // for each in countmessenger
            if (false)
            {
                packet.Write(0); // slot? (byte)
            }

            packet.Send(socket);
        }
コード例 #18
0
        public override bool ServerDisconnect(int connectionId)
        {
            OutgoingPacket op = default;

            op.connectionId = connectionId;
            op.commandType  = CommandPacketType.ServerWantsToDisconnectClient;

            MirrorServerOutgoingQueue.Enqueue(op);
            return(true);
        }
コード例 #19
0
ファイル: AuthQuery.cs プロジェクト: homiedopie/SharpFly
        public AuthQuery(int value1, int value2, int value3, int value4, Socket socket)
        {
            OutgoingPacket packet = new OutgoingPacket(OpCodes.PONG);

            packet.Write(value1);
            packet.Write(value2);
            packet.Write(value3);
            packet.Write(value4);
            packet.Send(socket);
        }
コード例 #20
0
 public void SendPacket(OutgoingPacket packet)
 {
     if (!Disposed)
     {
         NetworkProccessor.ProcessPacket(new NPacket()
         {
             Packet            = packet,
             OnPacketProcessed = onPacketProcessed
         });
     }
 }
コード例 #21
0
        private protected override void SendPacket(T client, int packetID, OutgoingPacket packet)
        {
            var connection = client.BaseConnection as NetConnection;

            Debug.Assert(connection != null, $"Client was null");

            var message = this._lidgrenServer.CreateMessage();

            message.Write(packetID);
            message.Write(packet.GetBytes());
            this._lidgrenServer.SendMessage(message, connection, this._method);
        }
コード例 #22
0
        public void Send(OutgoingPacket packet)
        {
            var headerLength = packet.HeaderLength;
            var length       = packet.Length;
            var totalLength  = headerLength + length;

            // Insert the header.
            var bytes = new byte[totalLength];

            _propagator.WriteHeader(packet, bytes);

            // Insert the payload.
            packet.Position = 0;
            packet.BaseStream.Read(bytes, headerLength, length);

            // Encrypt if some sort of encryption scheme has been set.
            if (Crypt != null)
            {
                Crypt.Encrypt(bytes, 0, headerLength);
            }

            var args = SocketAsyncEventArgsPool.Acquire();

            args.SetBuffer(bytes, 0, totalLength);
            args.Completed += OnSend;

            try
            {
                if (!_socket.SendAsync(args))
                {
                    OnSend(this, args);
                }
            }
            catch (Exception ex)
            {
                args.Completed -= OnSend;
                SocketAsyncEventArgsPool.Release(args);
                Disconnect();

                if (ex is ObjectDisposedException)
                {
                    return;
                }

                if (ex is SocketException)
                {
                    ExceptionManager.RegisterException(ex);
                    return;
                }

                throw;
            }
        }
コード例 #23
0
 public void Send(OutgoingPacket packet)
 {
     try
     {
         lonelyPacketList.Add(packet);
         Send(lonelyPacketList);
     }
     finally
     {
         lonelyPacketList.Clear();
     }
 }
コード例 #24
0
ファイル: SenderReceiver.cs プロジェクト: AnnexGameDev/Annex
        public void SendPacket(int packetIDNumber, OutgoingPacket outgoingPacket)
        {
            var packetPayload = outgoingPacket.GetBytes();
            var packetID      = BitConverter.GetBytes(packetIDNumber);
            var packetSize    = BitConverter.GetBytes(packetPayload.Length + packetID.Length);
            var fullPacket    = new byte[packetSize.Length + packetID.Length + packetPayload.Length];

            Array.Copy(packetSize, 0, fullPacket, 0, packetSize.Length);
            Array.Copy(packetID, 0, fullPacket, packetSize.Length, packetID.Length);
            Array.Copy(packetPayload, 0, fullPacket, packetID.Length + packetSize.Length, packetPayload.Length);

            this._socket.BeginSend(fullPacket, 0, fullPacket.Length, SocketFlags.None, SendCallback, null);
        }
コード例 #25
0
ファイル: r63aPacketManager.cs プロジェクト: res7702/Skylight
 public override bool HandleOutgoing(OutgoingPacketsEnum id, out OutgoingPacket packet)
 {
     if (this.OutgoingPackets.ContainsKey(id))
     {
         packet = this.OutgoingPackets[id];
         return(true);
     }
     else
     {
         packet = null;
         return(false);
     }
 }
コード例 #26
0
        public override void SendPacket(OutgoingPacket packet)
        {
            byte[] data = packet.GetBytes();

            byte[] data_ = new byte[data.Length + 2];
            data_[0] = (byte)data.Length;
            data_[1] = (byte)(data.Length >> 8);
            for (int i = 0; i < data.Length; i++)
            {
                data_[i + 2] = data[i];
            }

            this.SendData(data_);
        }
コード例 #27
0
        public void SendPacket(OutgoingPacket packet, Action <bool> completed = null)
        {
            byte[] data = packet.GetBytes();

            byte[] data_ = new byte[data.Length + 2];
            data_[0] = (byte)data.Length;
            data_[1] = (byte)(data.Length >> 8);
            for (int i = 0; i < data.Length; i++)
            {
                data_[i + 2] = data[i];
            }

            this.SendData(data_, completed);
        }
コード例 #28
0
        private static void Authenticate()
        {
            //SaveData authData = SaveManager.GetActiveSave();
            SaveData       authData   = SaveManager.GetSave(0);
            OutgoingPacket authPacket = new OutgoingPacket(authData);

            using (MemoryStream memoryStream = new MemoryStream())
            {
                BinaryFormatter formatter = new BinaryFormatter();
                formatter.Serialize(memoryStream, authPacket);

                byte[] serializedData = memoryStream.ToArray();
                client.Send(serializedData, serializedData.Length);
            }
        }
コード例 #29
0
        private static void EmptyOutgoingStack()
        {
            while (packetStack.Count != 0)
            {
                OutgoingPacket outgoingPacket = packetStack.Dequeue();
                using (MemoryStream memoryStream = new MemoryStream())
                {
                    BinaryFormatter formatter = new BinaryFormatter();
                    formatter.Serialize(memoryStream, outgoingPacket);

                    byte[] serializedData = memoryStream.ToArray();
                    client.Send(serializedData, serializedData.Length);
                }
            }
        }
コード例 #30
0
ファイル: CharacterList.cs プロジェクト: Mootie/SharpFly
        public CharacterList(uint TimeGetTime, Socket socket)
        {
            // not finished

            OutgoingPacket packet = new OutgoingPacket(OpCodes.CHARACTER_LIST);

            packet.Write(TimeGetTime);

            // if 0 characters
            packet.Write(0);
            packet.Write(0);
            packet.Send(socket);

            // if >0 characters
        }
コード例 #31
0
ファイル: NetworkManager.cs プロジェクト: RavenB/gridsearch
        private void OutgoingPacketHandler()
        {
            OutgoingPacket outgoingPacket = new OutgoingPacket();
            Simulator simulator = null;
            Packet packet = null;
            int now;
            int lastPacketTime = Environment.TickCount;

            while (connected)
            {
                if (PacketOutbox.Dequeue(100, ref outgoingPacket))
                {
                    simulator = outgoingPacket.Simulator;
                    packet = outgoingPacket.Packet;

                    // Very primitive rate limiting, keeps a fixed buffer of time between each packet
                    now = Environment.TickCount;
                    int ms = now - lastPacketTime;

                    if (ms < 75)
                    {
                        //Logger.DebugLog(String.Format("Rate limiting, last packet was {0}ms ago", ms));
                        Thread.Sleep(75 - ms);
                    }

                    lastPacketTime = now;
                    simulator.SendPacketUnqueued(packet, outgoingPacket.SetSequence);
                }
            }
        }