如何使用vb.net获取CSGO gamestate集成数据

时间:2017-06-01 03:40:22

标签: python vb.net steam

我一直在编写python代码很长一段时间才能获得CSGO gamestate_integration,但我目前需要在vb.net中编写一些内容来做同样的事情并且它无法正常工作。

tl; dr版本:vb.net不接受来自CSGO的帖子请求,但是一个简单的python脚本可以回应对vb.net的帖子请求并且它可以工作。 vb.net应用程序以管理员身份运行。

我有一个简单的类文件(显然我的URI是私有的):

Imports System.IO
Imports System.ServiceModel
Imports System.ServiceModel.Web
Imports JSONReceiver

<ServiceContract()>
Public Interface iJSONReceiver
    <OperationContract>
    <WebGet()>
    Function get_stats(ByVal data As String) As String

    <OperationContract()>
    <WebInvoke(RequestFormat:=WebMessageFormat.Json)>
    Function post_stats(ByVal request As Stream) As String
End Interface

Public Class JSONReceiver
    Implements iJSONReceiver

    Public Function post_stats(ByVal request As Stream) As String Implements iJSONReceiver.post_stats
        Dim reader As New StreamReader(request)
        Console.WriteLine("In post_stats")
        Console.WriteLine(reader.ReadToEnd())
        Console.WriteLine()
        Return "OK"
    End Function

    Public Function get_stats(ByVal data As String) As String Implements iJSONReceiver.get_stats
        Console.WriteLine("In get_stats")
        Console.WriteLine(data)
        Console.WriteLine()
        Return "OK"
    End Function
End Class

用于测试它的简单代码:

Public host As WebServiceHost
Public post_ep As ServiceEndpoint

Public Sub main()
    host = New WebServiceHost(GetType(JSONReceiver), New Uri("http://192.168.1.102:8080"))
    post_ep = host.AddServiceEndpoint(GetType(iJSONReceiver), New WebHttpBinding(), "")

    host.Open()
    Console.WriteLine("Press enter to quit...")
    Console.ReadLine()
    host.Close()
End Sub

我可以使用Web浏览器指向get_stats()端点,它工作得很好,但我正在尝试使用CSGO gamestate_integration功能将数据发布到我的服务中,它似乎不会喜欢它。

所以我所做的就是撕掉我的旧python代码,简单地回应对vb.net web服务的请求,它可以工作...... python代码接收数据并简单地将其发布到vb.net服务,并且vb.net服务很乐意接受它。

所以我将vb JSONReceiver的URI更改为端口8081,并在原始uri上运行此脚本(192.168.1.102:8080)

import web
import urllib2

class Stats(object):
    def POST(self):
        json_data = web.data()
        try:
            echo(json_data)
        except Exception, e:
            print(e.__str__())
        return "OK"

def echo(data):
    request = urllib2.Request("http://192.168.1.102:8081/post_stats")
    request.add_data(data)
    f = urllib2.urlopen(request)
    print f.read()


urls = (
    '/post_stats', 'Stats',
)

if __name__ == "__main__":
    app = web.application(urls, globals())
    app.run()

简而言之,URI CSGO用于​​发布到我的服务是http://192.168.1.102:8080,它会点击我的python服务,然后将请求逐字回显到http://192.168.1.102:8081(同样,这些是私有URI)。

我不知道为什么,但它确实有效......但是必须运行包装才能获得这些数据不仅奇怪,而且这对问题来说真的不是一个可接受的解决方案......显然当它来自我的python脚本时,vb.net正好处理帖子请求;显然CSGO正在发布请求,或者我的python脚本无法接收它,所以我在查找断开连接时遇到问题...

Python是否会在CSGO可能不会的请求中添加内容?

我是否需要回退到套接字编程?

0 个答案:

没有答案