Skype Application-to-Application
前やったら成功した。実験用ソース乗せとく。
あと毎晩テスト期間中にもかかわらず実験に付き合ってくれたBlackManに多謝。
Skype Application-to-Applicationがなにかっていうと、要するに
Skypeをインフラにしてしまおう。っていう話。
電話ができてチャットができるんだったらゲームのデータ乗せたっていいじゃんっていう発想だと思う。
というわけでこれで通信対戦をもくろんでたりする。
誰か先を越したら教えてもらえると悔しい・・・でも・・・ってなると思う。というわけで教えて。
あと、自分でApplication-to-Applicationについて調べるときは、
「AP2AP」「App2App」「APtoAP」とかいろいろ試したほうがいい。
Required:Skype4Py, Pygame
import Skype4Py from Skype4Py import * def quit(event, app): if event.type == QUIT: pygame.quit() sys.exit(0) app.Delete() elif event.type == KEYDOWN and event.key == K_ESCAPE: pygame.quit() sys.exit(0) app.Delete() import pygame from pygame.locals import * SCREEN_SIZE = (640, 480) pygame.init() screen = pygame.display.set_mode(SCREEN_SIZE) pygame.display.set_caption('') background = pygame.Surface(screen.get_size()) background = background.convert() background.fill((255, 255, 255)) def tuple2str(t): return str(t[0]) + " " + str(t[1]) def str2tuple(s): temp = s.split(" ") return (int(temp[0]), int(temp[1])) class Myself(pygame.sprite.Sprite): def __init__(self, app): pygame.sprite.Sprite.__init__(self) self.image = pygame.Surface((32, 32)) pygame.draw.circle(self.image, Color("red"), (16, 16), 16) self.image.set_colorkey(Color("black")) self.rect = self.image.get_rect() self.app = app def sendpos(self): self.app.SendDatagram(tuple2str(self.rect.center)) def update(self): self.sendpos() class Enemy(pygame.sprite.Sprite): def __init__(self, skype): pygame.sprite.Sprite.__init__(self) self.image = pygame.Surface((32, 32)) pygame.draw.circle(self.image, Color("red"), (16, 16), 16) self.image.set_colorkey(Color("black")) self.rect = self.image.get_rect() skype.OnApplicationDatagram = self.receivepos def receivepos(self, app, stream, text): print str2tuple(text) self.rect.center = str2tuple(text) screen.blit(background, (0, 0)) pygame.display.flip() skype = Skype4Py.Skype() skype.Attach() app = skype.Application("pythontest") app.Create() f = open("./name.txt", "r") name = f.readline().replace("\n", "") f.close() print name stream = app.Connect(name, True) clock = pygame.time.Clock() myselftest = Myself(app) enemytest = Enemy(skype) sprgrp = pygame.sprite.RenderPlain([myselftest, enemytest]) while 1: clock.tick(60) events = pygame.event.get() screen.blit(background, (0, 0)) for e in events: quit(e, app) if pygame.key.get_pressed()[K_UP]: myselftest.rect.y -= 1 if pygame.key.get_pressed()[K_DOWN]: myselftest.rect.y += 1 if pygame.key.get_pressed()[K_LEFT]: myselftest.rect.x -= 1 if pygame.key.get_pressed()[K_RIGHT]: myselftest.rect.x += 1 sprgrp.update() sprgrp.draw(screen) pygame.display.flip()
起動するとカレントディレクトリ内にある(はずの)"test.txt"に書いてある接続先の
Skype名を読みにいく。ないと例外起こして爆発するので注意。
あと、接続が確立されるまで応答無しになって、タイトルバーにも「応答なし」ってでるけど
接続が確立されたら解除されるのでご安心を。仕様です。
通信飛んできたら速効で丸の位置を変更しに行くので、メインループから操作しづらい気がする。
実際に使うときは要求をリストかなんかにためてスタックにするといいかもわからん。
あとマルチスレッド?とか?かな?