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.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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. func GetStats() Stats {
  60. rpcChan := make(chan Stats)
  61. statsChan <- rpcChan
  62. return <-rpcChan
  63. }