Ejemplo n.º 1
0
        //public static void SendPacket_VF<T_Data>(this NetClient _Client, WLN_PacketType _PacketType, T_Data _Data, bool _Flush = true)
        //{
        //    NetOutgoingMessage newMessage = _Client.CreateMessage();
        //    newMessage.Write((byte)_PacketType);
        //    var memoryReturnBuffer = new System.IO.MemoryStream();
        //    Serializer.Serialize(memoryReturnBuffer, _Data);
        //    memoryReturnBuffer.Position = 0;
        //    byte[] returnBytes = new byte[memoryReturnBuffer.Length];
        //    memoryReturnBuffer.Read(returnBytes, 0, (int)memoryReturnBuffer.Length);
        //    newMessage.Write((int)returnBytes.Length);
        //    newMessage.Write(returnBytes);
        //    _Client.SendMessage(newMessage, NetDeliveryMethod.ReliableOrdered, 0);
        //    if (_Flush == true)
        //        _Client.FlushSendQueue();
        //}
        //public static void SendPacket_VF<T_Data>(this NetConnection _Connection, WLN_PacketType _PacketType, T_Data _Data)
        //{
        //    NetOutgoingMessage newMessage = _Connection.Peer.CreateMessage();
        //    newMessage.Write((byte)_PacketType);
        //    var memoryReturnBuffer = new System.IO.MemoryStream();
        //    Serializer.Serialize(memoryReturnBuffer, _Data);
        //    memoryReturnBuffer.Position = 0;
        //    byte[] returnBytes = new byte[memoryReturnBuffer.Length];
        //    memoryReturnBuffer.Read(returnBytes, 0, (int)memoryReturnBuffer.Length);
        //    newMessage.Write((int)returnBytes.Length);
        //    newMessage.Write(returnBytes);
        //    _Connection.SendMessage(newMessage, NetDeliveryMethod.ReliableOrdered, 0);
        //}
        //public static T_Data RecvPacketData_VF<T_Data>(this NetIncomingMessage _Message)
        //{
        //    int packetLength = _Message.ReadInt32();
        //    byte[] rawData = _Message.ReadBytes(packetLength);
        //    var memoryBuffer = new System.IO.MemoryStream(rawData);
        //    T_Data dataReceived = Serializer.Deserialize<T_Data>(memoryBuffer);
        //    return dataReceived;
        //}
        public static bool RecvPacket_VF <T_Data>(this VF.NetworkClient _Client, WLN_PacketType _PacketType, out T_Data _RetData, TimeSpan _Timeout)
        {
            DateTime startRecv = DateTime.Now;

            if (_Client.WaitForConnect(_Timeout) == false)
            {
                throw new Exception("Not Connected");
            }
            VF.NetworkIncommingMessage msg;
            while (_Client.IsConnected())
            {
                msg = _Client.WaitMessage(_Timeout);
                if (msg != null)
                {
                    if (msg.MessageType == VF.NetworkMessageType.RawData)
                    {
                        WLN_PacketType packetType = (WLN_PacketType)msg.ReadByte();
                        if (packetType == _PacketType)
                        {
                            _RetData = msg.ReadClass <T_Data>();
                            return(true);
                        }
                        else
                        {
                            _RetData = default(T_Data);
                            return(false);// throw new Exception("Unexpected Packet");
                        }
                    }
                }
                if ((DateTime.Now - startRecv) > _Timeout)
                {
                    throw new TimeoutException("Could not receive packet within the time period");
                }
            }
            _RetData = default(T_Data);
            throw new Exception("Not Connected");
        }
Ejemplo n.º 2
0
        private void ListenerThread()
        {
            VF.NetworkIncommingMessage msg;
            while (m_ListenerThread != null)
            {
                try
                {
                    while ((msg = m_Server.WaitMessage(TimeSpan.FromMilliseconds(1000))) != null)
                    {
                        switch (msg.MessageType)
                        {
                        case VF.NetworkMessageType.RawData:
                        {
                            // incoming message from a client
                            WLN_PacketType packetType = (WLN_PacketType)msg.ReadByte();
                            if (packetType == WLN_PacketType.Request_AddonUpdateInfo)
                            {
                                #region BACKWARDS_COMPATIBILITY_ONLY
                                BackwardsCompatible_Request_AddonUpdateInfo(msg);
                                #endregion BACKWARDS_COMPATIBILITY_ONLY
                            }
                            else if (packetType == WLN_PacketType.Request_AddonUpdateInfoNew)
                            {
                                WLN_RequestPacket_AddonUpdateInfoNew      addonUpdateInfoRequest = msg.ReadClass <WLN_RequestPacket_AddonUpdateInfoNew>();
                                List <WLN_ResponsePacket_AddonUpdateInfo> result = new List <WLN_ResponsePacket_AddonUpdateInfo>();
                                Logger.ConsoleWriteLine("Received Request_AddonUpdateInfoNew from IP=" + msg.SenderIP.ToString() + ", UserID=" + addonUpdateInfoRequest.UserID + ", LauncherVersion=" + addonUpdateInfoRequest.LauncherVersion);

                                Random rand = new Random((int)DateTime.UtcNow.Ticks);
                                foreach (var addon in addonUpdateInfoRequest.Addons)
                                {
                                    WLN_ResponsePacket_AddonUpdateInfo addonUpdateInfo = AddonUpdates.GetAddonUpdate(addonUpdateInfoRequest.UserID, addon);
                                    if (addonUpdateInfo != null)
                                    {
                                        result.Add(addonUpdateInfo);
                                    }
                                }
                                var response = msg.CreateResponseMessage(-1);        //.SenderConnection.SendPacket_VF(WLN_PacketType.Response_AddonUpdateInfo, result);
                                response.WriteByte((byte)WLN_PacketType.Response_AddonUpdateInfo);
                                response.WriteClass(result);
                                m_Server.SendMessage(response);
                            }
                            else if (packetType == WLN_PacketType.Request_AddonUpdateInfoPeek)
                            {
                                WLN_RequestPacket_AddonUpdateInfoPeek  addonUpdateInfoRequest = msg.ReadClass <WLN_RequestPacket_AddonUpdateInfoPeek>();
                                WLN_ResponsePacket_AddonUpdateInfoPeek result = new WLN_ResponsePacket_AddonUpdateInfoPeek();
                                if (AddonUpdates.g_LastAddonUpdateTimeUTC > DateTime.UtcNow.AddMinutes(-addonUpdateInfoRequest.MinutesSinceLastPeek))
                                {
                                    result.AddonUpdatesAvailable.Add("null");
                                }
                                var response = msg.CreateResponseMessage(-1);        //.SenderConnection.SendPacket_VF(WLN_PacketType.Response_AddonUpdateInfo, result);
                                response.WriteByte((byte)WLN_PacketType.Response_AddonUpdateInfoPeek);
                                response.WriteClass(result);
                                m_Server.SendMessage(response);
                            }
                            else if (packetType == WLN_PacketType.Upload_AddonData)
                            {
                                WLN_UploadPacket_AddonData uploadedAddonData = msg.ReadClass <WLN_UploadPacket_AddonData>();
                                Logger.ConsoleWriteLine("Received Upload_AddonData(" + uploadedAddonData.AddonName + ") from " + msg.SenderIP.ToString());
                                AddonDatabaseService.UploadData(msg.SenderIP, uploadedAddonData);
                                var successResponse = new WLN_UploadPacket_SuccessResponse();

                                var response = msg.CreateResponseMessage(-1);        //.SenderConnection.SendPacket_VF(WLN_PacketType.Response_AddonUpdateInfo, result);
                                response.WriteByte((byte)WLN_PacketType.Upload_SuccessResponse);
                                response.WriteClass(successResponse);
                                m_Server.SendMessage(response);
                            }
                            else if (packetType == WLN_PacketType.Request_RegisterNewUserID)
                            {
                                //WLN_Request_RegisterNewUserID registerPacket = msg.ReadClass<WLN_Request_RegisterNewUserID>();
                                //Logger.ConsoleWriteLine("Received Register New UserID Request from: \"" + registerPacket.UserID + "\" using password: \"" + registerPacket.RegisterPassword + "\" registering name: \"" + registerPacket.NewUsername + "\"", ConsoleColor.Yellow);

                                //var responseData = new WLN_Response_RegisterNewUserID();
                                //responseData.UserID = "";

                                //string userID = "";
                                //if (ContributorHandler.GenerateUserID(registerPacket.NewUsername, out userID) == true)
                                //{
                                //    ContributorHandler.AddVIPContributor(userID);
                                //    ContributorHandler.Save(Program.g_RPPDBFolder + "Database\\");
                                //    UpdateContributorsList();
                                //}

                                //var response = msg.CreateResponseMessage(-1);
                                //response.WriteByte((byte)WLN_PacketType.Response_RegisterNewUserID);
                                //response.WriteClass(responseData);
                                //m_Server.SendMessage(response);
                            }
                            else
                            {
                                Logger.ConsoleWriteLine("Some unknown data: type=" + (int)packetType + ", dataSize=" + msg.MessageSize, ConsoleColor.Red);
                            }
                        }
                        break;

                        default:
                            Logger.ConsoleWriteLine("Unknown Message Received" + "MessageType: " + msg.MessageType + " MessageSize: " + msg.MessageSize + " bytes", ConsoleColor.Red);
                            break;
                        }
                    }
                }
                catch (Exception ex)
                {
                    Logger.LogException(ex);
                }
            }
        }
Ejemplo n.º 3
0
 public static bool RecvPacket_VF <T_Data>(this VF.NetworkClient _Client, WLN_PacketType _PacketType, out T_Data _RetData)
 {
     return(RecvPacket_VF(_Client, _PacketType, out _RetData, TimeSpan.FromSeconds(60)));
 }