コード例 #1
0
        private void ServerThread(object data)
        {
            ServerStartInfo info          = data as ServerStartInfo;
            NetworkStream   networkStream = info.ClientSocket.GetStream();

            while (!serverClosed)
            {
                try
                {
                    byte[] bytesFrom = new byte[1048576];
                    networkStream.Read(bytesFrom, 0, info.ClientSocket.ReceiveBufferSize);
                    if (bytesFrom.Length > 0)
                    {
                        OnDataRecieved?.Invoke(this, new DataRecievedEventArgs(bytesFrom, info.ClientSocket.ReceiveBufferSize, (byte)StringTerminator));
                    }
                }
                catch (System.IO.IOException)
                {
                    info.ClientSocket.Close();
                    return;
                }
                catch (Exception ex)
                {
                    info.ClientSocket.Close();
                    StopListening(ex.Message + Environment.NewLine + ex.StackTrace);
                    return;
                }
            }
        }
コード例 #2
0
        private async void ProcessMasterMessages(object obj)
        {
            ProcessArgs props  = obj as ProcessArgs;
            TcpClient   client = props.Client;
            var         stream = client.GetStream();

            while (client.Connected)
            {
                if (props.Token.IsCancellationRequested)
                {
                    return;
                }
                while (!stream.DataAvailable)
                {
                    if (props.Token.IsCancellationRequested)
                    {
                        return;
                    }
                }

                // read data into dataframe
                byte[] data = new byte[client.Available];
                await stream.ReadAsync(data, 0, client.Available);

                // event!
                OnDataRecieved?.Invoke(Encoding.UTF8.GetString(data));
            }
            var constr = client.Client.RemoteEndPoint.ToString();
            var addr   = constr.Split(':')[0];

            client.Close();
            OnConnectionFromMaster(addr, false);
        }
コード例 #3
0
        private async void ProcessClient(object obj)
        {
            TcpClient client = obj as TcpClient;
            var       stream = client.GetStream();

            while (client.Connected)
            {
                while (!stream.DataAvailable)
                {
                    ;
                }

                // read data into dataframe
                byte[] data = new byte[client.Available];
                await stream.ReadAsync(data, 0, client.Available);

                // event!
                OnDataRecieved?.Invoke(Encoding.UTF8.GetString(data));
            }
            var constr = client.Client.RemoteEndPoint.ToString();
            var addr   = constr.Split(':')[0];

            client.Close();
            OnConnectionFromClient(addr, false);
        }
コード例 #4
0
 private void XmppOnOnRosterEnd(object sender)
 {
     foreach (var n in Friends)
     {
         var email = DatabaseHandler.GetUser(n.User.Bare);
         if (String.IsNullOrWhiteSpace(email))
         {
             /*
              * var viq = new VcardIq
              * {
              *      Type = IqType.get ,
              *      To = n.User.Bare
              * };
              * viq.From = Me.User.Bare;
              * viq.Vcard.JabberId = n.User.Bare;
              * viq.GenerateId();
              * Xmpp.Send(viq);
              */
         }
         else
         {
             n.Email = email;
         }
     }
     if (OnDataRecieved != null)
     {
         OnDataRecieved.Invoke(this, DataRecType.FriendList, Friends);
     }
     if (Chatting.Rooms.Count(x => x.IsGroupChat && x.GroupUser.User.Bare == "lobby@conference." + Host) == 0)
     {
         Xmpp.RosterManager.AddRosterItem(new Jid("lobby@conference." + Host));
     }
 }
コード例 #5
0
        private void createThread(string Name, int Port, Socket socket, bool silent = false)
        {
            new Thread(() => {
                print("[Thread] Listening for incoming data on port {0}", Port);

                while (true)
                {
                    try
                    {
                        Thread.Sleep(25);

                        lock (mutex)
                        {
                            if (socket.Available > 0)
                            {
                                byte[] buffer = new byte[socket.Available];
                                socket.Receive(buffer);
                                //print("[{0}] Recieved\n: {1}", Name,Encoding.ASCII.GetString(buffer));
                                string decodedBuffer = Encoding.ASCII.GetString(buffer);
                                int ftpResponseId    = 0;
                                int.TryParse(decodedBuffer.Substring(0, 3), out ftpResponseId);

                                OnDataRecieved?.Invoke(socket, new DataEventArgs(Name, ftpResponseId, decodedBuffer));
                            }
                        }
                    } catch (Exception)
                    {
                        break;
                    }
                }
            }).Start();
        }
コード例 #6
0
 public void RemoveFriend(NewUser user)
 {
     Xmpp.PresenceManager.Unsubscribe(user.User);
     RosterManager.RemoveRosterItem(user.User);
     Friends.Remove(user);
     OnDataRecieved.Invoke(this, DataRecType.FriendList, this);
 }
コード例 #7
0
 public void AcceptFriendship(Jid user)
 {
     Xmpp.PresenceManager.ApproveSubscriptionRequest(user);
     Xmpp.PresenceManager.Subscribe(user);
     Xmpp.SendMyPresence();
     if (OnDataRecieved != null)
     {
         OnDataRecieved.Invoke(this, DataRecType.FriendList, Friends);
     }
     //Xmpp.RequestRoster();
 }
コード例 #8
0
 /// <summary>
 /// Starts listening to messages.
 /// </summary>
 /// <returns></returns>
 public bool Start()
 {
     new Task(() => {
         try {
             while (true)
             {
                 OnDataRecieved?.Invoke(this, GetData());
             }
         } catch {
             Close();
         }
     }).Start();
     return(true);
 }
コード例 #9
0
 /// <summary>
 /// Starts listening to messages.
 /// </summary>
 /// <returns></returns>
 public bool Start()
 {
     new Task(() => {
         try {
             while (true)
             {
                 string data = m_reader.ReadString();
                 if (data.ToString() != "")
                 {
                     OnDataRecieved?.Invoke(this, new DataReceivedEventArgs(data.ToString()));
                 }
             }
         } catch {
             Close();
         }
     }).Start();
     return(true);
 }
コード例 #10
0
        private void XmppOnOnIq(object sender, IQ iq)
        {
            if (iq.Error != null && iq.Error.Code == ErrorCode.NotAllowed)
            {
                if (OnLoginComplete != null)
                {
                    OnLoginComplete.Invoke(this, LoginResults.Failure);
                }
            }
            if (iq.Type == IqType.result)
            {
                if (iq.Vcard != null)
                {
                    var f = Friends.AsParallel().SingleOrDefault(x => x.User.Bare == iq.From.Bare);
                    if (f != null)
                    {
                        var email = DatabaseHandler.GetUser(f.User.Bare);
                        if (String.IsNullOrWhiteSpace(email))
                        {
                            var s = iq.Vcard.GetEmailAddresses().SingleOrDefault(x => !String.IsNullOrWhiteSpace(x.UserId));
                            if (s != null)
                            {
                                f.Email = s.UserId;
                                DatabaseHandler.AddUser(f.User.Bare, f.Email);
                            }
                        }
                        else
                        {
                            f.Email = email;
                        }
                    }

                    if (OnDataRecieved != null)
                    {
                        OnDataRecieved.Invoke(this, DataRecType.FriendList, Friends);
                    }
                }
            }
        }
コード例 #11
0
        private void WaitForReply(object data)
        {
            while (true)
            {
                try
                {
                    NetworkStream serverStream   = data as NetworkStream;
                    byte[]        bytesToRecieve = new byte[sizeof(int)];

                    serverStream.Read(bytesToRecieve, 0, sizeof(int));
                    serverStream.Write(new byte[] { (byte)'o', (byte)'k' }, 0, 2);

                    int    byt      = BitConverter.ToInt32(bytesToRecieve, 0);
                    byte[] inStream = new byte[byt];
                    serverStream.Read(inStream, 0, byt);

                    OnDataRecieved?.Invoke(this, new DataRecievedEventArgs(inStream, client.ReceiveBufferSize, (byte)StringTerminator));
                    // WARNING : cross thread errors may occur from here
                }
                catch
                { }
            }
        }
コード例 #12
0
        public static void Run()
        {
            TcpListener ServerSocket = new TcpListener(IPAddress.Any, Port);

            OnDataRecieved.Invoke("[SERVER] Started");
            ServerSocket.Start();

            Socket conn = ServerSocket.AcceptSocket();

            OnDataRecieved.Invoke("[SERVER] Connected");
            Connected = true;

            while (conn.Connected)
            {
                if (ShouldDisconnect)
                {
                    conn.Disconnect(false);
                    break;
                }

                try
                {
                    //Check to see if we have any data in the socket
                    if (conn.Available > 0)
                    {
                        //create a buffer and consume it
                        byte[] Buffer = new byte[conn.Available];
                        conn.Receive(Buffer);

                        //Convert it to a string
                        string data = Encoding.ASCII.GetString(Buffer);

                        if (OnDataRecieved != null)
                        {
                            OnDataRecieved.Invoke(data);
                        }
                    }

                    lock (Commands)
                    {
                        if (Commands.Count > 0)
                        {
                            string command = Commands.Dequeue();


                            OnDataRecieved("[SERVER] => " + command);
                            List <byte> cmd = new List <byte>();
                            cmd.AddRange(Encoding.ASCII.GetBytes(command));
                            cmd.Add(0);
                            conn.Send(cmd.ToArray());
                        }
                    }
                }
                catch (Exception e)
                {
                    OnDataRecieved("[SERVER] Error: " + e.ToString());
                    conn.Disconnect(false);
                    break;
                }


                Thread.Sleep(100);
            }

            Connected = false;
            OnDataRecieved("[SERVER] Disconnected");
        }
コード例 #13
0
        private void ServerThread_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            ServerThreadState state = e.UserState as ServerThreadState;

            OnDataRecieved?.Invoke(this, new DataRecievedEventArgs(state.Data.Clone() as byte[], state.Length, state.RecievedTime, (byte)StringTerminator));
        }
コード例 #14
0
 private void DataRecieved(object sender, DataRecievedEventArgs args)
 {
     OnDataRecieved?.Invoke(sender, args);
 }
コード例 #15
0
 /// <summary>
 /// virtual handler for any action to be taken when data is received. Override to use.
 /// </summary>
 /// <param name="data">The input report that was received</param>
 protected virtual void HandleDataReceived(HIDReport report)
 {
     // Fire the event handler if assigned
     OnDataRecieved?.Invoke(this, report);
 }
コード例 #16
0
 private void XmppOnOnMessage(object sender, Message msg)
 {
     if (msg.Type == MessageType.normal)
     {
         if (msg.Subject == "gameready")
         {
             var port = -1;
             if (Int32.TryParse(msg.Body, out port) && port != -1)
             {
                 if (OnDataRecieved != null)
                 {
                     OnDataRecieved.Invoke(this, DataRecType.HostedGameReady, port);
                 }
                 CurrentHostedGamePort = port;
             }
         }
         else if (msg.Subject == "gamelist")
         {
             var list = new List <HostedGameData>();
             foreach (var a in msg.ChildNodes)
             {
                 var gi = a as HostedGameData;
                 if (gi != null)
                 {
                     list.Add(gi);
                 }
                 var el = a as Element;
                 gi = el as HostedGameData;
                 if (el == null)
                 {
                     continue;
                 }
             }
             _games = list;
             if (OnDataRecieved != null)
             {
                 OnDataRecieved.Invoke(this, DataRecType.GameList, list);
             }
         }
         else if (msg.Subject == "refresh")
         {
             if (OnDataRecieved != null)
             {
                 OnDataRecieved.Invoke(this, DataRecType.GamesNeedRefresh, null);
             }
         }
         else if (msg.From.Bare.ToLower() == Xmpp.MyJID.Server.ToLower())
         {
             if (msg.Subject == null)
             {
                 msg.Subject = "";
             }
             if (msg.Body == null)
             {
                 msg.Body = "";
             }
             var d = new Dictionary <string, string>();
             d["Message"] = msg.Body;
             d["Subject"] = msg.Subject;
             if (OnDataRecieved != null)
             {
                 OnDataRecieved.Invoke(this, DataRecType.Announcement, d);
             }
         }
     }
 }
コード例 #17
0
        private void XmppOnOnPresence(object sender, Presence pres)
        {
            //if (pres.From.User != "lobby") Debugger.Break();
            if (pres.From.User == Xmpp.MyJID.User)
            {
                if (pres.Type == PresenceType.subscribe)
                {
                    Xmpp.PresenceManager.ApproveSubscriptionRequest(pres.From);
                }
                else
                {
                    myPresence      = pres;
                    myPresence.Type = PresenceType.available;
                    if (pres.Show != ShowType.NONE)
                    {
                        myPresence.Show = pres.Show;
                    }
                    Xmpp.Status = myPresence.Status ?? Xmpp.Status;
                    if (OnDataRecieved != null)
                    {
                        OnDataRecieved.Invoke(this, DataRecType.MyInfo, pres);
                    }
                }
                return;
            }
            switch (pres.Type)
            {
            case PresenceType.available:
                if (pres.From.Server == "conference." + Host)
                {
                    var rm = Chatting.GetRoom(new NewUser(pres.From), true);
                    rm.AddUser(new NewUser(pres.MucUser.Item.Jid), false);
                }
                break;

            case PresenceType.unavailable:
            {
                if (pres.From.Server == "conference." + Host)
                {
                    if (pres.MucUser.Item.Jid == null)
                    {
                        break;
                    }
                    if (pres.MucUser.Item.Jid.Bare == Me.User.Bare)
                    {
                        break;
                    }
                    var rm = Chatting.GetRoom(new NewUser(pres.From), true);
                    rm.UserLeft(new NewUser(pres.MucUser.Item.Jid));
                }
                break;
            }

            case PresenceType.subscribe:
                if (!Friends.Contains(new NewUser(pres.From.Bare)))
                {
                    Notifications.Add(new FriendRequestNotification(pres.From.Bare, this, _noteId));
                    _noteId++;
                    if (OnFriendRequest != null)
                    {
                        OnFriendRequest.Invoke(this, pres.From.Bare);
                    }
                }
                else
                {
                    AcceptFriendship(pres.From.Bare);
                }
                break;

            case PresenceType.subscribed:
                break;

            case PresenceType.unsubscribe:
                break;

            case PresenceType.unsubscribed:
                break;

            case PresenceType.error:
                break;

            case PresenceType.probe:
                break;
            }
            for (int i = 0; i < Friends.Count; i++)
            {
                if (Friends[i].User.User == pres.From.User)
                {
                    Friends[i].CustomStatus = pres.Status ?? "";
                    Friends[i].SetStatus(pres);
                    break;
                }
            }
            XmppOnOnRosterEnd(this);
        }
コード例 #18
0
ファイル: MyClient.cs プロジェクト: hardhill/InfocenterWPF
 private void WebSocket_DataReceived(object sender, WebSocket4Net.DataReceivedEventArgs e)
 {
     OnDataRecieved?.Invoke(sender, e);
 }