Highly-opinionated (ex-bullshit-free) MTPROTO proxy for Telegram. If you use v1.0 or upgrade broke you proxy, please read the chapter Version 2
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

channels.go 1.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package stats
  2. import (
  3. "net"
  4. "github.com/9seconds/mtg/mtproto"
  5. )
  6. const (
  7. connectionsChanLength = 10
  8. trafficChanLength = 10
  9. )
  10. var (
  11. crashesChan = make(chan struct{})
  12. statsChan = make(chan chan<- Stats)
  13. connectionsChan = make(chan connectionData, connectionsChanLength)
  14. trafficChan = make(chan trafficData, trafficChanLength)
  15. )
  16. type connectionData struct {
  17. connectionType mtproto.ConnectionType
  18. connected bool
  19. addr *net.TCPAddr
  20. }
  21. type trafficData struct {
  22. traffic int
  23. ingress bool
  24. }
  25. // NewCrash indicates new crash.
  26. func NewCrash() {
  27. crashesChan <- struct{}{}
  28. }
  29. // ClientConnected indicates that new client was connected.
  30. func ClientConnected(connectionType mtproto.ConnectionType, addr *net.TCPAddr) {
  31. connectionsChan <- connectionData{
  32. connectionType: connectionType,
  33. addr: addr,
  34. connected: true,
  35. }
  36. }
  37. // ClientDisconnected indicates that client was disconnected.
  38. func ClientDisconnected(connectionType mtproto.ConnectionType, addr *net.TCPAddr) {
  39. connectionsChan <- connectionData{
  40. connectionType: connectionType,
  41. addr: addr,
  42. connected: false,
  43. }
  44. }
  45. // IngressTraffic accounts new ingress traffic.
  46. func IngressTraffic(traffic int) {
  47. trafficChan <- trafficData{
  48. traffic: traffic,
  49. ingress: true,
  50. }
  51. }
  52. // EgressTraffic accounts new ingress traffic.
  53. func EgressTraffic(traffic int) {
  54. trafficChan <- trafficData{
  55. traffic: traffic,
  56. ingress: false,
  57. }
  58. }
  59. // GetStats returns a snapshot of Stats instance.
  60. func GetStats() Stats {
  61. rpcChan := make(chan Stats)
  62. statsChan <- rpcChan
  63. return <-rpcChan
  64. }