Beispiel #1
0
        private void handleData(DataPacket data)
        {
            switch (data.type)
            {
            case "LOGINRESPONSE":
            {
                DataPacket <LoginResponsePacket> d = data.GetData <LoginResponsePacket>();
                if (d.data.status == "OK")
                {
                    this._loggedIn = true;
                    OnLogin?.Invoke(this._loggedIn, d.data.chatLog);
                    Console.WriteLine("You are logged in!");
                }
                else if (d.data.status == ("ERROR"))
                {
                    this._loggedIn = false;
                    OnLogin?.Invoke(this._loggedIn, d.data.chatLog);
                    Console.WriteLine("Your username and/or password is not valid!");
                }
                break;
            }

            case "REGISTERRESPONSE":
            {
                DataPacket <RegisterResponsePacket> d = data.GetData <RegisterResponsePacket>();
                if (d.data.status == "OK")
                {
                    this._registered = true;
                    OnRegister?.Invoke(this._registered);
                    Console.WriteLine("You are Registered");

                    this._loggedIn = true;
                    OnLogin?.Invoke(this._loggedIn, d.data.chatLog);
                    Console.WriteLine("You are logged in!");
                }
                else if (d.data.status == ("ERROR"))
                {
                    this._registered = false;
                    OnRegister?.Invoke(this._registered);
                    Console.WriteLine("Your username is already taken");
                }
                break;
            }

            case "CHAT":
            {
                DataPacket <ChatPacket> d = data.GetData <ChatPacket>();

                OnChatReceived?.Invoke($"{d.data.chatMessage}\r\n");
                break;
            }

            default:
                Console.WriteLine("Type is not valid");
                break;
            }
        }
Beispiel #2
0
 private void OnChatMessageReceived(string username, string timestamp, string message)
 {
     OnChatReceived?.Invoke(this, new OnChatReceivedEventArgs
     {
         ChatItem = new ChatItem
         {
             Username  = username,
             Timestamp = DateTime.Parse(timestamp),
             Content   = message,
         }
     });
 }
Beispiel #3
0
        private async Task _connection_Closed(Exception arg, string hostname)
        {
            OnChatReceived?.Invoke(this, new OnChatReceivedEventArgs
            {
                ChatItem = new ChatItem
                {
                    Username  = "******",
                    Timestamp = DateTime.UtcNow,
                    Content   = "Connection lost... Attempting to reconnect...",
                }
            });
            await Task.Delay(1000);

            Start(_username);
        }
Beispiel #4
0
        public void SetGamePacketTransferEnabled(bool enabled, string macAddress)
        {
            _connection.InvokeAsync("RegisterMacAddress", _username, macAddress);
            _enableGamePacketTransfer = enabled;

            if (enabled)
            {
                OnChatReceived?.Invoke(this, new OnChatReceivedEventArgs
                {
                    ChatItem = new ChatItem
                    {
                        Username  = "******",
                        Timestamp = DateTime.UtcNow,
                        Content   = "Device found! You are now ready to play!",
                    }
                });
            }
        }
Beispiel #5
0
        private void handleData(Sentence data)
        {
            try
            {
                switch (data.getMessageType())
                {
                case Sentence.Type.SERVER_MESSAGE:
                {
                    OnChatReceived?.Invoke($"{data.getSender()}: {data.getData()}\r\n");
                    break;
                }

                case Sentence.Type.USERSMESSAGE:
                {
                    OnClientListReceived?.Invoke(data.Data);
                    Console.WriteLine("All clients: ");
                    Console.WriteLine(data.Data);
                    break;
                }

                case Sentence.Type.DISCONNECT_REQUEST:
                {
                    SendData("$DISCONNECT");
                    OnMessageBoxShow?.Invoke($"You got kicked!\nReason: {data.getData()}", MessageBoxButtons.OK);
                    break;
                }

                default:
                    break;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
Beispiel #6
0
        private void handleData(DataPacket data)
        {
            switch (data.type)
            {
            case "LOGINRESPONSE":
            {
                DataPacket <LoginResponse> d = data.GetData <LoginResponse>();
                if (d.data.status == "OK" && !d.data.isClient)
                {
                    this.loggedIn = true;
                    OnLogin?.Invoke(this.loggedIn);
                    Console.WriteLine("You are logged in!");
                }
                else if (d.data.status == ("ERROR"))
                {
                    this.loggedIn = false;
                    OnLogin?.Invoke(this.loggedIn);
                    Console.WriteLine("Your username and/or password is not valid!");
                }
                break;
            }

            case "CHAT":
            {
                DataPacket <ChatPacket> d = data.GetData <ChatPacket>();

                OnChatReceived?.Invoke(d.sender, d.data.receiver, $"{d.sender}: {d.data.chatMessage}\r\n", d.data.isDoctorMessage);
                break;
            }

            case "RESPONSE_CLIENTLIST":
            {
                DataPacket <ClientListPacket> d = data.GetData <ClientListPacket>();
                OnClientListReceived?.Invoke(d.data.clientList);
                break;
            }

            case "BIKEDATA":
            {
                DataPacket <BikeDataPacket> d = data.GetData <BikeDataPacket>();
                OnBikeDataReceived?.Invoke(d);
                break;
            }

            case "RESPONSE_SESSIONSTATE":
            {
                DataPacket <ResponseSessionStatePacket> d = data.GetData <ResponseSessionStatePacket>();
                OnSessionStateReceived?.Invoke(d.data.receiver, d.data.startTimeSession, d.data.sessionState);
                break;
            }

            case "SESSIONSTATE_RESPONSE":
            {
                DataPacket <StartStopPacket> d = data.GetData <StartStopPacket>();
                OnSessionStateMessageReceived?.Invoke(d.sender, d.data.startSession);
                break;
            }

            case "RESPONSE_BIKE_STATE":
            {
                DataPacket <ResponseBikeState> d = data.GetData <ResponseBikeState>();
                OnBikeStateChanged?.Invoke(d.sender, d.data.bikeIsConnected);
                break;
            }

            case "SESSIONSTATE_EMERGENCYRESPONSE":
            {
                DataPacket <EmergencyResponsePacket> d = data.GetData <EmergencyResponsePacket>();
                OnEmergencyResponse?.Invoke(d.sender, d.data.state);
                break;
            }

            case "RESPONSE_TRAINING_LIST":
            {
                DataPacket <ResponseTrainingList> d = data.GetData <ResponseTrainingList>();
                this.OnTrainingListReceived?.Invoke(d.data.forClient, d.data.trainingList);
                break;
            }

            case "RESPONSE_TRAINING_DATA":
            {
                DataPacket <ResponseTrainingData> d = data.GetData <ResponseTrainingData>();
                this.OnTrainingDataReceived?.Invoke(d.data.forClient, d.data.trainingName, d.data.trainingData);
                break;
            }

            case "DISCONNECT_REQUEST":
            {
                DataPacket <ChatPacket> d = data.GetData <ChatPacket>();
                Disconnect();
                break;
            }

            default:
                Console.WriteLine("Type is not valid");
                break;
            }
        }
Beispiel #7
0
        public bool Refresh()
        {
            if (ffxivProcess != null)
            {
                ffxivProcess.Refresh();
                if (ffxivProcess.HasExited)
                {
                    OnProcessLost?.Invoke(this, EventArgs.Empty);
                    ffxivProcess = null;
                    hasLost      = true;
                    Reset();

                    Console.WriteLine("Exited game");
                }
                if (IsScanning() && !hasScanned)
                {
                    Console.WriteLine("Scanning...");
                    while (IsScanning())
                    {
                        Thread.Sleep(100);
                    }
                    Console.WriteLine("Finished scanning");
                    OnProcessReady?.Invoke(this, ffxivProcess);
                    hasScanned = true;
                }
            }
            if ((ffxivProcess == null) && hasLost)
            {
                OnProcessSeek?.Invoke(this, EventArgs.Empty);
                hasLost = false;
                return(false);
            }


            if (Reader.CanGetCharacterId())
            {
                string id = Reader.GetCharacterId();
                if (!string.IsNullOrEmpty(id))
                {
                    if (string.IsNullOrEmpty(CharacterID) ||
                        (!string.IsNullOrEmpty(CharacterID) && !CharacterID.Equals(id)))
                    {
                        CharacterID = id;
                    }
                }
            }
            if (Reader.CanGetPlayerInfo())
            {
                CurrentPlayerResult res = Reader.GetCurrentPlayer();
                if (res.CurrentPlayer.Job != currentPlayer.CurrentPlayer.Job)
                {
                    if (currentPlayer.CurrentPlayer.Job == Sharlayan.Core.Enums.Actor.Job.Unknown)
                    {
                        // Logged in
                        OnCurrentPlayerLogin?.Invoke(this, res);
                        isLoggedIn = true;
                    }
                    else if (res.CurrentPlayer.Job == Sharlayan.Core.Enums.Actor.Job.Unknown)
                    {
                        // Logged out
                        OnCurrentPlayerLogout?.Invoke(this, currentPlayer);
                        isLoggedIn = false;
                        Reset();
                    }
                    else
                    {
                        OnCurrentPlayerJobChange?.Invoke(this, currentPlayer);
                    }
                }
                currentPlayer = res;
            }
            if (!isLoggedIn)
            {
                return(false);
            }
            if (Reader.CanGetPartyMembers())
            {
                PartyResult party2 = Reader.GetPartyMembers();
                if (party2.NewPartyMembers.Count > 0 ||
                    party2.RemovedPartyMembers.Count > 0)
                {
                    // Something changed
                    party = party2;
                    OnPartyChanged?.Invoke(this, party2);
                }
                int pcount  = party.PartyMembers.Count;
                int pcount2 = party2.PartyMembers.Count;
                if (!(party is PartyResult) || (party is PartyResult && (pcount != pcount2)))
                {
                    party = party2;
                    OnPartyChanged?.Invoke(this, party2);
                }
            }
            if (Reader.CanGetPerformance())
            {
                List <uint>       changedIds = new List <uint>();
                PerformanceResult perf       = Reader.GetPerformance();
                if (!perf.Performances.IsEmpty && !performance.Performances.IsEmpty)
                {
                    foreach (KeyValuePair <uint, PerformanceItem> pp in perf.Performances)
                    {
                        if (pp.Value.Status != performance.Performances[pp.Key].Status)
                        {
                            changedIds.Add(pp.Key);
                        }
                    }
                }

                if (changedIds.Count > 0)
                {
                    List <uint> actorIds = new List <uint>();
                    if (Reader.CanGetActors())
                    {
                        foreach (ActorItem actor in Reader.GetActors().CurrentPCs.Values)
                        {
                            if (changedIds.Contains(actor.PerformanceID / 2))
                            {
                                actorIds.Add(actor.ID);
                            }
                        }
                    }
                    if (actorIds.Count > 0)
                    {
                        OnPerformanceChanged?.Invoke(this, actorIds);
                    }
                }

                //Update
                performance = perf;

                bool r = perf.Performances[0].IsReady();
                if (r != performanceReady)
                {
                    performanceReady = r;
                    OnPerformanceReadyChanged?.Invoke(this, performanceReady);
                }
            }

            logItems.Clear();
            if (Reader.CanGetChatLog())
            {
                ChatLogResult readResult = Reader.GetChatLog(_previousArrayIndex, _previousOffset);
                _previousArrayIndex = readResult.PreviousArrayIndex;
                _previousOffset     = readResult.PreviousOffset;
                foreach (ChatLogItem item in readResult.ChatLogItems)
                {
                    logItems.Push(item);
                    completeLog.Add(item);
                    OnChatReceived?.Invoke(this, item);
                }
            }
            if (Reader.CanGetActors())
            {
                int jobsum0 = 0;
                if (actors != null)
                {
                    jobsum0 = actors.CurrentPCs.Sum(e => (int)e.Value.Job);
                }

                ActorResult actorRes = Reader.GetActors();
                if (actors != null)
                {
                    if (actorRes.CurrentPCs.Count != actors.CurrentPCs.Count)
                    {
                        actors = actorRes;
                        OnPcChanged?.Invoke(this, actorRes.CurrentPCs.ToDictionary(k => k.Key, k => k.Value as ActorItemBase));
                    }
                    int jobsum1 = actorRes.CurrentPCs.Sum(e => (int)e.Value.Job);

                    if (jobsum0 != jobsum1)
                    {
                        actors = actorRes;
                        OnPcChanged?.Invoke(this, actorRes.CurrentPCs.ToDictionary(k => k.Key, k => k.Value as ActorItemBase));
                    }
                }
                else
                {
                    actors = actorRes;
                    OnPcChanged?.Invoke(this, actorRes.CurrentPCs.ToDictionary(k => k.Key, k => k.Value as ActorItemBase));
                }
            }
            return(true);
        }
Beispiel #8
0
        private void handleData(DataPacket data)
        {
            switch (data.type)
            {
            case "LOGINRESPONSE":
            {
                DataPacket <LoginResponse> d = data.GetData <LoginResponse>();
                if (d.data.status == "OK" && d.data.isClient)
                {
                    this.loggedIn = true;
                    OnLogin?.Invoke(this.loggedIn);
                    Console.WriteLine("You are logged in!");
                }
                else if (d.data.status == ("ERROR"))
                {
                    this.loggedIn = false;
                    OnLogin?.Invoke(this.loggedIn);
                    Console.WriteLine("Your username and/or password is not valid!");
                }

                break;
            }

            case "CHAT":
            {
                DataPacket <ChatPacket> d = data.GetData <ChatPacket>();
                OnChatReceived?.Invoke($"{d.sender}: {d.data.chatMessage}\r\n");
                break;
            }

            case "USERNAME_RESPONSE":
            {
                DataPacket <UserNamePacketResponse> d = data.GetData <UserNamePacketResponse>();
                this.doctorUserName = d.data.doctorUserName;
                break;
            }

            case "DISCONNECT_LIVESESSION":
            {
                this.doctorUserName = null;
                break;
            }

            case "RESISTANCE":
            {
                DataPacket <ResistancePacket> d = data.GetData <ResistancePacket>();
                //TODO set Resistance of the bike
                OnResistanceReceived?.Invoke(d.data.resistance);
                break;
            }

            case "REQUEST_BIKE_STATE":
            {
                this.OnBikeStateRequested?.Invoke();
                break;
            }

            case "START_SESSION":
            {
                DataPacket <StartStopPacket> d = data.GetData <StartStopPacket>();
                this.doctorUserName = d.data.doctor;
                OnStartStopSession?.Invoke(d.data.startSession);
                break;
            }

            case "STOP_SESSION":
            {
                DataPacket <StartStopPacket> d = data.GetData <StartStopPacket>();
                OnStartStopSession?.Invoke(d.data.startSession);
                break;
            }

            case "EMERGENCY_STOP":
            {
                DataPacket <EmergencyStopPacket> d = data.GetData <EmergencyStopPacket>();
                OnEmergencyStopSession?.Invoke(d.data.startSession, d.data.resistance);
                break;
            }

            case "SERVER_MESSAGE":
            {
                DataPacket <ChatPacket> d = data.GetData <ChatPacket>();
                OnChatReceived?.Invoke(d.data.chatMessage);
                break;
            }

            case "DISCONNECT_REQUEST":
            {
                DataPacket <ChatPacket> d = data.GetData <ChatPacket>();
                Disconnect();
                break;
            }

            default:
                Console.WriteLine("Type is not valid");
                break;
            }
        }
Beispiel #9
0
        public void PipeMessage(NamedPipeConnection <PipeData, PipeData> conn, PipeData message)
        {
            Type type = Type.GetType(message.id + ",FFMemoryParser");

            if (type == null)
            {
                return;
            }

            Object obj = message.data.ToObject();

            if (obj != null)
            {
                if (type.Name == "SignatureList")
                {
                    Memory.SignatureList data = (obj as Memory.SignatureList);
                    if (data != null)
                    {
                        foreach (Signature item in data)
                        {
                            Console.WriteLine(string.Format("Signature {0} Not found!", item.Key));
                        }
                    }
                }

                if (type.Name == "SigWorldData")
                {
                    SigWorldData data = (obj as SigWorldData);
                    if (data != null)
                    {
                        World = data.world;
                    }
                }
                if (type.Name == "SigCharIdData")
                {
                    SigCharIdData data = (obj as SigCharIdData);
                    if (data != null)
                    {
                        CharacterID = data.id;
                        OnCharacterId?.Invoke(this, CharacterID);
                    }
                }
                // ...
                if (type.Name == "SigPerfData")
                {
                    SigPerfData data = (obj as SigPerfData);
                    if (data != null)
                    {
                        performanceData = data;

                        OnPerformanceChanged?.Invoke(this, performanceData);
                    }
                }
                if (type.Name == "SigActorsData")
                {
                    SigActorsData data = (obj as SigActorsData);
                    if (data != null)
                    {
                        actorData = data;

                        ActorData local = null;
                        if (actorData.currentActors.Count > 0)
                        {
                            local = actorData.currentActors.First().Value;
                        }
                        if (localPlayer == null || local.name != localPlayer.name)
                        {
                            localPlayer = local;
                            if (localPlayer != null)
                            {
                                OnLocalPlayerLogin?.Invoke(this, localPlayer);
                            }
                            else
                            {
                                OnLocalPlayerLogout?.Invoke(this, localPlayer);
                            }
                        }
                    }
                }
                if (type.Name == "SigChatLogData")
                {
                    SigChatLogData data = (obj as SigChatLogData);
                    if (data != null)
                    {
                        foreach (ChatLogItem item in data.chatMessages)
                        {
                            OnChatReceived?.Invoke(this, item);
                        }
                    }
                }
                if (type.Name == "SigChatInputData")
                {
                    SigChatInputData data = (obj as SigChatInputData);
                    if (data != null)
                    {
                        ChatInputOpen = data.open;
                        if (data.open)
                        {
                            Console.WriteLine(data.text);
                        }
                    }
                }
            }
        }
Beispiel #10
0
        public async void CreateConnection(string hostname)
        {
            var token = SettingsHelper.GetSetting("Token");

            _connection = new HubConnectionBuilder()
                          .WithUrl($"http://{hostname}/client", options =>
            {
                options.AccessTokenProvider = () => Task.FromResult(token);
            })
                          .AddMessagePackProtocol()
                          .Build();

            _connection.Closed          += (exception) => _connection_Closed(exception, hostname);
            _connection.HandshakeTimeout = TimeSpan.FromSeconds(30);
            _connection.ServerTimeout    = TimeSpan.FromSeconds(60);

            _connection.On <List <string> >("ClientConnected", OnClientConnected);
            _connection.On <string, string, string>("GlobalChat", OnChatMessageReceived);
            _connection.On <string, byte[]>("GamePacket", OnGamePacketReceived);


            SendDebugMessage("Connecting to network...");
            try
            {
                await _connection.StartAsync();

                await _connection.InvokeAsync("ClientConnected", _username);

                if (!_userDataUpdateThread.IsAlive)
                {
                    _userDataUpdateThread.Start();
                }

                OnChatReceived?.Invoke(this, new OnChatReceivedEventArgs
                {
                    ChatItem = new ChatItem
                    {
                        Username  = "******",
                        Timestamp = DateTime.UtcNow,
                        Content   = "Connection to server established!",
                    }
                });
                SendDebugMessage("Connection established!");
            }
            catch (HubException e)
            {
                var content = "Connection lost... Please restart TunnelR.";

                if (e.Message.Equals("Failed to invoke 'ClientConnected' because user is unauthorized"))
                {
                    content = "You have been banned. Please contact an administrator.";
                    SetGamePacketTransferEnabled(false, null);
                }

                OnChatReceived?.Invoke(this, new OnChatReceivedEventArgs
                {
                    ChatItem = new ChatItem
                    {
                        Username  = "******",
                        Timestamp = DateTime.UtcNow,
                        Content   = content,
                    }
                });
            }
            catch
            {
                await Task.Delay(5000);

                if (_connection.State != HubConnectionState.Connected)
                {
                    Start(_username);
                }
            }
        }